
ファイルシステム境界を検証する前にユーザー入力をデコードすると、ディレクトリトラバーサルやローカルファイルインクルージョン(LFI)につながることを示す、自己完結型の小さな FastAPI ラボです。Apache HTTP Server の脆弱性 CVE-2021-41773 をモデルにしています。
%2e)およびダブルエンコード(%252e)によるバイパスを実演しますcurl でテストするための手軽なペイロードが含まれていますuvicorn でローカル実行できますランタイムの依存関係をインストール:
pip install fastapi uvicorn
python -m venv venv
.\venv\Scripts\activate
pip install fastapi uvicorn
uvicorn vulnerable_app:app --port 8011
ブラウザで http://127.0.0.1:8011/ を開いてください — ルートエンドポイントには一般的なペイロードと注記が表示されます。
修正を確認するには、脆弱なサーバーを停止してパッチ済みサーバーを起動します:
uvicorn patched_app:app --port 8011
curl --path-as-is http://localhost:8011/icons/test.txt
curl --path-as-is "http://localhost:8011/icons/.%2e/secret.txt"
curl --path-as-is "http://localhost:8011/icons/.%252e/secret.txt"
脆弱なサーバーに対しては、これらのペイロードが secret.txt を返す可能性があります。パッチ済みサーバーに対しては、拒否されるはずです(HTTP 403)。
os.path.realpath() を使用して正規のファイルシステムパスを解決します。webroot ディレクトリ内にあることを強制し、そうでなければ拒否します。これにより、デコード → 正規化 → 認可という正しい順序が強制されます。
このリポジトリはローカルでの教育用途に限ります。脆弱なサーバーを公開ネットワークに公開しないでください。
MIT License
Kunal Khandelwal — セキュリティ研究者、アプリケーションセキュリティ