Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
text4shell-tools — Detecta y corrige Apache Commons Text vulnerable en artefactos JAR/WAR de Java; identifica clases y analiza el bytecode para encontrar sitios de llamada de CVE-2022-42889 (Text4Shell). | Kitploit
Herramientas/GitHubGitHub/jfrog/text4shell-tools
Herramientas DefensivasAnálisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoAnálisis de BinariosSeguridad de Cadena de Suministro
GitHubjfrog/text4shell-tools

text4shell-tools

Detecta y corrige Apache Commons Text vulnerable en artefactos JAR/WAR de Java; identifica clases y analiza el bytecode para encontrar sitios de llamada de CVE-2022-42889 (Text4Shell).

Ver Repositorio
104205hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

commons-text-tools

Enlaces rápidos

Haz clic para encontrar:

  • Busca archivos .jar de commons-text y sus versiones

  • Llamadas a funciones vulnerables de commons-text

  • Parche en caliente en archivos .jar de commons-text para deshabilitar los comportamientos vulnerables

  • Ejemplo de escaneo y parcheo

Resumen

CVE-2022-42889 puede representar una amenaza grave para una amplia gama de aplicaciones basadas en Java. Las preguntas importantes que un desarrollador puede plantearse en este contexto son:

1. ¿Mi código incluye ? ¿Qué versiones?

commons-text

¿El código publicado incluye commons-text? ¿Qué versión de la librería está incluida? Responder a estas preguntas puede no ser inmediato debido a dos factores:

  1. Dependencias transitivas: aunque commons-text puede no estar en la lista de dependencias directas del proyecto, puede ser utilizado indirectamente por alguna otra dependencia.

  2. El código de esta librería puede no aparecer directamente como un archivo separado, sino estar empaquetado en algún otro archivo jar de código.

JFrog está publicando una herramienta para ayudar a resolver este problema: scan_commons_text_versions. La herramienta busca el código de clase de StringLookupFactory (independientemente de los nombres de los archivos .jar y del contenido de los archivos pom.xml), e intenta identificar las versiones de los objetos para informar si la versión incluida de commons-text es vulnerable.

2. ¿Mi código utiliza funciones vulnerables de commons-text?

La pregunta es relevante en los casos en los que el desarrollador quiera verificar si las llamadas a commons-text en la base de código pueden pasar datos potencialmente controlados por un atacante. Si bien la forma más segura de corregir la vulnerabilidad, como se analiza en los avisos de seguridad, es aplicar los parches adecuados, controlar y verificar el impacto potencial bajo el supuesto de un commons-text sin parchear puede ser valioso en muchas situaciones.

scan_commons_text_calls_jar.py, que localiza las llamadas a las funciones vulnerables en archivos .jar compilados e informa de los hallazgos como nombre de clase y nombres de método en los que aparece cada llamada.

3. Tengo archivos jar commons-text vulnerables en mi sistema, ¿cómo puedo deshabilitar rápidamente el comportamiento peligroso?

  • Actualizar sigue siendo la mejor solución: esta solución está pensada para un parcheo en caliente rápido.

  • En el contexto de la vulnerabilidad CVE-2022-42889, la clase org/apache/commons/text/lookup/ScriptStringLookup en commons-text permite la ejecución de scripts que pueden estar incrustados en una cadena recibida de una fuente controlada por un atacante a través de ${script}. Por lo tanto, las invocaciones de la función ScriptStringLookup.lookup indican que la funcionalidad está activada.

  • Proporcionamos una herramienta, Text4ShellPatch, que permite parchear esta llamada específica para que la funcionalidad de ejecución de scripts no pueda utilizarse. Después de aplicar el parche, la librería siempre ejecutará un script que devuelve un mensaje de advertencia (en lugar del código potencialmente controlado por un atacante).

  • De manera similar, las búsquedas DNS y URL pueden cargar contenido no confiable si son controladas por un atacante a través de ${dns} y ${url}; por lo tanto, sus respectivas búsquedas DnsStringLookup y UrlStringLookup pueden deshabilitarse mediante un parche para que devuelvan un mensaje de advertencia,

  • El parche se puede aplicar a un archivo jar específico, solo para la búsqueda script o para script, dns y url para una mejor protección en caso de que no esté destinado a usarse en la aplicación,

  • Se genera una copia de seguridad en la misma ubicación que el jar original antes de que sea reemplazado por el parche. El nombre del archivo de copia de seguridad sigue el siguiente patrón: <original_jar_name>_YYYY.MM.DD_HH.mm.ss.orig.jar donde YYYY, MM, DD son respectivamente el año, el mes y el día, y HH, mm, ss son respectivamente la hora, los minutos y los segundos.

  • También es posible localizar versiones vulnerables de commons-text y parchearlas automáticamente, como se responde en la siguiente pregunta.

4. ¿Puedo automatizar el escaneo y parcheo de archivos jar commons-text vulnerables?

Dos de nuestras herramientas ofrecen conjuntamente la capacidad de escanear y parchear los archivos jar commons-text vulnerables.

En este repositorio de GitHub hay un script bash de ejemplo con el nombre scan_and_patch.sh. Básicamente, utiliza el script scan_commons_text_versions.py para encontrar, bajo una root-folder específica, los archivos jar commons-text vulnerables con una versión vulnerable y ejecutar la herramienta Text4ShellPatch contra ellos de la siguiente manera.

Ejemplo de automatización


scan_commons_text_versions.py

Uso
root@kitploit:~
python scan_commons_text_versions.py root-folder [-quiet] [-exclude folder1 folder2 ..]

La herramienta escaneará root_folder recursivamente en busca de archivos .jar y .war; en cada archivo localizado, la herramienta busca una StringLookupFactory.class (recursivamente en cada archivo .jar). Si se encuentra al menos una de las clases, la herramienta intenta identificar su versión (incluyendo algunas variaciones encontradas en parches y parches retroportados) para informar si el código es vulnerable.

Con la opción -quiet, solo se imprimen las conclusiones sobre la versión, y los demás mensajes (archivos no encontrados, archivos que no pudieron abrirse, archivos protegidos por contraseña) se silencian.

Las carpetas que aparecen después de -exclude (opcional) se omiten.


scan_commons_text_calls_jar.py

La herramienta requiere Python 3 y las siguientes librerías de terceros: jawa, tqdm, easyargs, colorama

Instalación de dependencias
root@kitploit:~
pip install -r requirements.txt
Uso

El caso de uso predeterminado:

root@kitploit:~
python scan_commons_text_calls_jar.py root-folder

escaneará recursivamente todos los archivos .jar en root-folder y, para cada uno, imprimirá las ubicaciones (nombre de clase y nombre de método) de las llamadas a los métodos lookup/replace/replaceIn de StringSubstitutor/StringLookup.

La herramienta puede configurarse para casos de uso adicionales mediante los siguientes parámetros de línea de comandos.

ParámetroValor predeterminadoUso
--class_regex(.*StringSubstitutor|.*StringLookup)Expresión regular para el nombre de clase requerido
--method_regex(lookup|replace|replaceIn)Expresión regular para el nombre de método requerido
--quickmatch_string(StringLookup|StringSubstitutor)Precondición para el análisis de archivos: los archivos .jar que no contengan la expresión regular especificada serán ignorados
--class_existenceNo establecidoCuando no está establecido, busca llamadas a class::method según lo especificado por las expresiones regulares. Cuando está establecido, --method_regex se ignora y la herramienta buscará la existencia de las clases especificadas por --class_regex en el jar.
--no_quickmatchNo establecidoCuando está establecido, el valor de --quickmatch_string se ignora y se analizan todos los archivos jar
--caller_block.*org/apache/commons/textSi la clase que llama coincide con esta expresión regular, no se mostrará

text_4_shell_patch

Uso
root@kitploit:~
java -jar Text4ShellPatch.jar TARGET_JAR [PATCHING_MODE]
  Where TARGET_JAR is the application to patch and PATCHING_MODE is
    0 (default): Patch Script lookup
    1:           Patch Script + DNS + URL lookups
  [Note: The original Jar will be kept in the same folder with the .orig.jar extension]  

La herramienta buscará la clase org/apache/commons/text/lookup/ScriptStringLookup en el jar commons-text proporcionado y reemplazará el contenido de la función lookup() por un mensaje de advertencia y retornará de la función. Por lo tanto, el eval no existirá en la nueva clase ScriptStringLookup.

También puede parchear las clases DnsStringLookup y URLStringLookup y deshabilitar la función lookup() cuando la opción PATCHING_MODE se establece en 1.

Durante el proceso se genera un archivo de copia de seguridad en la misma ruta con la extensión .orig.jar.

Generación desde el código fuente

Text4ShellPatch puede editarse y compilarse con Maven con el simple comando: mvn clean assembly:single. Se creará un archivo Text4ShellPatch.jar en la carpeta target/.

Descargar herramienta