ウェブアプリにおけるBash脆弱性の即死条件 #ShellShock

条件2. 動作環境

条件3. プログラム内容

  • Passengerは全死亡 *1
  • systemや `command`、 '| /usr/lib/sendmail' などで外部コマンド実行 *2
  • PHPのmailやmb_send_mail、その他フレームワーク等を介したメール送信 *3
  • 以下は条件1が不要
    • 明示的にbashを呼ぶ
    • 先頭で #!/bin/bash や #!/usr/bin/env bash しているプログラムを実行 (rbenv等)

補足: Passengerについて

Passengerは、デフォルトでRAILS_ROOT/config/environment.rbのファイル所有者の権限で実行されるため、一般的なインストール状況であればpublic以下にファイルを置いたり等なんでもできます。特に、パスワード無しでのsudoが可能なユーザでファイルを置いていた場合には、なんでも、できることを、手元では検証しました。

ワーカプロセスは使い回されるため、百発百中ではありませんが、一定のリクエスト毎にワーカプロセスを捨てて作り直すPassengerMaxRequestsが設定されていたり、アクセス量に応じてワーカプロセス数が変動するデフォルト設定であれば、繰り返しの試行により再現が可能と思われます。

*1:ワーカプロセス生成時に/bin/shを経由するため。参考: Security advisory

*2:PerlRubyでメタ文字を含まないsystemなど直接execvp(3)するものはセーフ

*3:QdmailやSwift mailer等でSMTPサーバを指定して接続している場合はセーフ