
Traducción al español de los CVE-2022-1015 y 1016 descubiertos y documentados por David.
Este README.md es una traducción del blog de David. David encontró los CVE's 1015 y 1016 en el kernel de Linux. Puedes visitar su página web para leer el documento original.
Aquí te dejo sus redes sociales:
Publicado el 2 de abril del 2022.
Estos problemas deberían ser explotabes en las configuraciones por defecto de la versión más nueva de Ubuntu y de RHEL. Escribí mi prueba de concepto (PoC) del CVE-2022-1015 tomando como objetivo la versión del kernel 5.16-rc3 de Arch Linux.
Este documento está dirigido a las personas que tengan un conocimiento básico del kernel de Linux en términos de funcionalidad y seguridad. Traté de hacer que este documento sea amigable con las personas que carezcan de conocimientos con el stack de redes para hacerlo accesible a todo público.
Aquí está una guía de lectura:
A mediados de febrero, el programa de seguridad de Google anunció que continuarían su programa de recompensas kCTF, ofreciendo recompensas que llegan desde los $31,337 hasta 91,337 dólares por un exploit en el kernel de Linux que pueda escalar privilegios al usuario root desde procesos sin privilegios en un sandbox de nsjail.
Siendo un pobre estudiante, obviamente esto captó mi atención. Esta era mi primera vez buscando buscando una vulnerabilidad del "mundo real", pero en mis aventuras jugando CTF con mi equipo, me he familiarizado con el kernel de Linux en términos de seguridad. Después de horas y horas con muy poco cercano a nada de progreso (pero con mayor conocimiento acerca de Linux) logré encontrar algunas vulnerabilidades en el módulo de nf_tables.
Tristemente, al final del día, me di cuenta de que este módulo no estaba presente en las reglas del kCTF de Google (por lo que no conseguí ninguna recompensa por estas dos vulnerabilidades). Pero obviamente, aún y así las reporté y escribí un exploit LPE (Escalado de Privilegios Local) para el CVE-2022-1015.
Bien, así que has decidido que vas a encontrar algunas vulnerabilidades en Linux. ¿Ahora qué? Linux es un proyecto gigantezco, y es bastante fácil no poder ver el bosque por los árboles (te enfocas tanto en los detalles que pierdes visión de lo que es realmente importante, no tienes una vista general de la situación). Para empeorar las cosas, muchas partes no está documentadas y necesitas leer un montón de código para poder entender lo que está pasando.
Yo comencé intentando tener una perspectiva detallada del modelo de seguridad de Linux. Encontrar un bug es una cosa; pero encontrar un buen bug es otra muy distinta. Después de todo, no todos los bugs están creados igual:
FS_USERNS_MOUNT, en cuyo caso puedes montarlos en el user namespace.CAP_SYS_ADMIN o CAP_NET_ADMIN.
/proc/config.gz. Los módulos pueden ser cargados en (=m) o compilados por separado y cargados en tiempo de ejecución (=y)./proc/modules y /proc/kallsyms, pero siempre son confiables, ya que los módulos pueden ser cargados dinámicamente en el kernel (p. ej. request_module).Estas restricciones nos ayudan a saber los límites de los sistemas de archivos en los cuáles podemos buscar vulnerabilidades. Creo que es una buena idea tomarte tu tiempo tratando de planear tu ataque al objetivo que desees.
Ya he aprendido mi lección acerca del punto anterior. Como mencioné, el módulo nf_tables no estaba cargado en la instancia que nos presentó kCTF. Pude haberme dado cuenta de esto desde un principio y ahorrarme la decepción :p. Por otra parte, probablemente no estarías leyendo este blog ahora mismo si me hubiese dado cuenta antes, supongo que las cosas salieron bien después de todo.
Una explicación por la cuál el COS, Google's container-optimazed Linux fork, no tuviera nf_tables puede ser encontrada aquí y aquí.
Después de evaluar los puntos anteriormente mencionados, decidí que mi mejor ruta para comenzar probablemente sería mirar el código fuente de la red. Muchas de las funcionalidades interesantes allí necesitan CAP_NET_ADMIN, pero como lo mencioné, esto en realidad no es un problema. Por el contrario, sospecho que los componentes que requieren capacidades especiales son por lo general menos seguros, ya que los desarrolladores del kernel pueden tener una falsa sensación de seguridad.