임의 메모리 쓰기

임의 메모리 쓰기

설명

사용자 제어 값이 메모리 쓰기 대상 포인터로 사용되면 공격자가 의도하지 않은 주소를 덮어쓸 수 있습니다.

잠재적 영향

  • 임의 메모리 손상, 권한 상승, 서비스 거부 또는 코드 실행으로 이어질 수 있습니다.

해결 방법

외부에서 지정한 주소를 쓰기 포인터로 사용하지 마세요. 애플리케이션이 소유한 객체나 버퍼를 목적지로 선택하고, 쓰기 크기가 그 범위를 넘지 않는지 확인하세요.

예시

변경 전

request->destination은 호출자가 직접 지정할 수 있는 목적지 포인터라고 가정합니다.

c
int *where = request->destination;
*where = 1;

변경 후

c
int value = 0;
int *where = &value;
*where = 1;

설명:

  • 변경 전: 요청이 지정한 목적지 포인터를 검증 없이 역참조해 값을 씁니다.
  • 변경 후: 쓰기 대상은 함수가 소유한 지역 변수 주소로 제한됩니다.

참조