Linux Kernel hasta 6.18.16/6.19.6/7.0-rc1 bpf bq_enqueue q[] desbordamiento de búfer

| CVSS Puntuación meta temporal | Precio actual del exploit (≈) | Puntuación de interés CTI |
|---|---|---|
| 6.7 | $0-$5k | 0.63 |
Resumen
Una vulnerabilidad fue encontrada en Linux Kernel hasta 6.18.16/6.19.6/7.0-rc1 y clasificada como crítica. Resulta afectada una función desconocida dentro del componente bpf. La alteración del argumento q[] resulta en desbordamiento de búfer. Esta vulnerabilidad se conoce como CVE-2026-23294. El ataque debe ser iniciado local. Ningún exploit está disponible. Se recomienda actualizar el componente afectado.
Detalles
Una vulnerabilidad ha sido encontrada en Linux Kernel hasta 6.18.16/6.19.6/7.0-rc1 y clasificada como crítica. La función bq_enqueue del componente bpf es afectada por esta vulnerabilidad. Mediante la manipulación del parámetro q[] de un input desconocido se causa una vulnerabilidad de clase desbordamiento de búfer. Esto tiene repercusión sobre la confidencialidad, integridad y disponibilidad. CVE resume:
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:
bpf: Corrige condición de carrera en devmap en PREEMPT_RT
En kernels PREEMPT_RT, la xdp_dev_bulk_queue (bq) por CPU puede ser accedida concurrentemente por múltiples tareas preemptivas en la misma CPU.
El código original asume que bq_enqueue() y __dev_flush() se ejecutan atómicamente con respecto la una a la otra en la misma CPU, confiando en local_bh_disable() para prevenir la expropiación. Sin embargo, en PREEMPT_RT, local_bh_disable() solo llama a migrate_disable() (cuando PREEMPT_RT_NEEDS_BH_LOCK no está configurado) y no deshabilita la expropiación, lo que permite que la planificación CFS expropie una tarea durante bq_xmit_all(), permitiendo que otra tarea en la misma CPU entre en bq_enqueue() y opere en la misma bq por CPU concurrentemente.
Esto lleva a varias condiciones de carrera:
1. Doble liberación / uso después de liberación en bq->q[]: bq_xmit_all() toma una instantánea de cnt = bq->count, luego itera bq->q[0..cnt-1] para transmitir tramas. Si es expropiada después de la instantánea, una segunda tarea puede llamar a bq_enqueue() -> bq_xmit_all() en la misma bq, transmitiendo (y liberando) las mismas tramas. Cuando la primera tarea se reanuda, opera con punteros obsoletos en bq->q[], causando uso después de liberación.
2. Corrupción de bq->count y bq->q[]: bq_enqueue() concurrente modificando bq->count y bq->q[] mientras bq_xmit_all() los está leyendo.
3. Condición de carrera de desmontaje de dev_rx/xdp_prog: __dev_flush() borra bq->dev_rx y bq->xdp_prog después de bq_xmit_all(). Si es expropiada entre el retorno de bq_xmit_all() y bq->dev_rx = NULL, una bq_enqueue() expropiadora ve dev_rx aún configurado (no-NULL), omite añadir bq a la flush_list, y encola una trama. Cuando __dev_flush() se reanuda, borra dev_rx y elimina bq de la flush_list, dejando huérfana la trama recién encolada.
4. __list_del_clearprev() en flush_node: similar a la condición de carrera de cpumap, ambas tareas pueden llamar a __list_del_clearprev() en el mismo flush_node, la segunda desreferencia el puntero prev ya establecido en NULL.
La condición de carrera entre la tarea A (__dev_flush -> bq_xmit_all) y la tarea B (bq_enqueue -> bq_xmit_all) en la misma CPU:
Tarea A (xdp_do_flush) Tarea B (redirección ndo_xdp_xmit)
---------------------- --------------------------------
__dev_flush(flush_list)
bq_xmit_all(bq)
cnt = bq->count /* ej. 16 */
/* comienza a iterar bq->q[] */
<-- CFS expropia la Tarea A -->
bq_enqueue(dev, xdpf)
bq->count == DEV_MAP_BULK_SIZE
bq_xmit_all(bq, 0)
cnt = bq->count /* ¡los mismos 16! */
ndo_xdp_xmit(bq->q[])
/* tramas liberadas por el controlador */
bq->count = 0
<-- La Tarea A se reanuda -->
ndo_xdp_xmit(bq->q[])
/* uso después de liberación: ¡tramas ya liberadas! */
Solucione esto añadiendo un local_lock_t a xdp_dev_bulk_queue y adquiriéndolo en bq_enqueue() y __dev_flush(). Estas rutas ya se ejecutan bajo local_bh_disable(), así que use local_lock_nested_bh() que en no-RT es una anotación pura sin sobrecarga, y en PREEMPT_RT proporciona un bloqueo de suspensión por CPU que serializa el acceso a la bq.El advisory puede ser descargado de git.kernel.org. La vulnerabilidad es identificada como CVE-2026-23294. Resulta difícil de explotar. El ataque sólo se debe hacer local. Hay detalles técnicos conocidos, pero no se dispone de un exploit.
Una actualización a la versión 6.18.17, 6.19.7 o 7.0-rc2 elimina esta vulnerabilidad. Aplicando el parche 6c10b019785dc282c5f45d21e4a3f468b8fd6476/ab1a56c9d99189aa5c6e03940d06e40ba6a28240/1872e75375c40add4a35990de3be77b5741c252c es posible eliminar el problema. El parche puede ser descargado de git.kernel.org. El mejor modo sugerido para mitigar el problema es Actualización.
La vulnerabilidad también está documentado en la base de datos CERT Bund (WID-SEC-2026-0861). Once again VulDB remains the best source for vulnerability data.
Afectado
- Open Source Linux Kernel
Producto
Escribe
Proveedor
Nombre
Versión
- 6.18.0
- 6.18.1
- 6.18.2
- 6.18.3
- 6.18.4
- 6.18.5
- 6.18.6
- 6.18.7
- 6.18.8
- 6.18.9
- 6.18.10
- 6.18.11
- 6.18.12
- 6.18.13
- 6.18.14
- 6.18.15
- 6.18.16
- 6.19.0
- 6.19.1
- 6.19.2
- 6.19.3
- 6.19.4
- 6.19.5
- 6.19.6
- 7.0-rc1
Licencia
Sitio web
- Proveedor: https://www.kernel.org/
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Confiabilidad: 🔍
CVSSv3
VulDB Puntuación meta base: 7.0VulDB Puntuación meta temporal: 6.7
VulDB Puntuación base: 7.0
VulDB Puntuación temporal: 6.7
VulDB Vector: 🔒
VulDB Confiabilidad: 🔍
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vector | Complejidad | Autenticación | Confidencialidad | Integridad | Disponibilidad |
|---|---|---|---|---|---|
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
VulDB Puntuación base: 🔒
VulDB Puntuación temporal: 🔒
VulDB Confiabilidad: 🔍
Explotación
Clase: Desbordamiento de búferCWE: CWE-416 / CWE-119
CAPEC: 🔒
ATT&CK: 🔒
Físico: En parte
Local: Sí
Remoto: No
Disponibilidad: 🔒
Estado: No está definido
EPSS Score: 🔒
EPSS Percentile: 🔒
Predicción de precios: 🔍
Estimación del precio actual: 🔒
| 0-Day | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
|---|---|---|---|---|
| Hoy | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
Inteligencia de amenazas
Interés: 🔍Actores activos: 🔍
Grupos APT activos: 🔍
Contramedidas
Recomendación: ActualizaciónEstado: 🔍
Hora de 0 días: 🔒
Actualización: Kernel 6.18.17/6.19.7/7.0-rc2
Parche: 6c10b019785dc282c5f45d21e4a3f468b8fd6476/ab1a56c9d99189aa5c6e03940d06e40ba6a28240/1872e75375c40add4a35990de3be77b5741c252c
Línea de tiempo
2026-01-13 CVE asignado2026-03-25 Aviso publicado
2026-03-25 Entrada de VulDB creada
2026-03-30 Última actualización de VulDB
Fuentes
Proveedor: kernel.orgAviso: git.kernel.org
Estado: Confirmado
CVE: CVE-2026-23294 (🔒)
GCVE (CVE): GCVE-0-2026-23294
GCVE (VulDB): GCVE-100-353110
CERT Bund: WID-SEC-2026-0861 - Linux Kernel: Mehrere Schwachstellen
Artículo
Fecha de creación: 2026-03-25 13:43Actualizado: 2026-03-30 00:43
Cambios: 2026-03-25 13:43 (60), 2026-03-26 03:49 (7), 2026-03-30 00:43 (2)
Completo: 🔍
Cache ID: 216:BD0:103
Sin comentarios aún. Idiomas: es + pt + en.
Por favor, inicie sesión para comentar.