삶 가운데 남긴 기록 AACII.TISTORY.COM
JAVA 보안 정수 오버플로우(Integer Overflow) 본문
정수 오버플로우
java 에서 허용한 큰 정수 값보다 더 커지면 의도하지 않게 작은 수 이거나 음수가 될 수 있습니다.
정수형 변수를 연산에 사용하는 경우 결과값의 범위를 체크하는 모듈을 사용합니다.
안전하지 않은 예
//생략
int size = new Integer(args[0]).intValue();
size += new Integer(args[1]).intValue();
MyClass[] data = new MyClass[size];
//생략
배열의 값이 오버플로우되어 음수가 되면 배열의 크기가 음수가 되어 문제가 생길 수 있습니다.
동적 메모리 할당을 위해 배열의 크기를 사용하는 경우 그 값이 음수인지 아닌지 검사하는 문장이 필요합니다.
안전한 코드의 예
//생략
int size = new Integer(args[0]).intValue();
size += new Integer(args[1]).intValue();
//배열의 크기 값이 음수인지 검사
if(size < 0) return;
MyClass[] data = new MyClass[size];
//생략
또 Ingeger 클래스에는 MAX_VALUE 라는 상수 값을 멤버로 가지고 있으니 이를 활용하여 정수의 최대 값을 검증하면 됩니다.
참고
http://cwe.mitre.org/data/definitions/190.html
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JAVA 보안 SQL Injection: mybatis Data Map (0) | 2022.08.17 |
---|---|
JAVA 보안 Reliance on Untrusted Inputs in a SecurityDecision (0) | 2022.08.17 |
JAVA 보안 HTTP Response Splitting (0) | 2022.08.16 |
JAVA 보안 Path Traversal (0) | 2022.08.05 |
JAVA 보안 Cross-Site Request Forgery (0) | 2022.08.04 |