DEV&OPS/Java
JAVA 보안 정수 오버플로우(Integer Overflow)
ALEPH.GEM
2022. 8. 16. 16:33
정수 오버플로우
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
CWE - CWE-190: Integer Overflow or Wraparound (4.8)
div.collapseblock { display:inline} CWE-190: Integer Overflow or WraparoundWeakness ID: 190Abstraction: BaseStructure: Simple The software performs a calculation that can produce an integer overflow or wraparound, when the logic assumes that the resulting
cwe.mitre.org
728x90