
CVE-2021-41773 | Apache HTTP Server 2.4.49 は、パストラバーサルおよびリモートコード実行攻撃に対して脆弱です。
CVE-2021-41773 National Vulnerability Database(NVD)のCVE-2021-41773によると、Apache HTTP Server 2.4.49はパストラバーサルおよびリモートコード実行攻撃に対して脆弱です。
パストラバーサル脆弱性は、パス正規化(URLパスから不要または危険な部分を削除するため)のために追加された新しいコード変更によって導入されましたが、パストラバーサル文字「ドットドットスラッシュ(../)」のさまざまなエンコーディング手法を検出するには不十分でした。 パストラバーサル攻撃を防ぐために、要求されたURIからURLエンコードされた値を解決する役割を担う正規化関数は、Unicode値を一度に1つずつ解決していました。そのため、2番目のドットを%2eとしてURLエンコードすると、ロジックは%2eをドットとして認識できず、デコードしないため、文字../が.%2e/に変換され、チェックをバイパスされます。
パストラバーサルチェックのバイパスに加えて、Apache HTTPサーバーが脆弱であるためには、HTTPサーバーの設定にサーバー全体のファイルシステムに対するディレクトリディレクティブが「Require all granted」として含まれているか、またはディレクトリディレクティブが設定ファイルから完全に欠落している必要があります。したがって、ドットチェックを.%2eとしてバイパスし、不適切に設定されたディレクトリディレクティブと連鎖させることで、攻撃者は脆弱なサーバーのファイルシステムからpasswdなどの任意のファイルを読み取ることができます。
CVE-2021-41773は当初、パストラバーサルおよびファイル開示の脆弱性として文書化されていましたが、追加の調査により、Apache HTTPサーバーでmod_cgiモジュールが有効になっている場合に、この脆弱性をさらに悪用してリモートコード実行を行うことができると結論付けられました。これにより、攻撃者はパストラバーサル脆弱性を利用して、HTTP POSTリクエストを使用してシステム上の任意のバイナリを呼び出すことができます。
モジュールは、Apache HTTPサーバーでは設定ファイル内の上記の行をコメントアウトすることにより無効になっています。したがって、mod_cgiが有効で、「Require all granted」設定がファイルシステムのディレクトリディレクティブに適用されている場合、攻撃者はApacheサーバー上でリモートにコマンドを実行できます。
#再現方法
docker run -dit --name Apache -p 83:80 b0x
#コンテナにログインして以下を実行
cp /bin/sh /usr/bin/
ruby CVE-2021-41773.rb
# c c wWw wWw -2021-41773
# (OO) (O) (O) wWw
# ,'.--.) ( / ) (O)_
# / //_|_ / / .' __)
# | ___ / / ( _)
# '. ) `--' / `.__)
# `-.' `-..-'
# Author:Habib
# ruby CVE-2021-41773.rb target_url dir command
# ruby CVE-2021-41773.rb http://localhost bin/sh whoami
ruby CVE-2121-41773.rb http://localhost:83
Target: http://localhost:83 is vulnerable
Command:
ruby CVE-2121-41773.rb http://localhost:83 bin/sh id Target: http://localhost:83 is vulnerable
Command: uid=1(daemon) gid=1(daemon) groups=1(daemon)