
CVE-2023-31014 암시적 인텐트 하이재킹을 위한 교육용 Android 랩
NVIDIA GeForce NOW for Android의 CVE-2023-31014 공개 보고서를 바탕으로 만든 교육용 Android Lab이다. NVIDIA 소스코드, 실제 Action 문자열, 실제 인증정보를 포함하지 않는다.
6.00.32705137 ~ 6.04.331088326.05.33200069Oversecured가 공개적으로 언급한 노출 범주는 stream configuration, user account, game information이다.
| 구분 | 구현 내용 |
|---|---|
| Game Launcher | victim/MainActivity |
| 정상 Streamer | victim/StreamerActivity |
| 악성 Handler | attacker/HijackActivity |
| 정보 노출 | 가상의 게임·계정·세션·스트림 설정 Extras 표시 |
| 서비스 거부 | 공격 Activity가 Intent를 처리하여 정상 Streamer가 시작되지 않음 |
| 수정 | 정확한 StreamerActivity를 지정한 explicit Intent |
공식 자료에는 실제 컴포넌트 종류가 공개되지 않았다. 따라서 이 Lab은 학습이 쉬운 Activity → Activity 모델을 사용한다. 코드 실행에 이르는 실제 체인도 공개되지 않았으므로 코드 실행은 재현하지 않는다.
Victim Game Launcher
│
│ lab.cve202331014.action.START_STREAM
│ implicit Intent + 가상 session extras
▼
Android Intent Resolver
├── Victim Normal Streamer
└── Attacker HijackActivity
안전한 경로는 동일한 Intent에 다음 제한을 적용한다.
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
요구 사항:
./gradlew :victim:assembleDebug :attacker:assembleDebug
생성 APK:
victim/build/outputs/apk/debug/victim-debug.apk
attacker/build/outputs/apk/debug/attacker-debug.apk
검증을 마친 사전 빌드 APK도 dist/에 포함되어 있다.
dist/cve-2023-31014-victim-debug.apk
dist/cve-2023-31014-attacker-debug.apk
에뮬레이터 또는 허가받은 테스트 기기에서만 실행한다.
adb install -r attacker/build/outputs/apk/debug/attacker-debug.apk
adb install -r victim/build/outputs/apk/debug/victim-debug.apk
CVE Lab Attacker를 한 번 열어 공격 앱의 역할을 확인한다.CVE Lab Victim을 연다.Normal Streamer, CVE Lab Attacker 두 개로 표시되는지 확인한다.CVE Lab Attacker를 선택한다.Normal Streamer가 실행되는지 확인한다.앱 선택기에서 항상 사용할 앱을 지정했다면 해당 앱의 시스템 설정에서 기본값 지우기를 수행한 뒤 다시 실습한다.
취약:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
startActivity(intent); // package/component 없음
수정:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
같은 제조사 패키지의 여러 컴포넌트 중 하나를 Android가 선택해야 하는 설계라면 setPackage()도 외부 앱 차단에 사용할 수 있다. 단일 대상이라면 explicit component가 더 명확하다.
다음 값은 공개되지 않았기 때문에 의도적으로 만들었다.
lab.cve202331014.action.START_STREAM Actiondemo_* Extra 이름과 값203.0.113.10 문서용 IP 주소따라서 이 프로젝트는 CVE의 취약점 원리와 수정법을 재현하지만 실제 GeForce NOW 공격 PoC가 아니다.