
Kubernetes DaemonSet que aplica parches en caliente a JVMs para mitigar las vulnerabilidades de Log4j2 (CVE-2021-44228, CVE-2021-45046) deshabilitando las búsquedas JNDI, proporcionando protección temporal hasta que se actualicen las dependencias.
Este proyecto está siendo deprecado según se detalla a continuación.
El proyecto dejará de aceptar incidencias y no se actualizará a partir del 2023-01-01. Después de esta fecha, este proyecto no tendrá soporte y no se generarán nuevas versiones ni artefactos asociados con este proyecto.
El repositorio del proyecto se archivará de forma permanente (solo lectura) a partir del 2023-04-01.
Como se indicó en la documentación original del proyecto, esto siempre fue concebido como una medida temporal para ayudar a los usuarios de Kubernetes, y solo proporcionó una mitigación parcial de la exposición de seguridad de Log4j2 CVE-2021-44228 y CVE-2021-45046. Se recomienda encarecidamente que todos los usuarios de Log4j actualicen a una versión parcheada del proyecto para mitigar completamente cualquier riesgo asociado con estos CVEs.
Los artefactos de lanzamiento asociados con la última versión permanecerán disponibles de forma permanente para los consumidores de este proyecto que continúen implementándolo en sus entornos Kubernetes. Específicamente, el manifiesto DaemonSet y la imagen de contenedor pública de ECR permanecerán disponibles después de la deprecación, pero ya no recibirán soporte ni actualizaciones.
AWS ha desarrollado un RPM que realiza un hot-patch a nivel de JVM deshabilitando las búsquedas JNDI de la biblioteca Log4j2, mitigando Log4j2 CVE-2021-44228 y CVE-2021-45046.
El agente de nodo para Apache Log4j2 CVE-2021-44228 es un proyecto de código abierto creado por el equipo de Kubernetes en AWS. Está diseñado para ejecutarse como un DaemonSet y mitigar el impacto de Log4j2 CVE-2021-44228, que afecta a aplicaciones que ejecutan versiones de Apache Log4j2 < 2.15.0 al procesar entradas de fuentes no confiables. Ejecutar este DaemonSet parcheará las JVM que se ejecutan en contenedores así como en el host.
Qué hace: Se instalará una entrada cron en cada nodo trabajador que ejecuta un proceso que busca JVM en ejecución e inyecta un agente que mitiga el CVE de Log4J2. Todas las JVM, incluidas las que se ejecutan en contenedores, se parchearán en caliente de esta manera. Actualmente, el proceso de hot-patch está configurado para ejecutarse cada 30 minutos con una fluctuación de 15 minutos. La ventana efectiva puede variar entre 15 y 45 minutos entre ejecuciones.
Nota: Puede encontrar información adicional sobre la vulnerabilidad de Log4j2 y la respuesta de AWS en el Boletín de seguridad de AWS.
Nota: El 20/04/22, la imagen (v0.0.16) se actualizó con el último parche para Amazon Linux 1 y 2. Si instaló una versión anterior de este DaemonSet y todavía se está ejecutando, debe volver a aplicar el archivo daemonset.yaml para instalar el RPM más reciente. Si ya no necesita el parche de log4j, debe eliminar el DaemonSet y desinstalar el RPM, ya que las versiones anteriores del RPM (< 1.1-16) tenían una vulnerabilidad que podría permitir que un atacante escapara de un contenedor y obtuviera acceso al host subyacente.
Nota: la versión 1.3-5 aborda ALAS2-2022-1806 y ALAS-2022-1601. Consulte Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root para obtener información adicional.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Compruebe un solo pod al azar:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
u obtenga confirmación para cada nodo:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Si la instalación fue exitosa, la última línea del archivo de log mostrará installed and verified; de lo contrario, se registrará un error.
daemonset.yaml para reflejar la nueva URI:tag de la imagen, luego aplique el manifiesto a su clúster.Las funciones JNDI de Apache Log4j2 < 2.15.0 utilizadas en la configuración, mensajes de log y parámetros no protegen contra LDAP controlado por atacantes y otros endpoints relacionados con JNDI. Un atacante que pueda controlar mensajes de log o parámetros de mensajes de log puede ejecutar código arbitrario cargado desde servidores LDAP cuando la sustitución de búsqueda de mensajes está habilitada. A partir de las versiones de Log4j2 < 2.15.0, este comportamiento ha sido deshabilitado por defecto. Los detalles completos se pueden encontrar en el boletín CVE.
Puede encontrar información adicional sobre la vulnerabilidad de Log4j2 en el Boletín de seguridad de AWS.
AWS ha desarrollado un RPM que realiza un hot-patch a nivel de JVM deshabilitando las búsquedas JNDI de la biblioteca Log4j2, mitigando el problema de Log4j2 que se aplica tanto a las JVM en el host como a las JVM que se ejecutan en contenedores. Este proyecto empaqueta el RPM como un DaemonSet de Kubernetes.
Cuando se instala, se ejecutará un proceso en cada nodo trabajador que busca JVM en ejecución e inyecta un agente en la JVM para mitigar la vulnerabilidad de Log4j2. El agente intenta parchear el método lookup() de todas las instancias cargadas de org.apache.logging.log4j.core.lookup.JndiLookup para que devuelvan incondicionalmente la cadena Patched JndiLookup::lookup(). Esto está diseñado para abordar la vulnerabilidad de ejecución remota de código CVE-2021-44228 en Log4j2 sin reiniciar el proceso Java.
Este proceso, por defecto, está configurado para ejecutarse cada 30 minutos y agregará una capa de protección en clústeres donde las aplicaciones aún no han sido parcheadas con una dependencia de Log4j2 actualizada.
Puede encontrar más detalles sobre el hot-patch en el blog de AWS de código abierto.
La imagen del contenedor está alojada en el repositorio público de ECR de aws-containers.