Se han revelado múltiples fallas de seguridad críticas en el sistema de ejecución de código en línea de código abierto Judge0 que podrían explotarse para obtener la ejecución del código en el sistema de destino.
Las tres fallas, todas de naturaleza crítica, permiten que un «adversario con suficiente acceso pueda realizar un escape de la zona de pruebas y obtener permisos de root en la máquina host», dijo en un informe la firma australiana de ciberseguridad Tanto Security.informe publicado hoy.
Judge0 (pronunciado «juez cero») es descrito por sus mantenedores como un «sistema de ejecución de código en línea robusto, escalable y de código abierto» que se puede utilizar para crear aplicaciones que requieren funciones de ejecución de código en línea, como evaluación de candidatos, aprendizaje electrónico y editores de código en línea e IDE.
Según su sitio web, el servicio es utilizado por 23 clientes como AlgoDaily, CodeChum y PYnative, entre otros. El proyecto ha sido bifurcado 412 veces en GitHub hasta la fecha.
Las fallas, descubiertas y reportadas por Daniel Cooper en marzo de 2024, se enumeran a continuación:
- CVE-2024-28185 (Puntuación CVSS: 10.0): la aplicación no tiene en cuenta los enlaces simbólicos colocados dentro del directorio del entorno sandbox, que un atacante puede aprovechar para escribir en archivos arbitrarios y obtener la ejecución de código fuera del entorno sandbox.
- CVE-2024-28189 (Puntuación CVSS: 10.0) – Un bypass de parche para CVE-2024-28185 que surge del uso de UNIX comando chown en un archivo que no es de confianza dentro del entorno limitado. Un atacante puede abusar de esto creando un enlace simbólico (enlace simbólico) a un archivo fuera del entorno sandbox, lo que le permite ejecutar chown en archivos arbitrarios fuera del entorno sandbox.
- CVE-2024-29021 (Puntuación CVSS: 9,1) – La configuración predeterminada de Judge0 deja al servicio vulnerable a un escape de la zona de pruebas a través de la falsificación de solicitudes del lado del servidor (SSRF). Esto permite a un atacante con suficiente acceso a la API Judge0 obtener la ejecución de código sin espacio aislado como root en la máquina de destino.
El problema tiene su origen en un script Ruby llamado «aislar_trabajo.rb,» que es responsable de configurar la zona de pruebas, así como de ejecutar el código y almacenar los resultados de la ejecución.
Específicamente, implica crear un enlace simbólico en el directorio antes de configurar un script bash para ejecutar el programa según el lenguaje de envío, de modo que permita escribir en un archivo arbitrario en el sistema sin espacio aislado.
Un actor de amenazas podría aprovechar esta falla para sobrescribir scripts en el sistema y obtener la ejecución del código fuera del entorno limitado y en el contenedor Docker que ejecuta el trabajo de envío.
Es más, el atacante podría escalar sus privilegios fuera del contenedor Docker debido a que se ejecuta utilizando el bandera privilegiada como se especifica en docker-compose.yml.
«Esto permitirá al atacante montar el sistema de archivos host de Linux y luego podrá escribir archivos (por ejemplo, un trabajo cron malicioso) para obtener acceso al sistema», dijo Herman Došilović de Judge0.
«A partir de este punto, el atacante tendrá acceso completo al sistema Judge0, incluida la base de datos, las redes internas, el servidor web Judge0 y cualquier otra aplicación que se ejecute en el host Linux».
CVE-2024-29021, por otro lado, tiene que ver con una configuración que permite comunicarse con la base de datos PostgreSQL de Judge0 disponible dentro de la red interna de Docker, permitiendo así al adversario convertir la SSRF en un arma para conectarse a la base de datos y cambiar el tipo de datos relevantes. columnas y, en última instancia, obtener inyección de comando.
Tras una divulgación responsable, las deficiencias se han abordado en versión 1.13.1 lanzado el 18 de abril de 2024. Se recomienda a los usuarios de Judge0 que actualicen a la última versión para mitigar posibles amenazas.