
Учебная Android-лаборатория для CVE-2023-31014 — перехват неявных намерений (implicit intent hijacking)
Образовательная Android-лаборатория, созданная на основе публичного отчёта об уязвимости CVE-2023-31014 в NVIDIA GeForce NOW для Android. Не содержит исходный код NVIDIA, реальные строки Action и реальные учётные данные.
6.00.32705137 – 6.04.331088326.05.33200069Oversecured публично упомянул следующие категории раскрытия: конфигурация потока, учётная запись пользователя, информация об игре.
В официальных материалах фактический тип компонента не раскрыт. Поэтому в этой лаборатории используется простая для изучения модель 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
В dist/ также включены предварительно собранные и проверенные APK.
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_STREAMdemo_*203.0.113.10Таким образом, этот проект воспроизводит принцип уязвимости и способ её исправления для CVE, но не является реальным PoC-эксплойтом для GeForce NOW.
| Раздел | Реализация |
|---|
| Game Launcher | victim/MainActivity |
| Штатный Streamer | victim/StreamerActivity |
| Вредоносный Handler | attacker/HijackActivity |
| Раскрытие информации | Отображение вымышленных Extras игры, учётной записи, сессии и настроек потока |
| Отказ в обслуживании | Activity атакующего обрабатывает Intent, поэтому штатный Streamer не запускается |
| Исправление | Явный Intent с указанием точного StreamerActivity |