GameOver(lay), dos vulnerabilidades que permiten escalar privilegios en Ubuntu
Hace poco investigadores de Wiz Research dieron a conocer información sobre el descubrimiento de dos vulnerabilidades en los paquetes del kernel de Linux suministrados por Ubuntu causadas por parches específicos de Ubuntu en la implementación del módulo OverlayFS.
Sobre las vulnerabilidades descubiertas y nombradas como «GameOver(lay)» (y catalogadas bajo CVE-2023-2640 y CVE-2023-32629) se menciona que estas permiten elevar privilegios en el sistema y, según los investigadores que identificaron los problemas, pueden explotarse en aproximadamente el 40 % de las instalaciones de Ubuntu.
CVE-2023-2640 y CVE-2023-32629 se encontraron en el módulo OverlayFS en Ubuntu, que es un sistema de archivos de Linux ampliamente utilizado que se hizo muy popular con el auge de los contenedores, ya que sus funciones permiten la implementación de sistemas de archivos dinámicos basados en sistemas preconstruidos.
Sobre la primer vulnerabilidad (CVE-2023-2640) se menciona que es causada por un cambio específico de Ubuntu agregado al módulo OverlayFS en 2018 que implementa funciones para establecer y eliminar atributos de archivos extendidos individuales sin verificar los permisos. Dado que la ejecución de esta función requiere un bloqueo de inodo preliminar, se asumió que la persona que llama a la función ya tenía los privilegios necesarios para el trabajo de bajo nivel con el sistema de archivos.
Inicialmente, este cambio solo se aplicaba a los atributos de las llamadas y era inofensivo. Pero en 2022, se agregó un parche a la implementación principal de OverlayFS en el kernel de Linux que entró en conflicto con las correcciones específicas de Ubuntu, después de lo cual se desactivó la verificación para todos los atributos extendidos. A través de la manipulación de los espacios de nombres de usuario, un usuario sin privilegios podría montar OverlayFS y establecer atributos extendidos en archivos en el sistema de archivos montado, haciendo que esos atributos se transfieran a archivos en la capa superior de OverlayFS.
Las dos vulnerabilidades son exclusivas de Ubuntu porque Ubuntu introdujo varios cambios en el módulo OverlayFS en 2018. Estas modificaciones no representaban ningún riesgo en ese momento. En 2020, se descubrió y parchó una vulnerabilidad de seguridad en el kernel de Linux; sin embargo, debido a las modificaciones de Ubuntu, nunca se solucionó un flujo vulnerable adicional en Ubuntu. Esto muestra la compleja relación entre el kernel de Linux y las versiones de distribución, cuando ambos actualizan el kernel para diferentes casos de uso.
La segunda vulnerabilidad CVE-2023-32629 también se debe a la falta de verificaciones de permisos adecuadas. Ya que se menciona como en el caso de la primera vulnerabilidad, el parche creado originalmente para Ubuntu no condujo a la vulnerabilidad y el problema apareció solo después de un cambio en la implementación principal de OverlayFS realizado en 2019.
Y es que al montar OverlayFS con metacopy=on, Linux no copia el archivo completo si solo han cambiado los metadatos del archivo. En su lugar, copia solo los metadatos, que incluyen capacidades de archivo, lo que permite poder colocar un ejecutable preparado y completamente funcional fuera del espacio de usuario.
Cabe mencionar que se afirma que para explotar las vulnerabilidades identificadas, se pueden utilizar explotaciones de trabajo ya disponibles en el dominio público, creadas para la vulnerabilidad anterior en el módulo OverlayFS. Para llevar a cabo un ataque, es necesario que un usuario sin privilegios permita que el sistema monte particiones OverlayFS.
Sobre las correcciones de las vulnerabilidades, se menciona que estas ya fueron implementas poco antes de la divulgación de estas. Las vulnerabilidades afectan a las diferentes versiones de Ubuntu con soporte y se corrigen en las actualizaciones lanzadas el 26 de julio.
En cuanto a una solución alternativa para bloquear vulnerabilidades, se menciona que basta con deshabilitar la capacidad de los usuarios sin privilegios para crear espacios de nombres de ID de usuario. Esto lo puedes hacer ejecutando los siguientes comandos:
sudo sysctl -w kernel.unprivileged_userns_clone=0 echo kernel.unprivileged_userns_clone=0 | \ sudo tee /etc/sysctl.d/99-disable-unpriv-userns.conf
Finalmente si estás interesado en poder conocer más al respecto, te invito a que visites el articulo original publicado por Wiz Research, visitando su blog en el siguiente enlace.