Análisis de CVE-2022-42889: la vulnerabilidad de ejecución arbitraria de código en Apache Commons Text
18 de octubre de 2022
0 minutos de lecturaAntes que nada, dejemos claro que NO se trata de una nueva vulnerabilidad Log4Shell ni Spring4Shell. Aunque es un problema de ejecución remota de código, su impacto no es tan grave ni es tan fácil de explotar como el problema de Log4j de diciembre de 2021.
Al igual que en el problema de Log4j, el origen del problema es que se puede realizar una búsqueda que luego alguien puede aprovechar indebidamente. Sin embargo, la vulnerabilidad Log4Shell era muy fácil de explotar, y no necesariamente es el caso esta vez. En realidad, este problema es muy similar a CVE-2022-33980, sobre la que escribimos un artículo a principios de este año.
Explicación de los problemas de seguridad de Apache Commons Text
En la biblioteca Apache Commons Text, puedes interpolar variables. Esto te permite cargar propiedades que se pueden evaluar dinámicamente.
El problema está en StringLookup, que realiza las búsquedas. Estas búsquedas son expresiones que pueden resolver registros DNS, cargar valores desde URL y ejecutar scripts mediante un motor de ejecución de scripts de JVM. Estas URL y estos scripts pueden provenir de fuentes remotas y provocar ejecuciones remotas de código si se usan valores que no son de confianza. Este problema se reporta como una vulnerabilidad de gravedad alta en CVE-2022-42889 y afecta a las versiones 1.5.x a 1.9.x.
Ejemplos de CVE-2022-42889
A continuación, puedes ver dos ejemplos de este tipo de scripts que usan el motor Nashorn o JavaScript. Usar directamente interpolatorStringLookup o hacerlo mediante StringSubstitutor (que probablemente sea más común) produce el mismo resultado.

Ten en cuenta que el motor de scripting Nashorn ya no está disponible de forma predeterminada en Java 15 y versiones posteriores. Por lo tanto, estos scripts solo se ejecutarán si proporcionas un motor de scripting. Sin embargo, como muchas empresas aún dependen de versiones anteriores, como Java 8, esto puede ser un problema grave. Si usas la versión LTS más reciente, Java 17, no se ejecutará ninguno de los scripts de JavaScript ni de Nashorn, ya que no hay ningún motor disponible de forma predeterminada.
Cómo corregir CVE-2022-42889
Quiero enfatizar una vez más que esto no es otro Log4Shell. Es probable que no uses StringLookup directamente, pero no sabes si alguna de tus bibliotecas transitivas lo usa. La forma más sencilla de resolver este problema es actualizar a la versión 1.10 de commons-text (o una posterior), que desactiva de forma predeterminada los prefijos URL, DNS y script, lo que hace imposible la ejecución arbitraria de código por esta vía.
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 1.10 y ejecuta snyk monitor en la CLI para seguir supervisando tu entorno de producción.
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.