InfraFenceInfraFence

Live Security Operations

Empezar

CVE-2021-41773: path traversal en Apache 2.4.49, comprobar y corregir

Última actualización:

Apache HTTP Server 2.4.49 cambió la forma de normalizar las rutas, y el cambio dejaba pasar un punto codificado (%2e). Una petición con segmentos .%2e/ en la ruta podía así llegar a archivos fuera de las carpetas que mapea la configuración. Con CGI activado en una de esas carpetas, el mismo truco ejecuta programas en el servidor.

Solo está afectada la versión 2.4.49. Su corrección, 2.4.50, también era incompleta (CVE-2021-42013), así que la versión que hay que usar es 2.4.51 o posterior.

De un vistazo

CVE
CVE-2021-41773
Software
Apache HTTP Server
Versiones afectadas
Solo 2.4.49
Corregida en
2.4.50 (incompleta, ver CVE-2021-42013); actualiza a 2.4.51 o posterior
Puntuación CVSS
9.8 Crítica (NVD, CVSS 3.1) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CISA Known Exploited Vulnerabilities
Sí, añadida el 3 de noviembre de 2021
Publicada por NVD
5 de octubre de 2021
Parche virtual de InfraFence
vp-cve-2021-41773 (ModSecurity id 9920001)

Qué está afectado

Apache 2.4.49 fue la versión actual durante unas tres semanas, entre septiembre y octubre de 2021. Hoy se encuentra sobre todo en servidores compilados desde el código fuente, en imágenes de contenedor de esa época o en sistemas que no se han actualizado desde entonces. La divulgación de archivos solo funciona donde los archivos fuera de las carpetas mapeadas no están protegidos por el Require all denied predeterminado en <Directory />; la ejecución de código necesita además CGI (mod_cgi o mod_cgid) en una carpeta con alias.

Comprobar si un servidor es vulnerable

Comprueba primero la versión:

Debian / Ubuntu
apache2 -v
Familia RHEL
httpd -v
Compilado desde el código fuente (prefijo predeterminado)
/usr/local/apache2/bin/httpd -v

Cualquier versión distinta de Apache/2.4.49 o Apache/2.4.50 no está afectada por esta vulnerabilidad. En esas dos versiones, comprueba la configuración de la raíz del sistema de archivos, que debe denegar el acceso, y si hay un módulo CGI cargado:

Cualquier distribución
sudo grep -rn -A3 '<Directory />' /etc/apache2/ /etc/httpd/ /usr/local/apache2/conf/ 2>/dev/null
Cualquier distribución
sudo apachectl -M 2>/dev/null | grep -i cgi

Los intentos dejan puntos codificados en los logs de acceso:

Logs de acceso de Apache
sudo grep -rhiE '\.%2e/|%2e\./|%2e%2e/|%%32%65|\.%%32' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20

Corregirlo

Actualiza a 2.4.51 o posterior. Con el paquete de tu distribución (la actualización reinicia Apache: elige un momento tranquilo):

Debian / Ubuntu
sudo apt-get update
sudo apt-get install --only-upgrade apache2
apache2 -v
Familia RHEL
sudo dnf upgrade httpd
httpd -v

Un servidor compilado desde el código fuente necesita una nueva compilación de la versión 2.4 actual; un contenedor necesita una imagen nueva. Después asegúrate de que la raíz del sistema de archivos deniega el acceso, como en la configuración predeterminada, y recarga:

httpd.conf / apache2.conf
<Directory />
    AllowOverride None
    Require all denied
</Directory>
Cualquier distribución
sudo apachectl configtest && sudo apachectl graceful

Atención: Si los logs muestran peticiones con éxito (estado 200) con puntos codificados, trata el servidor como comprometido: archivos como /etc/passwd o configuraciones con contraseñas pueden haberse leído y, con CGI, puede haberse ejecutado un programa.

Cómo la bloquea InfraFence mientras actualizas

El parche virtual para CVE-2021-41773 es una regla ModSecurity sobre la ruta sin procesar de la petición, antes de que Apache la decodifique: bloquea una ruta con un punto codificado junto a un punto (.%2e, %2e., %2e%2e) seguido de una barra, normal o codificada. Las URL normales nunca contienen esa secuencia.

Cómo se aplica el parche

  1. El agente anota qué puertos SSH y qué sitios responden.
  2. Escribe la regla (id de ModSecurity 9920001) entre sus propios marcadores en su archivo de ModSecurity, ejecuta apachectl configtest y recarga Apache de forma ordenada. Si la prueba falla, vuelve a poner el archivo anterior.
  3. Comprueba que SSH y los sitios siguen respondiendo, y quita el parche si no es así.
  4. Comprueba que ModSecurity bloquea de verdad con la regla, con una petición de prueba local inofensiva. Un ModSecurity en DetectionOnly solo registra: en ese caso el parche se quita y se notifica como ineficaz, nunca como aplicado.

Cada petición que bloquea el parche se notifica con CVE-2021-41773 (agente 1.0.37 o posterior): ves los intentos en la actividad del servidor y en la página Explotación del panel, así sabes que están probando la vulnerabilidad contra ti.

Atención: Un parche virtual bloquea la forma conocida del ataque en las peticiones que pasan por Apache en ese servidor. No sustituye a la actualización: instala la versión corregida y después quita el parche desde Actividad con Deshacer si ya no lo necesitas.

Los parches virtuales necesitan Apache con ModSecurity, el ajuste Permitir cambios en la configuración del servidor web y ningún panel de hosting ni herramienta de gestión de la configuración a cargo del servidor web; forman parte del plan Pro y de AutoMode. Los aplica una persona desde el análisis con IA, o AutoMode. Consulta Parches virtuales.

Fuentes

Los datos de esta página vienen de estas fuentes; consúltalas por si hay cambios.

Pruébalo gratis en 1 servidor

Starter es gratuito para un servidor, con protección completa y bloqueo automático. Sin tarjeta de crédito.

Instala el agente como root, con tu token en lugar de <TOKEN>:

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

El token se crea en el panel, en Servidores › Añadir servidor.