Manual de Actualización Offline de Apache (httpd) en RHEL 8

Manual de Actualización Offline de Apache (httpd) en RHEL 8

Manual de Actualización Offline de Apache (httpd) en RHEL 8

Objetivo

Actualizar Apache (httpd) a una versión ≥ 2.4.51 en un servidor RHEL 8.9 sin acceso a internet, mitigando las vulnerabilidades:

  1. CVE-2021-40438 (Apache Mixed Platform AddType Directive Information Disclosure).

  2. CVE-2021-39275 (Apache mod_suexec Privilege Escalation).

Requisitos Previos

  1. Servidor con internet (RHEL 8) para descargar paquetes y dependencias.

  2. Acceso root o sudo en ambos servidores (con y sin internet).

  3. Medio de transferencia: USB, SFTP, SCP, o red local para mover paquetes al servidor offline.

 

Verificar la versión actual de Apache HTTPD

Ejecutar en el servidor sin conexión:

httpd -v

Alternativas:

rpm -qa | grep httpd apachectl -v systemctl status httpd

 

Preparar Paquetes en el Servidor con Internet

1.1. Configurar Repositorios y Herramientas

# Opción 1: Usar repositorios estándar sudo dnf install -y yum-utils createrepo # Opción 2: Habilitar repositorio EPEL (si es necesario) sudo dnf install -y <https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm> # Opción 3: Descargar paquetes manualmente desde repositorios oficiales mkdir ~/httpd-packages && cd ~/httpd-packages

1.2. Descargar Paquetes y Dependencias

# Opción 1: Usar yumdownloader (recomendado) sudo yum install -y yum-utils yumdownloader --resolve httpd # Opción 2: Descargar solo httpd y dependencias críticas yumdownloader httpd apr apr-util apr-util-openssl mod_http2 # Opción 3: Usar reposync para clonar repositorios completos sudo dnf install -y createrepo sudo reposync --repo=baseos --download-metadata --download-path=~/httpd-packages # Opción 4: Descargar desde el navegador (ejemplo para httpd ≥ 2.4.51) # Visitar: <https://httpd.apache.org/download.cgi> or dnf download --resolve httpd-2.4.52 or dnf repoquery --requires --resolve httpd | xargs dnf download #Si dnf download falla, se puede listar las dependencias y descargarlas manualmente: dnf repoquery --requires --resolve httpd #Descargar manualmente los paquetes necesarios: dnf download httpd apr apr-util mod_ssl

1.3. Crear Repositorio Local (Opcional)

# Crear metadatos para los paquetes descargados createrepo ~/httpd-packages # Empaquetar la carpeta para transferencia tar -czvf httpd-packages.tar.gz ~/httpd-packages

 

Paso 2: Transferir Paquetes al Servidor Offline

2.1. Métodos de Transferencia

# Opción 1: SCP (vía SSH) scp -r httpd-packages.tar.gz usuario@servidor-offline:/tmp # Opción 2: USB cp -r httpd-packages /media/usb/ # En el servidor offline: mount /dev/sdb1 /mnt && cp -r /mnt/httpd-packages /tmp # Opción 3: Rsync (si hay red local) rsync -avz httpd-packages.tar.gz usuario@servidor-offline:/tmp # Opción 4: SFTP sftp usuario@servidor-offline put httpd-packages.tar.gz /tmp

 

Paso 3: Instalar Paquetes en el Servidor Offline

3.1. Preparar el Entorno

# Descomprimir paquetes tar -xzvf /tmp/httpd-packages.tar.gz -C /tmp # Opción 1: Crear repositorio local sudo cp -r /tmp/httpd-packages /var/ftp/local-repo sudo createrepo /var/ftp/local-repo # Configurar repositorio local sudo tee /etc/yum.repos.d/local.repo <<EOF [local-repo] name=Repositorio Local baseurl=file:///var/ftp/local-repo enabled=1 gpgcheck=0 EOF # Opción 2: Instalar manualmente con rpm (si hay dependencias) cd /tmp/httpd-packages sudo rpm -Uvh *.rpm --nodeps --force # Solo si hay conflictos #or rpm -Uvh *.rpm rpm -ivh --replacepkgs *.rpm rpm -Uvh --nodeps --force *.rpm

3.2. Instalar/Actualizar Apache

# Opción 1: Usar YUM con repositorio local sudo dnf clean all sudo dnf update httpd -y --disablerepo=* --enablerepo=local-repo # Opción 2: Instalar paquetes manualmente cd /tmp/httpd-packages sudo rpm -Uvh httpd-2.4.51-1.el8.x86_64.rpm apr-*.rpm apr-util-*.rpm # Opción 3: Forzar actualización ignorando dependencias (solo emergencia) sudo rpm -Uvh httpd-2.4.51-1.el8.x86_64.rpm --nodeps --force # Opción 4: Verificar versiones instaladas httpd -v rpm -qa | grep httpd

 

Paso 4: Deshabilitar/Desinstalar mod_suexec

4.1. Deshabilitar el Módulo

# Opción 1: Comentar la línea en la configuración sudo sed -i 's/LoadModule suexec_module/#LoadModule suexec_module/' /etc/httpd/conf.modules.d/00-base.conf # Opción 2: Eliminar archivo de configuración sudo rm -f /etc/httpd/conf.modules.d/00-suexec.conf # Opción 3: Reiniciar Apache para aplicar cambios sudo systemctl restart httpd # Opción 4: Verificar módulos cargados httpd -M | grep suexec #Identificar si suexec está habilitado: httpd -V | grep -i suexec ls /usr/sbin/suexec rpm -q --whatprovides /usr/sbin/suexec Deshabilitar suexec mv /usr/sbin/suexec /usr/sbin/suexec.disabled chmod 000 /usr/sbin/suexec Alternativas: rm /usr/sbin/suexec chattr +i /usr/sbin/suexec Editar configuración: sed -i '/LoadModule suexec_module/s/^/#/' /etc/httpd/conf.modules.d/00-base.conf

4.2. Desinstalar Paquete (si aplica)

# Buscar paquete asociado rpm -qa | grep suexec # Desinstalar sudo rpm -e mod_suexec

 

Paso 5: Verificar Mitigación de Vulnerabilidades

5.1. Comprobar Versión de Apache

# Opción 1: Usar httpd -v httpd -v # Debe mostrar "Apache/2.4.51" # Opción 2: Consultar RPM rpm -q httpd # Opción 3: Verificar registro de actualización sudo journalctl -u httpd --since "10 minutes ago" # Opción 4: Curl para ver cabeceras curl -I <http://localhost>

5.2. Confirmar Deshabilitación de mod_suexec

# Opción 1: Listar módulos httpd -M | grep suexec # No debe mostrar resultados # Opción 2: Buscar en archivos de configuración grep -R "suexec" /etc/httpd/ # Opción 3: Verificar procesos ps aux | grep httpd | grep suexec # Sin resultados # Opción 4: Prueba funcional (ejecutar CGI con suexec) sudo tail -f /var/log/httpd/error_log # Debe mostrar errores si el módulo está deshabilitado

 

5.3. Herramientas Externas de Escaneo

  • Nmap: nmap --script http-vuln-cve2021-40438 -p 80 IP_SERVIDOR

  • Nessus/OpenVAS: Usar plugins para CVE-2021-40438 y CVE-2021-39275.

  • Manual: Ejecutar curl -v <http://localhost/cgi-bin/test> y verificar que no se exponga información sensible.

 

Enlaces de Referencia

  1. Apache 2.4.51 Release Notes: Apache HTTP Server 2.4 vulnerabilities - The Apache HTTP Server Project

  2. Red Hat KB sobre Actualizaciones Offline: https://access.redhat.com/solutions/70019

  3. CVE-2021-40438: https://nvd.nist.gov/vuln/detail/CVE-2021-40438

  4. CVE-2021-39275: https://nvd.nist.gov/vuln/detail/CVE-2021-39275

 

Resolución de Problemas Comunes

  • Error de dependencias: Usar sudo rpm -Uvh *.rpm --nodeps (solo en emergencias).

  • Conflicto de versiones: Eliminar paquetes antiguos con sudo rpm -e httpd --nodeps.

  • Apache no inicia: Verificar logs en /var/log/httpd/error_log.

 

Checklist Final

  • Paquetes transferidos correctamente al servidor offline.

  • Versión de Apache ≥ 2.4.51 instalada.

  • mod_suexec deshabilitado o desinstalado.

  • Vulnerabilidades validadas como mitigadas.