Linux Kernel hasta 6.4.15/6.5.2 blk-cgroup ioc_pd_init denegación de servicio

| CVSS Puntuación meta temporal | Precio actual del exploit (≈) | Puntuación de interés CTI |
|---|---|---|
| 4.6 | $0-$5k | 0.00 |
Resumen
Se ha detectado una vulnerabilidad clasificada como crítica en Linux Kernel hasta 6.4.15/6.5.2. Resulta afectada una función desconocida dentro del componente blk-cgroup. La alteración resulta en denegación de servicio. Esta vulnerabilidad está identificada como CVE-2023-54271. Ningún exploit está disponible. Es recomendable actualizar el componente afectado.
Detalles
Una vulnerabilidad ha sido encontrada en Linux Kernel hasta 6.4.15/6.5.2 y clasificada como crítica. La función ioc_pd_init del componente blk-cgroup es afectada por esta vulnerabilidad. Mediante la manipulación de un input desconocido se causa una vulnerabilidad de clase denegación de servicio. Esto tiene repercusión sobre la la disponibilidad. CVE resume:
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:
blk-cgroup: Corrección de desreferencia NULL causada por la instalación de blkg_policy_data antes de la inicialización
blk-iocost a veces causa el siguiente fallo:
BUG: desreferencia de puntero NULL del kernel, dirección: 00000000000000e0
...
RIP: 0010:_raw_spin_lock+0x17/0x30
Code: be 01 02 00 00 e8 79 38 39 ff 31 d2 89 d0 5d c3 0f 1f 00 0f 1f 44 00 00 55 48 89 e5 65 ff 05 48 d0 34 7e b9 01 00 00 00 31 c0 0f b1 0f 75 02 5d c3 89 c6 e8 ea 04 00 00 5d c3 0f 1f 84 00 00
RSP: 0018:ffffc900023b3d40 EFLAGS: 00010046
RAX: 0000000000000000 RBX: 00000000000000e0 RCX: 0000000000000001
RDX: ffffc900023b3d20 RSI: ffffc900023b3cf0 RDI: 00000000000000e0
RBP: ffffc900023b3d40 R08: ffffc900023b3c10 R09: 0000000000000003
R10: 0000000000000064 R11: 000000000000000a R12: ffff888102337000
R13: fffffffffffffff2 R14: ffff88810af408c8 R15: ffff8881070c3600
FS: 00007faaaf364fc0(0000) GS:ffff88842fdc0000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000000000e0 CR3: 00000001097b1000 CR4: 0000000000350ea0
Call Trace:
ioc_weight_write+0x13d/0x410
cgroup_file_write+0x7a/0x130
kernfs_fop_write_iter+0xf5/0x170
vfs_write+0x298/0x370
ksys_write+0x5f/0xb0
__x64_sys_write+0x1b/0x20
do_syscall_64+0x3d/0x80
entry_SYSCALL_64_after_hwframe+0x46/0xb0
Esto ocurre porque iocg->ioc es NULL. El campo es inicializado por ioc_pd_init() y nunca se borra. La desreferencia NULL es causada por blkcg_activate_policy() al instalar blkg_policy_data antes de inicializarlo.
blkcg_activate_policy() estaba haciendo lo siguiente:
1. Asignar pd's para todos los blkg's existentes e instalarlos en blkg->pd[].
2. Inicializar todos los pd's.
3. Poner en línea todos los pd's.
blkcg_activate_policy() solo toma el queue_lock y puede liberar y volver a adquirir el bloqueo ya que la asignación puede necesitar dormir. ioc_weight_write() toma blkcg->lock e itera sobre todos sus blkg's. Los dos pueden competir y si ioc_weight_write() se ejecuta durante el #1 o entre el #1 y el #2, puede encontrar un pd que aún no está inicializado, lo que lleva a un fallo.
El fallo puede ser reproducido con el siguiente script:
#!/bin/bash
echo +io > /sys/fs/cgroup/cgroup.subtree_control
systemd-run --unit touch-sda --scope dd if=/dev/sda of=/dev/null bs=1M count=1 iflag=direct
echo 100 > /sys/fs/cgroup/system.slice/io.weight
bash -c "echo '8:0 enable=1' > /sys/fs/cgroup/io.cost.qos" &
sleep .2
echo 100 > /sys/fs/cgroup/system.slice/io.weight
con el siguiente parche aplicado:
> diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
> index fc49be622e05..38d671d5e10c 100644
> --- a/block/blk-cgroup.c
> +++ b/block/blk-cgroup.c
> @@ -1553,6 +1553,12 @@ int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol)
> pd->online = false;
> }
>
> + if (system_state == SYSTEM_RUNNING) {
> + spin_unlock_irq(&q->queue_lock);
> + ssleep(1);
> + spin_lock_irq(&q->queue_lock);
> + }
> +
> /* all allocated, init in the same order */
> if (pol->pd_init_fn)
> list_for_each_entry_reverse(blkg, &q->blkg_list, q_node)
No veo una razón por la cual todos los pd's deban ser asignados, inicializados y puestos en línea juntos. El único requisito de orden es que los blkg's padre sean inicializados y puestos en línea antes que los hijos, lo cual está garantizado por el orden de recorrido. Corrijamos el error al asignar, inicializar y poner en línea el pd para cada blkg y manteniendo blkcg->lock durante la inicialización y la puesta en línea. Esto asegura que un blkg instalado esté siempre completamente inicializado y puesto en línea, eliminando la ventana de carrera.El advisory puede ser descargado de git.kernel.org. La vulnerabilidad es identificada como CVE-2023-54271. Resulta difícil de explotar. Hay detalles técnicos conocidos, pero no se dispone de un exploit.
Para el scanner Nessus se dispone de un plugin ID 319348 (EulerOS Virtualization 2.12.1 : kernel (EulerOS-SA-2026-2077)), que puede ayudar a determinar la existencia del riesgo analizado.
Una actualización a la versión 6.4.16 o 6.5.3 elimina esta vulnerabilidad. Aplicando el parche e39ef7880d1057b2ebcdb013405f4d84a257db23/7d63c6f9765339dcfc34b7365ced7c518012e4fe/ec14a87ee1999b19d8b7ed0fa95fea80644624ae 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 las bases de datos Tenable (319348) y CERT Bund (WID-SEC-2025-2941). If you want to get best quality of vulnerability data, you may have to visit VulDB.
Afectado
- Debian Linux
- Amazon Linux 2
- IBM Power Hardware Management Console
- Red Hat Enterprise Linux
- Ubuntu Linux
- SUSE Linux
- Oracle Linux
- Open Source Linux Kernel
- RESF Rocky Linux
- IBM DataPower Gateway
Producto
Escribe
Proveedor
Nombre
Versión
- 6.4.0
- 6.4.1
- 6.4.2
- 6.4.3
- 6.4.4
- 6.4.5
- 6.4.6
- 6.4.7
- 6.4.8
- 6.4.9
- 6.4.10
- 6.4.11
- 6.4.12
- 6.4.13
- 6.4.14
- 6.4.15
- 6.5.0
- 6.5.1
- 6.5.2
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: 4.8VulDB Puntuación meta temporal: 4.6
VulDB Puntuación base: 4.8
VulDB Puntuación temporal: 4.6
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: Denegación de servicioCWE: CWE-476 / CWE-404
CAPEC: 🔒
ATT&CK: 🔒
Físico: No
Local: No
Remoto: En parte
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 |
Nessus ID: 319348
Nessus Nombre: EulerOS Virtualization 2.12.1 : kernel (EulerOS-SA-2026-2077)
Inteligencia de amenazas
Interés: 🔍Actores activos: 🔍
Grupos APT activos: 🔍
Contramedidas
Recomendación: ActualizaciónEstado: 🔍
Hora de 0 días: 🔒
Actualización: Kernel 6.4.16/6.5.3
Parche: e39ef7880d1057b2ebcdb013405f4d84a257db23/7d63c6f9765339dcfc34b7365ced7c518012e4fe/ec14a87ee1999b19d8b7ed0fa95fea80644624ae
Línea de tiempo
2025-12-30 Aviso publicado2025-12-30 CVE asignado
2025-12-30 Entrada de VulDB creada
2026-06-20 Última actualización de VulDB
Fuentes
Proveedor: kernel.orgAviso: git.kernel.org
Estado: Confirmado
CVE: CVE-2023-54271 (🔒)
GCVE (CVE): GCVE-0-2023-54271
GCVE (VulDB): GCVE-100-338986
CERT Bund: WID-SEC-2025-2941 - Linux Kernel: Mehrere Schwachstellen ermöglichen Denial of Service
Artículo
Fecha de creación: 2025-12-30 16:54Actualizado: 2026-06-20 21:55
Cambios: 2025-12-30 16:54 (59), 2025-12-31 11:00 (1), 2026-01-01 15:31 (7), 2026-04-27 07:17 (1), 2026-06-08 01:26 (2), 2026-06-20 21:55 (1)
Completo: 🔍
Cache ID: 216::103
If you want to get best quality of vulnerability data, you may have to visit VulDB.
Sin comentarios aún. Idiomas: es + pt + en.
Por favor, inicie sesión para comentar.