CVE-2026-64127 in Linuxinformación

Resumen

por VulDB • 2026-07-20

En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:

Bluetooth: L2CAP: ecred_reconfigure: enviar PDU empaquetada, no puntero a pila

El commit 1c08108f3014 ("Bluetooth: L2CAP: Evitar advertencias -Wflex-array-member-not-at-end") convirtió la solicitud PDU en la pila (on-stack) dentro de l2cap_ecred_reconfigure() desde una estructura explícita empaquetada a DEFINE_RAW_FLEX(), pero no ajustó los argumentos de tamaño y puntero de origen para l2cap_send_cmd():

- struct {
- struct l2cap_ecred_reconf_req req; - __le16 scid; - } pdu; + DEFINE_RAW_FLEX(struct l2cap_ecred_reconf_req, pdu, scid, 1); ... l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_RECONF_REQ, sizeof(pdu), &pdu);

Tras la conversión, DEFINE_RAW_FLEX() se expande para declarar una unión anónima pdu_u más un puntero local "pdu" que apunta a ella. Por lo tanto:

- sizeof(pdu) es ahora sizeof(struct l2cap_ecred_reconf_req *) = 8 en sistemas de 64 bits (4 en sistemas de 32 bits), no los 6 bytes de (mtu, mps, scid[1]).
- &pdu es la dirección del almacenamiento en pila del puntero local, no la dirección de la carga útil de la solicitud.

l2cap_send_cmd() reenvía (data, count) a l2cap_build_cmd(), que llama a skb_put_data(skb, data, count). Por lo tanto, el cuerpo del paquete L2CAP_ECRED_RECONFIGURE_REQ contiene 8 bytes copiados desde la pila del kernel comenzando en &pdu: los 8 bytes se superponen con el valor del puntero pdu, filtrando una dirección de pila del kernel al par Bluetooth emparejado. Los campos (mtu, mps, scid) previstos no se transmiten en absoluto, por lo que el par rechaza la solicitud como malformada y la funcionalidad L2CAP_ECRED_RECONFIGURE está rota para el iniciador local desde que se aplicó el commit introductorio.

El sitio hermano l2cap_ecred_conn_req() en el mismo commit se convirtió correctamente (sizeof(*pdu) + len, pdu); solo este sitio fue pasado por alto.

Restaurar la semántica original: pasar el tamaño completo de la estructura flexible mediante struct_size(pdu, scid, 1) y el puntero pdu (la dirección de la estructura) como origen.

Validado en un kernel host basado en stock 7.0 a través del camino de llamada real: setsockopt(SOL_BLUETOOTH, BT_RCVMTU, ...) en un socket L2CAP_MODE_EXT_FLOWCTL con estado BT_CONNECTED emite una solicitud L2CAP_ECRED_RECONFIGURE_REQ cuyo cuerpo tiene 8 bytes (el valor local pdu en la pila) en lugar de los 6 esperados. Tres capturas desde un nuevo socket / nuevo par hciemu en el mismo host: los bytes bajos varían por llamada, los altos 0xffff confirman una dirección virtual del kernel (ranura de pila aleatorizada con KASLR, no una cadena fija):

Cuerpo RECONF_REQ (ident=0x02 len=8): 42 fb 54 af 0e ca ff ff Cuerpo RECONF_REQ (ident=0x02 len=8): 52 3d 2e af 0e ca ff ff Cuerpo RECONF_REQ (ident=0x02 len=8): b2 fc 5b af 0e ca ff ff

Después de este parche, el cuerpo tiene 6 bytes que transportan los valores esperados en little-endian (mtu, mps, scid).

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsable

Linux

Reservar

2026-07-19

Divulgación

2026-07-19

Moderación

aceptado

Artículo

VDB-380283

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Want to know what is going to be exploited?

We predict KEV entries!