[Actualización 23/12/2021] Log4Shell: vulnerabilidad 0day de ejecución remota de código en Apache Log4j
Están afectados todos los productos que utilizan la librería Log4j2 mantenida por Apache Software Foundation, desde la versión 2.0-beta9 hasta la versión 2.14.1. Esta librería es utilizada en muchos productos, tanto comerciales como en desarrollos propios basados en Java.
Entre los fabricantes que integran esta librería en sus productos, o lo están evaluando, destacan:
- Apache Solr, puede consultar la lista de productos afectados en su página web;
- Apache Struts, puede consultar la lista de productos afectados en su página web;
- Atlassian, puede consultar la lista de productos afectados en su página web;
- BMC, puede consultar la lista de productos afectados en su página web;
- Cisco, puede consultar la lista de productos afectados en su página web;
- Citrix, puede consultar la lista de productos afectados en su página web;
- Debian, puede consultar la lista de productos afectados en su página web;
- Docker, puede consultar la lista de productos afectados en su página web;
- F-Secure, puede consultar la lista de productos afectados en su página web;
- Fortinet, puede consultar la lista de productos afectados en su página web;
- RedHat, puede consultar la lista de productos afectados en su página web;
- Solarwinds, puede consultar la lista de productos afectados en su página web;
- VMware, puede consultar la lista de productos afectados en su página web.
El investigador SwitHak mantiene una lista con otros productos afectados.
Desde el National Cyber Security Centrum (NCSC-NL) neerlandés también han publicado un listado de software afectado, incluyendo información de proveedores, productos, versiones y enlaces.
[Actualización 15/12/2021] Además de los productos comerciales afectados, es muy importante detectar y solucionar esta vulnerabilidad en productos no comerciales o desarrollos ad-hoc que utilizan e integran esta librería, y por lo tanto están afectados por esta vulnerabilidad.
Para esto el National Cyber Security Centrum (NCSC-NL) mantiene una lista de aplicaciones basadas en software libre para escaneo y detección.
Así mismo otros investigadores han publicado listados con herramientas tanto de software libre como comerciales para la detección de aplicaciones potencialmente vulnerables. Los principales fabricantes de herramientas de detección y gestión de vulnerabilidades incorporan ya en sus productos capacidades para localizar productos afectados.
Es importante configurar correctamente estos análisis para evitar fugas de información a través de recursos externos (LDAP, DNS, etc.) y realizar los análisis de manera autenticada, ya que no todas las aplicaciones responden igual y pueden darse falsos negativos.
Este tipo de análisis debe efectuarse no solo sobre el inventario de activos expuestos a Internet de la organización, sino sobre toda la organización al completo, ya que los activos no expuestos pueden utilizarse en ataques como movientes laterales o pueden existir productos no inventariados o shadow IT que también se utilicen en ataques que aprovechen esta vulnerabilidad.
[Actualización 16/12/2021] Se ha detectado que la vulnerabilidad también afecta a la versión 1.x de Log4j, con severidad media, y que lleva asociada el identificador CVE-2021-4104, en configuraciones que no son por defecto, concretamente JMSAppender es vulnerable a una ejecución remota de código en el servidor.
[Actualización 20/12/2021] Se ha detectado una vulnerabilidad de denegación de servicio (DoS), de severidad alta, que afecta a las versiones 2.0-alpha1 hasta 2.16, concretamente al archivo log4j-core JAR, y que lleva asociada el identificador CVE-2021-45105.
[Actualización 23/12/2021] La vulnerabilidad CVE-2021-45105 afecta a las versiones 2.0-beta9 hasta 2.16.0 excluyendo 2.12.3. La vulnerabilidad CVE-2021-45046 afecta a las versiones 2.0-beta9 hasta 2.15.0 excluyendo 2.12.2.
Chen Zhaojun, investigador de Alibaba Cloud Security Team, ha descubierto una vulnerabilidad 0day crítica, que se ha denominado Log4Shell, que podría ser explotada por un atacante remoto no autenticado para ejecutar código arbitrario (RCE).
La vulnerabilidad afecta a Apache Log4j, una biblioteca open source desarrollada por Apache Software Foundation que facilita a aplicaciones del ecosistema Java mantener un registro de actividades realizadas en tiempo de ejecución, por la que millones de usuarios de cientos de servicios online podrían verse potencialmente afectados.
Actualizar Apache Log4j a la versión 2.15.0.
[Actualización 15/12/2021] La versión 2.15.0 no soluciona completamente la vulnerabilidad ya que estaba incompleta en determinadas configuraciones, lo que podría permitir a un atacante la denegación del servicio. La versión Log4j 2.16.0 soluciona este problema eliminando el soporte para los patrones de búsqueda de mensajes y desactivando la funcionalidad JNDI por defecto.
[Actualización 16/12/2021] Para esta nueva vulnerabilidad se ha asignado el identificador CVE-2021-45046.
Como medidas de mitigación, en versiones anteriores (>=2.10) este comportamiento puede mitigarse estableciendo la propiedad del sistema:
log4j2.formatMsgNoLookups = true
o eliminando la clase JndiLookup del classpath, como por ejemplo:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
Java 8u121 protege contra esta RCE al establecer por defecto:
com.sun.jndi.rmi.object.trustURLCodebase = false com.sun.jndi.cosnaming.object.trustURLCodebase = false
Adicionalmente, aplicar las medidas de mitigación descritas en los avisos de fabricantes afectados.
[Actualización 20/12/2021] Para corregir la vulnerabilidad de DoS identificada con CVE-2021-45105, los usuarios de Java 8 (o posteriores) deben actualizar Log4j a la versión 2.17.0. Adicionalmente, se pueden adoptar unas medidas de mitigación en la configuración.
[Actualización 23/12/2021] CISA, FBI, NSA, ACSC, CCCS, CERT NZ, NZ NCSC y NCSC-UK han publicado un aviso conjunto de ciberseguridad, en forma de alerta AA21-356A, para proporcionar una guía de mitigación de las vulnerabilidades en la librería de software Log4j de Apache.
[Actualización 23/12/2021] Para solucionar CVE-2021-45105, actualizar a Log4j 2.3.1 (para Java 6), 2.12.3 (para Java 7) o 2.17.0 (para Java 8 y posteriores). Para solucionar CVE-2021-45046, actualizar a Log4j 2.3.1 (para Java 6), 2.12.3 (para Java 7) o 2.17.0 (para Java 8 y posteriores).
La vulnerabilidad se origina de la forma en que los mensajes de registro son gestionados por el procesador Log4j. Si un atacante envía un mensaje especialmente diseñado:
User-Agent: ${jndi:ldap://<host>:<port>/<path>}
Podría resultar en la carga de una clase de código externo o la búsqueda de mensajes y la ejecución de ese código, lo que llevaría a una RCE. Se ha asignado el identificador CVE-2021-44228 para esta vulnerabilidad.
Debido a que algunas funciones de Apache Log4j tienen funciones de análisis recursivas, los atacantes podrían construir directamente peticiones maliciosas para desencadenar vulnerabilidades de ejecución remota de código.
IMPORTANTE: esta vulnerabilidad podría estar explotándose de manera activa.
[Actualización 15/12/2021] A la hora de mitigar la amenaza, es importante detectar tanto los intentos de explotación, como los indicios de una explotación exitosa por parte de un atacante en nuestros sistemas. Para ello, se recomienda:
- utilizar la siguiente expresión regular para la detección global:
\${(\${(.*?:|.*?:.*?:-)('|"|`)*(?1)}*|[jndi:lapsrm]('|"|`)*}*){9,11}
- existen unos parámetros de entrada de las aplicaciones con conexión a Internet que deben revisarse en detalle:
- Accept
- Cookie
- Location
- Origin
- Referer
- X-Api-Version
- X-Druid-Comment
- X-Forwarded-For
- X-Forwarded-Host
- X-Requested-With
- User-Agent
- realizar una detección basada en host y en red, monitorizando la red para comprobar la presencia de versiones vulnerables de Log4j. Existen scripts que no requieren dependencias y soportan la comprobación recursiva del sistema de archivos y dentro de los archivos JAR en busca de una versión vulnerable de Log4j,
- IOC:
- reglas Yara,
- reglas Snort y Suricata.
[Actualización 20/12/2021] Si se intenta una sustitución de cadena en la cadena que aparece a continuación, se desencadenará una recursión infinita, y la aplicación se bloqueará:
${${::-${::-$${::-j}}}}