
مختبر تعليمي لنظام أندرويد لاختطاف الـ Intent الضمني CVE-2023-31014
مختبر Android تعليمي أُنشئ استنادًا إلى التقرير العام لثغرة CVE-2023-31014 في تطبيق NVIDIA GeForce NOW لنظام Android. لا يتضمن كود مصدر NVIDIA، ولا سلاسل Action الفعلية، ولا بيانات اعتماد حقيقية.
6.00.32705137 ~ 6.04.331088326.05.33200069فئات الكشف التي ذكرتها Oversecured علنًا هي: إعداد البث (stream configuration)، وحساب المستخدم، ومعلومات اللعبة.
| القسم | التنفيذ |
|---|---|
| مشغّل الألعاب | victim/MainActivity |
| Streamer الشرعي | victim/StreamerActivity |
| Handler الخبيث | attacker/HijackActivity |
| كشف المعلومات | عرض Extras افتراضية للعبة والحساب والجلسة وإعدادات البث |
| رفض الخدمة | يعالج Activity المهاجِم الـ Intent فلا يُشغَّل Streamer الشرعي |
| الإصلاح | Intent صريح يحدد StreamerActivity بدقة |
لم تُنشر الأنواع الفعلية للمكوّنات في المواد الرسمية. لذلك يستخدم هذا المختبر نموذج 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
شغِّل هذا فقط على محاكٍ (emulator) أو جهاز اختبار مصرّح به.
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 من منتقي تطبيقات Android.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 الفعلي.