Recent Posts
Recent Comments
Link
06-28 05:11
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA 보안 정수 오버플로우(Integer Overflow) 본문

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