Skip to main content
Dark background with blue code overlay
Blog
RSS

Akamai informa de otro ataque DoS en Log4j2 (CVE-2021-45105): Lo que debe saber

Akamai blue wave

Written by

Akamai Threat Research Team

December 20, 2021

Las vulnerabilidades descubiertas recientemente en Log4j2 han revolucionado Internet. Como parte de nuestra investigación continua, el 17 de diciembre, Hideki Okamoto de Akamai descubrió una vulnerabilidad adicional de denegación de servicio (DoS) e informó de ella. Se la denominó CVE-2021-45105.

Cómo descubrimos la vulnerabilidad CVE-2021-45105

Estábamos analizando la CVE-2021-45046, la segunda de esta serie de vulnerabilidades. Si entre las propiedades de la Log4j2 se incluye un diseño personalizado mediante un patrón de búsqueda de contexto (${ctx:FOOBAR}) o un mapa de contexto del subproceso (%X, %mdc o %MDC) y la aplicación pasa la información del usuario al contexto del subproceso, las cargas cuidadosamente creadas pueden dar lugar a una recursión no controlada. Posteriormente, se descubrió que se trataba de una vulnerabilidad de ejecución remota de código (RCE), pero inicialmente se indicó que causaba una DoS. 

A medida que tratamos de determinar qué cargas causaban la DoS, encontramos una carga publicada por un equipo de seguridad de terceros. De hecho, la carga produjo una excepción, pero era "java.lang.IllegalStateException: Infinite loop in IllegalStateException: Infinite loop in property interpolation", que es una excepción recuperable. Si bien no estamos seguros de si esta es efectivamente la carga de la CVE-2021-45046, hemos observado que una "protección" del código de la Log4j2 produjo esta excepción.

StrSubstitutor.java

  private void checkCyclicSubstitution(final String varName, final List<String> priorVariables) {

    if (!priorVariables.contains(varName)) {

        return;

    }

    final StringBuilder buf = new StringBuilder(BUF_SIZE);

    buf.append("Infinite loop in property interpolation of ");

    buf.append(priorVariables.remove(0));

    buf.append(": ");

    appendWithSeparators(buf, priorVariables, "->");

    throw new IllegalStateException(buf.toString());

}

Por tanto, los desarrolladores de la Log4j2 sabían que se podían producir referencias circulares en el proceso de búsqueda. Creemos que esperaban que los desarrolladores de aplicaciones detectaran esta excepción, ya que llamaron a la función checkCyclicSubstitution(). Esta función examina la lista de matrices que almacena el historial de valores. Pensamos que podría haber una manera de eludir la verificación de la referencia circular. Por último, logramos encontrar dicha carga y generar un error java.lang.StackOverflowError en algunas versiones de JVM. También observamos que este ataque se produce en la versión 2.16 de Log4j, donde se ha solucionado la CVE-2021-45046.

El problema se comunicó al equipo de seguridad de la Log4j2, quien asignó la CVE-2021-45105 y la solucionó rápidamente en la versión 2.17 de la Log4j.

El vector de ataque

Descubrimos que, en caso de que las aplicaciones pasen los datos que introduce el usuario al contexto del subproceso, la doble valoración de los datos de contexto registrados podría provocar un fallo del servidor:

Usuario-agente: ${${ctx:ua}}

En algunos informes sobre Twitter y GitHub se han señalado otros vectores de ataque que no están directamente relacionados con esta vulnerabilidad, ya que, como máximo, algunos de ellos podrían tener como resultado excepciones recuperables, pero no un bloqueo del servidor. Estas variantes son:

  • ${ctx:loginId}
    
  • $${ctx:loginId}
    
  • ${${::-${::-$${::-j}}}}
    

Mitigación de la CVE-2021-45105

Los clientes de Kona Site Defender con todos los conjuntos de reglas ya están protegidos de esta vulnerabilidad con la actual regla 3000014 de KRS/ASE y la "inyección de comando" de grupos de ataque automatizados (AAG).

Continuaremos nuestra investigación y publicaremos actualizaciones a medida que haya más información disponible.



Akamai blue wave

Written by

Akamai Threat Research Team

December 20, 2021