Vulnerabilidad CVE-2022-42889
Vulnerabilidad CVE-2022-42889
Publicado: 05/12/2025
Escrito por: Nadine Rozell
¿Qué es la vulnerabilidad CVE-2022-42889?
CVE-2022-42889, conocida ampliamente como "Text4Shell", es una vulnerabilidad crítica de ejecución remota de código (RCE) encontrada en la popular biblioteca Apache Commons Text. Si eso suena alarmantemente familiar, es porque comparte un aire similar con la infame vulnerabilidad Log4Shell. Apache Commons Text es una biblioteca de Java usada, como ya imaginarás, para trabajar con texto. La vulnerabilidad surge de cómo la biblioteca maneja la interpolación de variables, que es una forma elegante de decir que procesa cadenas que pueden extraer y expandir dinámicamente otros valores.
El problema es que algunas de las "búsquedas" predeterminadas (los mecanismos que encuentran y reemplazan estas variables) podían ser engañadas para ejecutar código o comunicarse con servidores remotos. Si una aplicación usa esta biblioteca para procesar cualquier tipo de entrada proporcionada por el usuario sin limpiarla antes, un atacante podría colar un payload malicioso y potencialmente tomar el control de todo. Es como dejar una puerta trasera abierta que permite a cualquiera con la llave correcta ejecutar comandos en tu servidor.
¿Cuándo se descubrió?
La vulnerabilidad se reveló públicamente el 13 de octubre de 2022. La noticia puso de inmediato en alerta al mundo de la seguridad, con muchos temiendo un colapso al estilo Log4Shell. Si bien Text4Shell es una falla seria, su impacto real resultó ser menos extendido. ¿Por qué? Porque las funciones vulnerables de Apache Commons Text no se usan con tanta frecuencia como las de Log4j. Aun así, para cualquier aplicación que esté usando los componentes vulnerables de la biblioteca, el riesgo es grave.
Productos y versiones afectados
El problema principal reside en la biblioteca Apache Commons Text, pero su impacto se extiende a cualquier software que incluya estas versiones vulnerables. Esto abarca una amplia gama de aplicaciones y servicios basados en Java.
Producto / Biblioteca | Versiones afectadas | Versiones corregidas / enlaces de parches |
Apache Commons Text | 1.5 a 1.9 | Versión 1.10.0 y posteriores. Descargas de Apache Commons Text |
Diversas aplicaciones Java | Cualquier aplicación que use las versiones afectadas de la biblioteca. | Actualiza la biblioteca Apache Commons Text incluida a la versión 1.10.0 o posterior. |
Productos Red Hat | Varios productos se vieron afectados. | |
Productos NetApp | Ciertos servicios de NetApp. |
Descripción técnica de la CVE-2022-42889
Entremos en los detalles técnicos. La vulnerabilidad existe en la clase StringSubstitutor de Apache Commons Text. Esta clase está diseñada para encontrar marcadores de posición en una cadena, como ${prefix:name}, y reemplazarlos con un valor. El prefix le indica al StringSubstitutor qué método de búsqueda usar.
El problema comenzó con tres búsquedas predeterminadas específicas disponibles en las versiones 1.5 a 1.9:
script: esta búsqueda podía ejecutar expresiones usando el motor de ejecución de scripts de la JVM.
dns: esta podía resolver registros DNS.
url: esta podía obtener contenido de URLs, incluyendo servidores remotos.
Un atacante podría crear una cadena maliciosa como ${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/pwned')}. Si una aplicación pasa esta cadena al StringSubstitutor para su procesamiento, la biblioteca ejecutaría obedientemente el código JavaScript, que a su vez ejecuta un comando del sistema. Fin del juego. La aplicación quedó comprometida porque confió en una entrada sin depurar.
Tácticas, técnicas y procedimientos (TTPs)
Los atacantes que buscan explotar Text4Shell suelen seguir una ruta clara. La técnica principal es una forma de inyección de plantillas del lado del servidor (SSTI). Un atacante identifica un campo de entrada en una aplicación web que pasa datos a la librería vulnerable.
Los TTPs comunes incluyen:
Inyección de payload: Elaborar una cadena maliciosa con los prefijos script, dns, o url e inyectarla en encabezados HTTP, campos de formulario o parámetros de URL.
Ejecución remota de código: Usar el prefijo script para ejecutar comandos, lo que podría establecer una shell inversa, descargar malware o empezar a exfiltrar datos.
Recolección de información: Aprovechar los prefijos dns y url para forzar al servidor a hacer solicitudes salientes a un dominio controlado por el atacante. Esto puede confirmar la vulnerabilidad y filtrar detalles del entorno interno.
Indicadores de compromiso
Detectar un ataque de Text4Shell implica buscar patrones específicos y comportamiento anómalo. Ten cuidado con estos IoCs:
Cadenas sospechosas como ${script:...}, ${dns:...}, o ${url:...} en los registros de la aplicación y del servidor web.
Consultas DNS salientes o solicitudes HTTP de tus servidores de aplicaciones hacia dominios inusuales o desconocidos.
La ejecución de procesos inesperados, especialmente shells (sh, bash, powershell) generados por tu proceso de aplicación Java.
Creación de archivos extraños en directorios temporales como /tmp/ o C:\Windows\Temp\.
Pruebas de concepto y exploits conocidos
Poco después de su divulgación, surgieron varias PoC para CVE-2022-42889. Los investigadores de seguridad demostraron rápidamente cómo una sola cadena maliciosa enviada a una aplicación vulnerable podía llevar a RCE. Por ejemplo, un simple comando curl dirigido al parámetro de búsqueda de una aplicación web podía ser suficiente:
curl http://vulnerable-app.com/search?query=$\{script:javascript:java.lang.Runtime.getRuntime().exec('id')}
Si el servidor responde con la salida del comando id, es vulnerable. Se liberaron exploits públicos y escáneres, y aunque la fiebre de explotación no fue tan caótica como con Log4Shell, los atacantes definitivamente agregaron Text4Shell a sus kits de escaneo automatizado.
Cómo detectar la vulnerabilidad CVE-2022-42889
Primero, identifica si tus aplicaciones usan la librería Apache Commons Text y qué versión. Puedes usar una herramienta de análisis de composición de software (SCA) para escanear tu código base y sus dependencias.
Si no tienes una herramienta SCA, deberás revisar manualmente las dependencias de tu proyecto (por ejemplo, pom.xml para Maven o build.gradle para Gradle) en busca de org.apache.commons:commons-text y revisar su versión. Cualquier versión de la 1.5 a la 1.9 es vulnerable. Los escáneres de vulnerabilidades también pueden ayudar a identificar la falla en sistemas en ejecución.
Impacto y riesgo de la vulnerabilidad CVE-2022-42889
Con una puntuación CVSS de 9.8 (crítica), el impacto potencial es severo. Un exploit exitoso le da al atacante RCE, lo que equivale esencialmente a un compromiso total del sistema. A partir de ahí, puede hacer lo que los permisos del usuario de la aplicación permitan, incluyendo robar datos sensibles, desplegar ransomware o moverse a otros sistemas de tu red.
La principal salvedad es que explotar Text4Shell no es tan trivial como Log4Shell. La aplicación debe estar usando específicamente los métodos vulnerables de StringSubstitutor sobre entradas no confiables. Pero para aquellas que lo hacen, el riesgo es tan alto como puede serlo. No te duermas en esto. ✔️
Estrategias de mitigación y remediación
Proteger tus sistemas de Text4Shell se reduce a unas pocas acciones clave. Sin excusas: hazlas.
Actualiza Apache Commons Text: Este es el paso más importante. Actualiza la librería a la versión 1.10.0 o posterior. Esta versión desactiva por defecto las peligrosas búsquedas de script, dns y url.
Sanitiza toda la entrada del usuario: Nunca, jamás, confíes en la entrada del usuario. Implementa una validación y sanitización estricta de entrada en cualquier dato que pueda ser procesado por tu aplicación. Esta es una práctica de seguridad fundamental que habría evitado este problema desde el principio.
Usa un WAF: Un firewall de aplicaciones web puede configurarse con reglas para detectar y bloquear payloads maliciosos que contengan patrones de Text4Shell antes de que lleguen a tu aplicación.
Monitorea el tráfico saliente: Restringe y monitorea las conexiones de red salientes de tus servidores de aplicaciones. Esto puede evitar que los payloads se comuniquen con su origen y puede alertarte sobre un posible compromiso si se intenta una conexión inesperada.
Preguntas frecuentes sobre CVE-2022-42889