
Lehrlabor für Android zum Implicit-Intent-Hijacking (CVE-2023-31014)
Dies ist ein zu Lehrzwecken erstelltes Android-Lab, das auf dem öffentlichen Bericht zu CVE-2023-31014 in NVIDIA GeForce NOW for Android basiert. Es enthält weder NVIDIA-Quellcode noch echte Action-Strings oder echte Anmeldeinformationen.
6.00.32705137 ~ 6.04.331088326.05.33200069Die von Oversecured öffentlich genannten Offenlegungskategorien sind Stream-Konfiguration, Benutzerkonto und Spielinformationen.
In den offiziellen Unterlagen wurde die tatsächliche Art der Komponenten nicht offengelegt. Daher verwendet dieses Lab das leicht verständliche Modell Activity → Activity. Da auch die tatsächliche Kette zur Codeausführung nicht offengelegt wurde, wird die Codeausführung nicht reproduziert.
Victim Game Launcher
│
│ lab.cve202331014.action.START_STREAM
│ impliziter Intent + virtuelle Session-Extras
▼
Android Intent Resolver
├── Victim Normal Streamer
└── Attacker HijackActivity
Der sichere Pfad wendet auf denselben Intent die folgende Einschränkung an:
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
Voraussetzungen:
./gradlew :victim:assembleDebug :attacker:assembleDebug
Erzeugte APKs:
victim/build/outputs/apk/debug/victim-debug.apk
attacker/build/outputs/apk/debug/attacker-debug.apk
Vorgefertigte und verifizierte APKs sind ebenfalls in dist/ enthalten:
dist/cve-2023-31014-victim-debug.apk
dist/cve-2023-31014-attacker-debug.apk
Nur auf einem Emulator oder einem autorisierten Testgerät ausführen.
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 einmal, um die Rolle der Angreifer-App zu prüfen.CVE Lab Victim.Normal Streamer und CVE Lab Attacker angezeigt werden.CVE Lab Attacker aus.Normal Streamer ohne App-Auswahlfeld gestartet wird.Falls im App-Auswahlfeld eine App als Standard festgelegt wurde, führe in den Systemeinstellungen dieser App Standardwerte löschen aus und wiederhole anschließend die Übung.
Verwundbar:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
startActivity(intent); // kein package/component
Sicher:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
Wenn das Design vorsieht, dass Android eine von mehreren Komponenten desselben Herstellerpakets auswählen muss, kann auch setPackage() verwendet werden, um externe Apps zu blockieren. Bei einem einzelnen Ziel ist eine explizite Komponente jedoch eindeutiger.
Die folgenden Werte wurden bewusst erstellt, da sie nicht offengelegt wurden:
lab.cve202331014.action.START_STREAMdemo_*203.0.113.10Daher reproduziert dieses Projekt das Schwachstellenprinzip und die Behebung der CVE, ist jedoch kein echter Angriffs-PoC für GeForce NOW.
| Kategorie | Implementierung |
|---|
| Game Launcher | victim/MainActivity |
| Normaler Streamer | victim/StreamerActivity |
| Bösartiger Handler | attacker/HijackActivity |
| Informationsoffenlegung | Anzeige von Extras für fiktive Spiel-, Konto-, Sitzungs- und Stream-Konfigurationen |
| Denial of Service | Die Angriffs-Activity verarbeitet den Intent, sodass der normale Streamer nicht gestartet wird |
| Behebung | Expliziter Intent, der die genaue StreamerActivity festlegt |