Vulnerabilidad de uso después de libre en el kernel de Linux explotable por un atacante local debido a la reutilización de un socket DCCP con un objeto dccps_hc_tx_ccid adjunto como oyente después de ser liberado
Corregido en el kernel de Ubuntu Linux 5.4.0-51.56, 5.3.0-68.63, 4.15.0-121.123, 4.4.0-193.224, 3.13.0.182.191 y 3.2.0-149.196.
El problema es cuando el objeto calcetín se clona mediante dccp_create_ openreq_ child (), le da todos sus atributos al objeto calcetín secundario y no se toma ningún contador de referencia para el objeto dccps_hc_tx_ccid.
Si uno de los objetos de calcetín (el padre o el niño) se cierra o se desconecta, libera los objetos de destino dccps_hc_tx_ccid y nos proporciona un puntero deslumbrante en el otro objeto de calcetín.
Esto provoca un doble libre explotable para un objeto que contiene punteros de función.
Podemos liberar dccps_hc_tx_ccid llamando a connect ( AF_UNSPEC) , luego rociar el montón con otras asignaciones, luego llamar a close (), potencialmente tendremos un control RIP.
Este fragmento de código es el responsable de liberar dccps_hc_tx_ccid, si se vuelve a llamar, llamará a ccid_hc_tx_exit () de un objeto liberado
void ccid_hc_ tx_delete ( struct ccid * ccid, struct sock * sk)
{
if (ccid! = NULL) {
if (ccid-> ccid_ops- > ccid_hc_ tx_exit! = NULL)
ccid- > ccid_ops- > ccid_hc_ tx_exit ( sk); // <- Llamar a un puntero de función
kmem_ cache_free ( ccid-> ccid_ ops-> ccid_ hc_tx_slab, ccid);
}
}
Referencias:
https://launchpad.net/bugs/1883840
https://lore.kernel.org/netdev/20201013171849.236025-1-kleber.souza@canonical.com/T/
https://github.com/Mesh3l911/Disource
Gracias por visitar este sitio, espero que te haya gustado y vuelvas proximamente, compartela en las redes sociales, gracias
Fecha actualización el 2021-01-15. Fecha publicación el 2021-01-15. Categoría: vulnerabilidad Autor: Oscar olg Mapa del sitio Fuente: NIST