Vulnerabilidad de Log4j: ¿es vulnerable Log4j 1.2.17 (no se pudo encontrar ningún código JNDI en la fuente)?

6 minutos de lectura

Avatar de usuario de Ravindra HV
ravindra hv

Con respecto a la Log4j JNDI vulnerabilidad de ejecución remota de código que ha sido identificada CVE-2021-44228 – (ver también referencias) – Me preguntaba si Log4j-v1.2 también se ve afectado, pero lo más cercano que obtuve de la revisión del código fuente es el JMS-Appender.

La pregunta es que, si bien las publicaciones en Internet indican que Log4j 1.2 también es vulnerable, no puedo encontrar el código fuente correspondiente.

¿Me estoy perdiendo algo que otros han identificado?

Log4j 1.2 parece tener una vulnerabilidad en el servidor de socket class, pero tengo entendido que debe habilitarse en primer lugar para que sea aplicable y, por lo tanto, no es una amenaza pasiva a diferencia de la vulnerabilidad de búsqueda JNDI que parece ser la identificada.

¿Tengo entendido que Log4j v1.2 no es vulnerable al error de ejecución jndi-remote-code correcto?

Referencias

Este publicación de blog de Cloudflare también indica el mismo punto que en AKX… ¡que se introdujo en Log4j 2!

Actualización #1 – Ya está disponible una bifurcación de apache-log4j-1.2.x (ahora retirado) con correcciones de parches para algunas vulnerabilidades identificadas en la biblioteca anterior (del autor original de log4j). el sitio es https://reload4j.qos.ch/. A partir del 21 de enero de 2022, se lanzó la versión 1.2.18.2. Las vulnerabilidades abordadas hasta la fecha incluyen aquellas relacionadas con JMSAppender, servidor de sockets y motosierra vulnerabilidades. Tenga en cuenta que simplemente estoy transmitiendo esta información. No he verificado las correcciones de mi parte. Consulte el enlace para obtener más detalles.

  • ¿Responde esto a tu pregunta? ¿Cómo mitigar la vulnerabilidad de log4shell en la versión 1.2 de log4j?

    – Piotr P. Karwasz

    13 de diciembre de 2021 a las 13:31

  • Esto es difícil porque la guía sigue evolucionando constantemente. Recomiendo consultar la página específica CISA configurada para esto: cisa.gov/uscert/apache-log4j-vulnerability-guidance

    – Brent escribe el código

    16 de diciembre de 2021 a las 23:21

Avatar de usuario de AKX
AKX

La función JNDI se agregó a Log4j 2.0-beta9.

Log4j 1.x por lo tanto no tiene el código vulnerable.

  • Resulta que log4j 1 podría ser vulnerable en ciertas configuraciones: github.com/apache/logging-log4j2/pull/…

    – AKX

    11 de diciembre de 2021 a las 0:03

  • Para agregar más confusión, RHEL ahora afirma que algunos de sus productos tienen una implementación que usa 1.2 que son vulnerables. Habrá mucha investigación sobre esta vulnerabilidad en las próximas semanas (de buenos y malos actores) que podría identificar variaciones del mecanismo utilizado. Si es posible en este punto, sería más seguro actualizar a 2.15. RHEL CVE-2021-4104

    – Rikkouri

    13 de diciembre de 2021 a las 12:23


  • Deje que esto sea una lección para nosotros: ¡no actualice a la última versión!

    – Sridhar Sarnobat

    13 dic 2021 a las 23:06

  • Tal vez pueda responder por mí mismo … JMSAppender debe agregarse como nuevo agregador en el archivo de configuración log4j (o mediante código), ¿verdad? Si ese no es el caso, no hay problema con respecto a esta vulnerabilidad. — ahora hay un CVE: nvd.nist.gov/vuln/detail/CVE-2021-4104

    – Marcos

    14 dic 2021 a las 15:40

  • Vale la pena señalar que, aunque Log4j 1.x no es vulnerable de la misma manera, tiene varios CVE abiertos en este punto (nvd.nist.gov/vuln/detail/CVE-2021-4104, nvd.nist.gov/vuln/detail/CVE-2019-17571) y ha estado al final de su vida útil desde agosto de 2015 (blogs.apache.org/foundation/entry/…). Podría valer la pena considerar: “Si ya hay varios exploits, ¿qué más se puede encontrar?” para una biblioteca que ya no recibe actualizaciones.

    – Brent escribe el código

    16 dic 2021 a las 23:25


avatar de usuario de giraffesyo
jirafasyo

Si bien no se ve afectado exactamente por el mismo problema de Log4Shell, el Equipo Apache Log4j recomienda eliminar JMSAppender y SocketServerque tiene una vulnerabilidad en CVE-2019-17571de sus archivos JAR.

Puedes usar el zip comando para eliminar las clases afectadas. Reemplace el nombre de archivo/versión con el suyo:

zip -d log4j-1.2.16.jar org/apache/log4j/net/JMSAppender.class
zip -d log4j-1.2.16.jar org/apache/log4j/net/SocketServer.class

Puede revisar los archivos en su zip usando menos y grepp.ej less log4j-1.2.16.jar | grep JMSAppender

Dicho esto, Apache recomienda que actualice a la versión 2.x si es posible. De acuerdo a su pagina de seguridad:

Tenga en cuenta que Log4j 1.x ha llegado al final de su vida útil y ya no es compatible. Las vulnerabilidades informadas después de agosto de 2015 contra Log4j 1.x no se verificaron y no se repararán. Los usuarios deben actualizar a Log4j 2 para obtener correcciones de seguridad.

  • Solo para agregar un recordatorio: los archivos jar de log4j seguirán residiendo en los archivos de guerra implementados y en los repositorios de desarrollador maven. Por lo tanto, cualquier reconstrucción de la aplicación y reimplementación usando estos reintroducirá estas clases.

    – Aturdido

    16 de diciembre de 2021 a las 9:10

Avatar de usuario de Dazed
aturdido

Además de la respuesta de giraffesyo y en caso de que ayude a alguien, escribí este script Bash, que elimina las clases identificadas como vulnerabilidades (enlace aquí para el hilo de desarrollo de Log4j) y establece que los archivos de propiedades son de solo lectura, como se sugiere aquí en un hilo de Red Hat Bugzilla.

Nota 1: no verifica el uso de estas clases en las propiedades, es simplemente una forma de encontrar y eliminar, ¡úselo bajo su propio riesgo!

Nota 2 – depende de zip y unzip siendo instalada

#!/bin/bash

DIR=$1
APPLY=$2

# Classes to be searched for/removed
CLASSES="org/apache/log4j/net/SimpleSocketServer.class
org/apache/log4j/net/SocketServer.class
org/apache/log4j/net/JMSAppender.class"


PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`

usage () {
    echo >&2 Usage: ${PROGNAME} DIR [APPLY]
    echo >&2        Where DIR is the starting directory for find
    echo >&2        and   APPLY = "Y" - to perform purification
    exit 1
}

# Force upper case on Apply
APPLY=$(echo "${APPLY}" | tr '[:lower:]' '[:upper:]')

# Default Apply to N
if [ "$APPLY" == "" ] ; then
   APPLY="N"
fi

# Check parameters
if [ "$DIR" == "" ] ; then
   usage
fi
echo $APPLY | grep -q -i -e '^Y$' -e '^N$' || usage

# Search for log4j jar files - for class file removal
FILES=$(find $DIR -name *log4j*jar)
for f in $FILES
do
   echo "Checking Jar [$f]"

   for jf in $CLASSES
   do
      unzip -v $f | grep -e "$jf"
      if [ "$APPLY" = "Y" ]
      then
         echo "Deleting $jf from $f"
         zip -d $f $jf
      fi
   done
done

# Search for Log4j properties files - for read-only setting
PFILES=$(find $DIR -name *log4j*properties)
for f in $PFILES
do
   echo "Checking permissions [$f]"

   if [ "$APPLY" = "Y" ]
   then
      echo "Changing permissons on $f"
      chmod 444 $f
   fi

   ls -l $f
done

¿Ha sido útil esta solución?