
Roundcube 1.0.0 <= 1.2.2 リモートコード実行エクスプロイトと脆弱なコンテナ
Roundcube は、世界中の多くの組織や企業で利用されている、広く配布されているオープンソースのウェブメールソフトウェアです。たとえば SourceForge 上のミラーでは、過去12か月間で26万以上のダウンロード数を記録していますが、これは実際の利用者のごく一部にすぎません。Roundcube がサーバーにインストールされると、認証済みユーザーがウェブブラウザで電子メールを送受信できるウェブインターフェースを提供します。
Roundcube 1.2.2 以前では、ユーザー制御の入力がサニタイズされずに、セキュリティ上重要とされている PHP 組み込み関数 mail() の呼び出しの第5引数に渡されます。問題は、mail() 関数を呼び出すと PHP が sendmail プログラムを実行することです。第5引数はこの実行に引数を渡すことを可能にし、sendmail の設定を可能にします。sendmail にはすべてのメールトラフィックをファイルに記録する -X オプションがあるため、攻撃者はこのオプションを悪用して、攻撃対象サーバーのウェブルートディレクトリに悪意のある PHP ファイルを作成できます。次のコード行によってこの脆弱性が引き起こされます。
この脆弱性を悪用するには、次の要件があります。
mail() 関数を使用するように設定されていること(デフォルトでは、SMTP が指定されていない場合 [1])mail() 関数が sendmail を使用するように設定されていること(デフォルトでは、sendmail_path を参照 [2])safe_mode がオフに設定されていること(デフォルトでは、safe_mode を参照 [3])これらの要件は特に厳しいものではないため、実際には多くの脆弱なシステムが存在していました。
テスト用の脆弱な環境をセットアップするには、Docker がインストールされている必要があります。次のコマンドを実行するだけです。
docker build -t vuln/cve-2016-9920 .
docker run --rm -it -p 80:80 vuln/cve-2016-9920
これにより、ホストの 80 ポートで脆弱なウェブアプリケーションが起動します。
Roundcube 1.2.2 以前では、ユーザー制御の入力がサニタイズされずに、セキュリティ上重要とされている PHP の組み込み関数
mail()への呼び出しの第5引数に渡されます。問題は、mail()関数を呼び出すと PHP が sendmail プログラムを実行することです。第5引数はこの実行に追加パラメータを渡すことを可能にし、sendmail の設定を可能にします。sendmail にはすべてのメールトラフィックをファイルに記録する-Xオプションがあるため、攻撃者はこのオプションを悪用して、攻撃対象サーバーのウェブルートディレクトリに悪意のある PHP ファイルを作成できます。この脆弱性はまれで広く知られていませんが、RIPS は数秒でそれを検出しました。 [4]
このターゲットを攻撃するには、次を実行するだけです。
./exploit.py --host HOST --user USERNAME --pwd PASSWORD --path PATH --www_path WEB_DIRECTORY
この脆弱なイメージを使用している場合は、次のように実行できます。
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
攻撃後、backdoor.php というファイルがウェブディレクトリのルートフォルダに保存されます。そして、エクスプロイトは、バックドアにコマンドを送信できるシェルを提供します。
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
[+] CVE-2016-9920 exploit by t0kx
[+] Exploiting 127.0.0.1
[+] Target exploited, acessing shell at http://127.0.0.1/roundcube/backdoor.php
[+] Running whoami: www-data
[+] Done
この欠陥は Robin Peraglie [4] によって発見されました。この教育用コンテンツの本文とアイデアは opsxcq によって作成されました。
このプログラムまたは以前のプログラムは、教育目的のみを対象としています。許可なく使用しないでください。通常の免責事項が適用されます。特に、私 (t0kx) は、これらのプログラムによって提供される情報または機能を直接的または間接的に使用したことによって生じたいかなる損害についても責任を負いません。著者またはいかなるインターネットプロバイダーも、これらのプログラムまたはその派生物の内容や誤用について一切責任を負いません。これらのプログラムを使用することにより、これらのプログラムの使用によって引き起こされたいかなる損害(データ損失、システムクラッシュ、システム侵害など)も t0kx の責任ではないことを理解したものとします。