DIVA.apk - INPUT VALIDATION ISSUES PART 3

Gunter·2024년 2월 7일
0

DIVA.apk

목록 보기
7/7

DIVA.apk는 flag를 찾아서 문제를 푸는 형식이 아닌 취약점을 확인하는 것.

Objective : This is a Missile Launch App. Spread love not War! DOS the Damn thing! Your objective here is to NOT find the code and then launch the missiles, rather it is to crash the app (and then find the root cause the crash).

Hint : Improper or no input validation issues arise when the input is not filtered or validated before using it. When developing components that take input from outside, always validate it. This is a classic memory corruption vulnerability. If you can get code execution, I would love to hear from you. I don't expect anyone to go that far though.

목적 : 이것은 미사일 발사 앱이다. 전쟁 말고 사랑을 퍼뜨려라.<?;; 미사일 발사 코드를 알아내는것이 아닌 앱을 crash시키고 해당 원인을 알아내라.

힌트 : 입력을 사용하기 전에 필터링하거나 검증하지 않으면 입력 검증이 부적절하거나 전혀 되지 않는다. 외부에서 입력을 받는 구성 요소를 개발할 때는 항상 검증하라. 이는 전형적인 메모리 손상 취약성이다.


일단 아무 문자나 입력을 해보았는데 역시 거부되었다.

Hint에서 This is a classic memory corruption vulnerability 라고 했으니까 일반적으로 스택 오버플로우를 생각하였다.


그래서 문자열을 좀 길게 넣어주었더니


문제가 강제로 종료되었다. 앱을 crash 시켰으니까 이제 원인을 알아보자.

jadx로 inputvalidation3 activity를 확인해보았다.
diva.apk는 JNI를 사용하고 있다.

JNI = Java Native Interface.
자바로 만들어진 프로그램에서 다른 언어로 작성 된 코드에 접근하기 위한 일종의 API.

DIVA의 소스코드를 보면 ( app/src/main/jni ) divajni.c 파일을 확인할 수 있다.

위와 같이 문자열을 체크하지 않는 strcpy 함수를 사용하는 것을 볼 수 있고, 사용자가 입력한 값을 code 변수에 복사해 실제 비밀번호 변수인 CODE와 비교한 것을 알 수 있다.

code는 CODESIZEMAX에 의해 20바이트로 할당 된 상태인데, 이에 문자를 40개 이상 입력하면 사이즈 체크를 하지 않는 strcpy 함수로 복사되었기 때문에 오버플로우가 발생한 것이라고 볼 수 있다.

이처럼 java에서 별도의 JVM 대신 JNI과 같이 다른 언어를 호출할 땐, 취약점이 나타날 수 있다.

0개의 댓글