Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
lighttpd-win32-dotdot-space — lighttpd 1.4.85 - High - Remote - Path - native Win32 GET /..%20/ がドキュメントルート外を読み取る | Kitploit
ツール/GitHubGitHub/abraxas/lighttpd-win32-dotdot-space
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストラボと実践
GitHubabraxas/lighttpd-win32-dotdot-space

lighttpd-win32-dotdot-space

lighttpd 1.4.85 - High - Remote - Path - native Win32 GET /..%20/ がドキュメントルート外を読み取る

リポジトリを見る
2日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - lighttpd-win32-dotdot-space

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  lighttpd-win32-dotdot-space

lighttpd-win32-dotdot-space

クラス: ファイル読み取り 到達性: リモート

lighttpd 1.4.85 (4852959) - lighttpd

ネイティブ _WIN32 の staticfile は、buffer_path_simplify の後に document-root と rel_path を結合する。Simplify は3バイト目が / の場合にのみ ../ を畳み込む。http_response_prepare_physical はパス全体のみから末尾のスペースとドットを除去する。したがって GET /..%20/windows/win.ini は /.. /windows/win.ini のまま残る。\\?\ プレフィックスなしの _wstati64 / _wopen は、Win32 にコンポーネントごとにスペースを除去させ、そのセグメントを .. として扱わせる。

ネイティブ Windows 上の lighttpd に対する未認証の GET/HEAD は、ワーカーアカウントが開ける document-root 外の通常ファイルを読み取る。 Unix/Linux はこの残存脆弱性には該当しない。ファイル読み取りであり、RCE ではない。

このラボは、それらのピン留めされた関数のガジェットである。実際のネイティブ Win32 ワーカーではない。最終行は how=gadget を使用する。

IDCVE 未割当
クラスファイル読み取り (パストラバーサル、ネイティブ Win32 ..%20/)
到達性リモート (未認証 GET/HEAD)
CWECWE-22
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
製品lighttpd1.4
影響を受けるバージョン1.4.85 (4852959e67ef51ea68084984400d3264b854c97d) ネイティブ _WIN32
認証なし。デフォルトの mod_staticfile
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ、how=gadget

攻撃者ができること

ネイティブ Windows の lighttpd が静的ファイルを配信している必要がある。ワーカーアカウントが対象の通常ファイルを開ける必要がある。

権限メソッド / シンクラボで実証済みか推測か
document-root 外のファイルを読み取る未認証 GET /..%20/<name>ラボで実証済み (ガジェット)。HTTP 200 のボディが親ディレクトリのシークレット
非最終 .. コンポーネント上の他の末尾 ASCII スペース/ドットに対する同クラスurl-decode 後に simplify が .. を保持%20 についてはラボで実証済み。他の末尾スペース/ドットについては推測
同じパスへの HEADstaticfile HEAD推測。ラボでは GET を使用
ネガティブ: 実際の /../buffer_path_simplify が ../ を畳み込むラボで実証済み。404、簡略化された /windows/win.ini、witness なし
ネガティブ: 簡略化されていない物理文字列に対する Unix POSIX openopen("/srv/htdocs/.. /windows/win.ini")ラボで実証済み。ENOENT

この残存脆弱性でクローズ済み: Unix/Linux staticfile、Cygwin (同じ strip、POSIX open)、1.4.85 %5C parseopt、CVE-2018-19052 alias、CVE-2014-2324 Host。RCE ではない。書き込みでもない。

発見の経緯

タグ lighttpd-1.4.85 をピン留めした。20回の探索。デフォルトの Unix/Linux staticfile、FastCGI、proxy、TLS、auth、HTTP/2、alias/rewrite: この基準ではいずれも該当なし。1.4.81-1.4.85 のパーサーウェーブはすでに trailers、CGI ヘッダー競合、不正なバックエンド Content-Length をクローズしていた。

buffer_path_simplify は walk[2] == '/' の場合にのみ ../ を畳み込む。http_response_prepare_physical (src/response.c 334-360) の WIN32 strip はパス全体の末尾に対する処理である。_wstati64 / _wopen (src/fs_win32.c 24-77) は \\?\ なしで UTF-16 を渡すため、Win32 はコンポーネントごとに末尾スペースを除去し、.. が .. になる。物理的な結合は doc_root + rel_path であり、stat 後のベースディレクトリチェックはない。

すでに記録済みの誤った方向: Unix の ENOENT を「バグではない」と扱うこと (これはネガティブコントロールである)、Cygwin をネイティブ Win32 と呼ぶこと、1.4.85 %5C がこの残存脆弱性だと主張すること、ファイル読み取りを RCE に誇張すること。茶番: リバースシェル。オラクルは document-root の親からの 200 ボディである。

ラボ

python3 lighttpd-win32-dotdot-space-Abraxas-Labs.py

または

cd lab
./run.sh

このラボは、buffer_urldecode_path、buffer_path_simplify (Win32 '\\' マップ)、response.c の末尾 strip、および \\?\ なしの _wstati64 を忠実に再現したガジェットである。Unix POSIX open はネガティブコントロールである。Win32 の解決は、同じコンポーネントごとの末尾スペース strip、次に . / ..、次に解決されたパスに対する POSIX open として実装されている。ループバック HTTP 127.0.0.1:19400。

  1. GET /index.html -> 200 public-index、witness なし。
  2. GET /../windows/win.ini -> 404、簡略化された /windows/win.ini。
  3. GET /..%20/windows/win.ini -> デコードされた /.. /windows/win.ini、simplify がスペースを保持、Unix ENOENT、Win32 が /srv/windows/win.ini に解決、200 witness。
SUCCESS lighttpd-win32-dotdot-space how=gadget win32-get=200 unix-open=enoent simplify-kept-dotdot-space=yes LIGHTTPD-WIN32-DOTDOT-SPACE-WITNESS

修正

simplify の前にパスコンポーネントごとに末尾のスペースとドットを除去するか、Win32 の open に \\?\ を付け、document-root 配下に留まらない物理パスを拒否する。

参考資料

  • github.com/lighttpd/lighttpd1.4 タグ lighttpd-1.4.85 (4852959e67ef51ea68084984400d3264b854c97d)
  • src/buffer.c · src/response.c · src/fs_win32.c
  • 近傍でパッチ済み (この残存脆弱性ではない): CVE-2025-12642 trailers · 1.4.85 %5C parseopt · CVE-2018-19052 alias · CVE-2014-2324 Host
  • CWE-22

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。

ツールをダウンロード