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:
CVE-2021-40438 (Apache Mixed Platform AddType Directive Information Disclosure).
CVE-2021-39275 (Apache mod_suexec Privilege Escalation).
Requisitos Previos
Servidor con internet (RHEL 8) para descargar paquetes y dependencias.
Acceso root o sudo en ambos servidores (con y sin internet).
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
Apache 2.4.51 Release Notes: Apache HTTP Server 2.4 vulnerabilities - The Apache HTTP Server Project
Red Hat KB sobre Actualizaciones Offline: https://access.redhat.com/solutions/70019
CVE-2021-40438: https://nvd.nist.gov/vuln/detail/CVE-2021-40438
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.