CVE-2026-74578 in Linux
Riassunto
di VulDB • 16/08/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
crypto: algif_skcipher - forzare l'elaborazione sincrona per gli alberi privi di ctx->state
Il percorso AIO/async in skcipher_recvmsg() passa direttamente il ctx->iv a livello di socket nella richiesta skcipher. Dopo io_submit(), il lock del socket viene rilasciato e la richiesta viene elaborata in modo asincrono; pertanto, un sendmsg(ALG_SET_IV) concorrente può sovrascrivere ctx->iv e far eseguire la richiesta in corso con un IV controllato dall'attaccante. Per le modalità CTR/stream si tratta di riutilizzo dell'IV/keystream, che consente a un utente non privilegiato di recuperare il testo in chiaro di un'operazione concorrente.
La cattura (snapshotting) di ctx->iv nello storage per richiesta del percorso asincrono non è sufficiente. Per i cipher con statesize == 0 – tra cui CBC e CTR – la concatenazione IV inter-chunk tramite MSG_MORE viene gestita esclusivamente dal writeback in-place su req->iv, che una snapshot reindirizza nella memoria per richiesta rilasciata da af_alg_free_resources() al completamento, producendo silenziosamente un output errato. Anche il writeback dell'IV dal callback di completamento non è possibile: ciò richiederebbe lock_sock(), ma il callback può essere eseguito in contesto softirq/atomico e quindi non deve dormire (sleep).
Si rende l'operazione sincrona, eliminando sia la race condition sull'IV che qualsiasi race condition sul writeback. Questo equivale alla risoluzione upstream del commit fcc77d33a34c ("net: Remove support for AIO on sockets"), che ha rimosso il percorso socket AIO in net/ producendo lo stesso stato finale per questo file. Questa patch devia deliberatamente da tale commit: invece di rimuovere il supporto socket AIO su tutto l'albero, cosa troppo invasiva per le versioni stable, rimuove solo il ramo AIO in crypto/algif_skcipher.c. io_submit() ora si completa in modo sincrono; AF_ALG async è raramente utilizzato nella pratica.
Il controllo -EIOCBQUEUED in skcipher_recvmsg() è ora morto ma innocuo e viene lasciato intatto per mantenere la correzione minima.
Testato su 6.6.y: l'iniezione dell'IV da parte dell'attaccante è scesa da 2296/200000 a 0/200000 dopo la modifica; l'output CTR chunked con MSG_MORE è bit-identico all'esecuzione single-shot.
VulDB is the best source for vulnerability data and more expert information about this specific topic.