0. 개요
널 포인터(Null Pointer) 역참조는 '일반적으로 그 객체가 널(Null)이 될 수 없다.' 라는 가정을 위반했을 때 발생한다.
공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우,
그 결과로 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는 데 사용될 수 있다.
* Null 역참조 : 프로그램에서 객체가 생성되면 메모리 공간에 할당되어 저장되고
이 객체의 값을 불러오기 위해서는 객체가 저장된 메모리의 위치주소가 필요하다.
이때 객체가 Null인 경우에는 객체가 없는 것으로 간주되어
메모리에 저장되지도, 저장된 주소값도 존재하지 않게 된다.
이런 상황에서 Null 인 객체를 호출하면 불러올 주소값이 존재하지 않아
프로그램이 정상적으로 작동할 수 없게 된다.
1. 보안 대책
- Null 이 될 수 있는 레퍼런스는 참조하기 전에 Null 값인지를 검사하여 안전한 경우에만 사용한다.
2. 진단 방법
- 참조변수 및 객체가 Null이 될 수 있는지 확인한다.
- 참조변수 및 객체를 사용하기 전에 Null 여부를 검증하는지 확인한다.
3. 코드 예시
# 1 - NULL Pointer 역참조 - 안전하지 않은 코드 예시(JAVA)
obj가 null이고, elt가 null이 아닌 경우 널(Null) 포인터 역참조가 발생한다.
>> obj가 null인지 검사 후 참조하자.
# 1 + NULL Pointer 역참조 - 안전한 코드 예시(JAVA)
# 2 - NULL Pointer 역참조 - 안전하지 않은 코드 예시(JAVA)
request.getParameter에 의해 null이 들어오게 되면 널(Null) 포인터 역참조가 발생한다.
>> null을 가질 수 있는 참조 변수를 사용해 객체의 속성이나 메소드를 사용하는 경우 null 검사를 수행한 뒤 사용하자.
# 2 + NULL Pointer 역참조 - 안전한 코드 예시(JAVA)
4. 해당 취약점 CASE
- 객체를 Null로 초기화 한 특정 조건에 의한 분기시점에서 사용
- Null 로 초기화한 객체를 초기화 시 Exception이 발생하고, Exception 처리 시 Null 체크를 하지 않음
- 함수 리턴 결과가 Null일 수 있는 경우, 리턴값을 Null 체크하지 않고 사용
- 조건절에서 Null 체크 전에 문자열 길이 등을 체크할 경우
#. 참고 블로그
https://prokyhsigma.tistory.com/74?category=848515
'about Security > SECURE CODING' 카테고리의 다른 글
[에러처리] 오류 메세지를 통한 정보 노출 (5등급) (0) | 2021.08.10 |
---|---|
[시간 및 상태] 종료되지 않는 반복문 또는 재귀 함수 (5등급) (0) | 2021.08.10 |
[에러 처리] 오류 상황 대응 부재 (4등급) (0) | 2021.08.07 |
[보안 기능] 취약한 암호화 알고리즘 사용 (4등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] 정수형 오버플로우 (4등급) (0) | 2021.08.07 |
댓글