es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hotfix asegurando muchos archivos jar de log4j contra log4shell.

Tengo que asegurar algunos servidores contra CVE-2021-44228, también conocido como log4shell. Esas máquinas están ejecutando Linux y tienen una gran cantidad de archivos jar de log4j en todas partes, algunos de servidores de aplicaciones, otros de software heredado, etc. Me temo que no es posible actualizar todos ellos a la última versión de log4j.

Sin embargo, si entiendo correctamente, se puede prevenir log4shell en log4j 1.x eliminando la clase afectada de la siguiente manera:

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

Y en log4j 2.x de la siguiente manera (consulte logging.apache.org):

zip -q -d log4j-core.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Estoy pensando en un script de shell para encontrar todos los archivos jar de log4j, tal vez así:

find / -name "log4j*.jar"

y ejecutar esos dos comandos zip en todos los resultados. Desafortunadamente, no tengo experiencia en scripts de shell. ¿Podría alguien escribir un script basado en esta idea?

Advertencias:

  • Por supuesto, perderá toda la funcionalidad de búsqueda JNDI y/o JMS de log4j al hacer esto.
  • log4j 1.x tiene otros problemas de seguridad. Por lo tanto, es mejor actualizar, por ejemplo, a la última versión de log4j 2.x.
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurar los servidores Linux contra CVE-2021-44228 (log4shell), puedes prevenir la vulnerabilidad en log4j 1.x eliminando la clase afectada utilizando el siguiente comando:

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

    Para log4j 2.x, utiliza el siguiente comando:

    zip -q -d log4j-core.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
    

    Puedes encontrar todos los archivos jar de log4j utilizando el comando find de la siguiente manera:

    find / -name "log4j*.jar"
    

    Para automatizar este proceso, puedes escribir un script de shell que verifique todos los archivos jar de log4j y ejecute los comandos anteriores en ellos. Aquí tienes un ejemplo de script:

    #!/bin/bash
    
    # Encuentra todos los archivos jar de log4j y recorre la lista
    find / -name "log4j*.jar" -type f | while read -r jar_path; do
      echo "Procesando $jar_path..."
    
      # Verifica la versión de log4j
      if unzip -p "$jar_path" org/apache/logging/log4j/util/Version.class | grep -q "1\." ; then
        # Para log4j 1.x, elimina la clase JMSAppender
        unzip -q -d "${jar_path%/*}" -o "$jar_path" org/apache/log4j/net/JMSAppender.class
      else
        # Para log4j 2.x, elimina la clase JndiLookup
        unzip -q -d "${jar_path%/*}" -o "$jar_path" org/apache/logging/log4j/core/lookup/JndiLookup.class
      fi
    done
    

    Ten en cuenta que eliminar estas clases resultará en la pérdida de la funcionalidad de búsqueda JNDI y/o JMS de log4j. Se recomienda actualizar a la última versión de log4j para abordar todos los problemas de seguridad.

Comments are closed.