버퍼 경계 초과 접근 (Buffer Overflow)
Improper Restriction of Operations within the Bounds of a Memory Buffer
설명
버퍼 관련 API 사용 시 noAssert 옵션을 true로 설정하면, 버퍼의 경계를 검사하지 않습니다. 이로 인해 읽기 또는 쓰기가 버퍼 범위를 벗어날 수 있고, 심각한 보안 문제(메모리 훼손, 예기치 않은 동작, 데이터 유출 등)를 초래할 수 있습니다.
잠재적 영향
버퍼 초과 접근(버퍼 오버플로우): 버퍼의 경계를 벗어난 메모리 접근으로 메모리 훼손 또는 악의적 코드 실행 가능
데이터 변조 또는 유출: 보호되어야 할 메모리 영역이 노출되거나 변조될 수 있음
해결 방법
Buffer API 사용 시 noAssert 옵션을 항상 false 또는 생략하여 기본 경계 검사가 수행되도록 합니다.
사용자 입력값(오프셋, 길이 등)에 대한 별도의 검증도 추가합니다.
신뢰하지 않는 데이터로부터 오프셋이나 길이를 절대 직접 사용하지 않습니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
// 취약한 코드 예시
let buf = Buffer.alloc(8);
// noAssert를 true로 설정하여 경계 체크를 하지 않음
buf.writeInt32LE(1234, 10, true); // 10이 버퍼 길이를 넘어섬
buf.readUInt8(20, true); // 존재하지 않는 메모리 접근안전한 코드
설명:
취약한 코드: noAssert 옵션을 true로 설정하면 버퍼의 경계를 검사하지 않으므로, 오프셋 값이 잘못되어 버퍼를 벗어나는 메모리에도 접근할 수 있습니다. 이로 인해 예상치 못한 동작이나 심각한 보안 취약점이 발생할 수 있습니다.
안전한 코드: noAssert 옵션을 생략하거나 false로 설정하면 Buffer API가 자동으로 경계 검사를 수행하여, 오프셋이 버퍼 범위를 넘어설 경우 예외가 발생합니다. 이에 따라 보안 취약점 발생 가능성을 줄일 수 있습니다.
참조
Previous출력 인코딩 또는 이스케이프 미흡 (Improper Output Encoding or Escaping)NextSQL 인젝션 (SQL Injection) - PostgreSQL
Last updated