CVE-2026-74578 in Linux
Resumen
por VulDB • 2026-08-16
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
crypto: algif_skcipher - forzar el procesamiento síncrono en árboles sin ctx->state
La ruta AIO/async en skcipher_recvmsg() pasa directamente el ctx->iv a nivel de socket dentro de la solicitud de skcipher. Tras io_submit(), se libera el bloqueo del socket y la solicitud se procesa asíncronamente, por lo que un sendmsg(ALG_SET_IV) concurrente puede sobrescribir ctx->iv y hacer que la solicitud en curso se ejecute con un IV controlado por el atacante. Para los modos CTR/stream, esto supone una reutilización de IV/keystream y permite a un usuario no privilegiado recuperar el texto plano de una operación concurrente.
Capturar (snapshot) ctx->iv en almacenamiento específico para cada solicitud para la ruta asíncrona no es suficiente. Para cifrados con statesize == 0, lo que incluye cbc y ctr, el encadenamiento IV inter-chunk mediante MSG_MORE se lleva a cabo únicamente mediante la escritura inversa in-place de req->iv, que una captura redirige hacia memoria específica para cada solicitud, la cual af_alg_free_resources() libera al finalizar, produciendo silenciosamente un resultado incorrecto. Tampoco es posible escribir el IV de vuelta desde la callback de finalización: eso requeriría lock_sock() allí, pero la callback puede ejecutarse en contexto softirq/atomic, por lo que no debe bloquearse (sleep).
Se realiza la operación de forma síncrona, eliminando tanto la carrera del IV como cualquier carrera de escritura inversa. Esto es equivalente a la resolución upstream, commit fcc77d33a34c ("net: Remove support for AIO on sockets"), que eliminó la ruta de socket AIO en net/ por completo y, por lo tanto, produce el mismo estado final para este archivo. Este parche se desvía deliberadamente de ese commit: en lugar de eliminar el soporte de socket AIO en todo el árbol (lo cual sería demasiado invasivo para stable), elimina únicamente la rama AIO en crypto/algif_skcipher.c. io_submit() ahora completa de forma síncrona; AF_ALG async se utiliza rara vez en la práctica.
La comprobación -EIOCBQUEUED en skcipher_recvmsg() está ahora muerta pero es inofensiva, y se deja intacta para mantener el parche mínimo.
Probado en 6.6.y: la inyección de IV por parte del atacante disminuyó de 2296/200000 a 0/200000 tras el cambio; la salida CTR fragmentada con MSG_MORE es bit-identica a la ejecución única (single-shot).
If you want to get best quality of vulnerability data, you may have to visit VulDB.