2021年10月6日に、CVE-2021-41773の修正を含むApache HTTP Server 2.4.50がリリースされました。 当該CVEはパストラバーサルの脆弱性であり、この脆弱性が悪用されるとDocumentRoot外にあるファイルが、インターネットから閲覧される可能性があります。なおこの脆弱性はApache HTTP Server 2.4.49のみに存在するものであり、それより古いバージョンには影響しません
SOCでは、10月6日より当該CVEを狙った通信をお客様環境にて観測しています。 当該CVEを狙ったスキャン通信の例を図-1に示します。
Apache HTTP Serverのシェア率の高さや攻撃の容易さなどを鑑み、筆者の所属する解析チームにて本脆弱性を検証し、詳細を確認しました。 確認時点では既に攻撃コードがインターネット上に公開されていましたが、それらとは異なる独自の攻撃コードの作成に成功しました。独自の攻撃コードは当該CVEの対策バージョンであるApache HTTP Server 2.4.50では防御できないことが確認できたため、Apache Security Teamへ報告しました。
本記事では、筆者が発見し報告した、CVE-2021-42013(JVN#51106450)について、概要と対策を紹介します。
CVE-2021-41773 の概要
CVE-2021-42013を紹介する前に、本脆弱性発見の起因となった、CVE-2021-41773について解説します。
Apache HTTP Server 2.4.48 から Aapache HTTP Server 2.4.49への更新にて、HTTPリクエストに含まれる「パスを正規化する処理」に変更がありました。この変更では、パストラバーサルの脆弱性対策として、リクエストにおける「..」のようなパストラバーサルに用いられる文字列の有無をチェックする処理が含まれています(図-2)。
パストラバーサルとは、本来アクセスしないであろうディレクトリやファイルに対して、相対パスを用いることでアクセスする攻撃手法です。 ディレクトリトラバーサルとも呼ばれます。 例えば、以下のURLは、いずれも同じファイルへアクセスを行います。
1 2 |
http://www.example.com/mypage/index.html http://www.example.com/mypage/edit/profile/../../index.html |
これは、「..」という文字列が「1つ上のディレクトリ」を示すためです。
HTTPサーバではインターネット上に公開するディレクトリ(Apache HTTP ServerではDocumentRootと呼びます)が設定されており、そのディレクトリに含まれないパスには通常はアクセスできません。しかし、パストラバーサルの脆弱性を持つHTTPサーバに対して以下のようなリクエストを送信すると、DocumentRootより上位のディレクトリへアクセスすることが可能となります。
1 |
http://www.example.com/../../../secretfile |
OSのファイルシステムにアクセスが可能となるため、本来はアクセスされる想定ではない、サーバの設定や機密情報が含まれるファイルがインターネットから奪取される可能性があります。
Apache HTTP Server 2.4.49 では、先ほど紹介したように、「..」をチェックする処理が含まれるため、上記の例は対策されていました。 しかし、このチェック処理では、「.」をパーセントエンコードした文字列に対する考慮漏れがありました。これにより、パーセントエンコーディングされた「.」である、「%2E」や「%2e」が用いられた場合、パストラバーサルが可能でした。
Apache HTTP Server 2.4.50では、「%2E」や「%2e」に対してもチェックが行われるよう処理が変更されました(図-3)。
この変更の結果、「%2E」や「%2e」を用いたパストラバーサルに対して「400 Bad Request」を応答するようになっていました。
CVE-2021-42013 の発見
SOCでは、アナリストが検証すべきであると判断した脆弱性に対して、検証及び報告する業務が存在します。CVE-2021-41773を検証した際に、パスに対する評価パターンが固定であることが目に止まりました。 そのため、「%2E」や「%2e」以外の文字列に対しても対策が機能するか、評価しました。 その結果、パーセントエンコーディングが再帰的に評価されることを確認しました。例えば「%%35%66」は「%5f」へ変換され、「_」として解釈されます。これに基づき攻撃コードの作成と、Apache HTTP Server 2.4.50での検証に移りました。
その後、SOCアナリスト複数名の環境で事象の再現を確認できたため、Apache Security Teamへ連絡しました。 修正版として公開されたApache HTTP Server 2.4.51では、筆者が作成した攻撃手法が動作しないことを確認しています。
CVE-2021-42013 への対策
既にApache HTTP Server 2.4.49又は2.4.50を使用されている場合は、2.4.51へのバージョンアップを推奨します。 バージョンアップできない場合は、Apacheのアドバイザリにも記載がある通り、DocumentRoot外のディレクトリが「require all denied」となるようApache HTTP Serverを設定することでも回避できます。しかし、設定ファイルの考慮漏れによる脆弱性が発生する可能性もあるため、バージョンアップすることを推奨します。