CVE-2024-40725 を検出するPythonベースのツールです。これはApache HTTP Serverのソースコード開示脆弱性で、バージョン 2.4.0 および 2.4.61 に影響します。
法的注意: このスキャナーは、自分が所有しているサーバー、またはテストするための明示的な書面による許可を得ているサーバーに対してのみ実行してください。無断使用は、コンピュータ不正行為に関する法律(例: CFAA、Computer Misuse Act)に違反する可能性があります。
CVE-2024-40725 は、Apache の内部リクエストパイプラインにおけるリグレッションで、バージョン 2.4.0 で導入されました(CVE-2024-39884 の不完全な修正として)。サーバーがレガシーな AddType ディレクティブ(例: AddType application/x-httpd-php .php)を使用して構成されている場合、サブリクエスト処理中(DirectoryIndex、mod_rewrite、または mod_dir によってトリガーされる)に Apache の内部ハンドラー割り当てが黙って破棄されます。
その結果、PHP スクリプトインタープリターが呼び出されることはありません。代わりに、Apache の組み込み default-handler がディスクからファイルを開き、データベース認証情報、APIキー、アプリケーションロジックを含む生のバイト列をクライアントに直接ストリーム送信します。
影響を受けるバージョン: Apache httpd 2.4.0 – 2.4.61
修正済みバージョン: Apache httpd 2.4.62+
requests ライブラリpip install requests
# Clone or download the scanner
curl -O https://your-host/cve_2024_40725_scanner.py
# Make executable (optional)
chmod +x cve_2024_40725_scanner.py
python3 cve_2024_40725_scanner.py --target <URL> [OPTIONS]
| Flag | Type | Default | Description |
|---|---|---|---|
--target | URL | (必須) | テスト対象のApacheサーバーのベースURL |
--paths | PATH [PATH ...] | 組み込みリスト | 直接プローブする1つ以上のPHPパス |
--wordlist | FILE | — | ワードリストファイルへのパス(1行に1パス) |
--no-directory-check | flag | オフ | サブリクエスト/ディレクトリインデックスのプローブ(プローブB)をスキップ |
--timeout | int (seconds) | 10 | リクエストごとのタイムアウト |
--delay | float (seconds) | 0.0 | リクエスト間の遅延(レート制限) |
--no-verify-ssl | flag | オフ | SSL証明書の検証を無効化 |
--output | FILE | — | 完全なJSONレポートをこのファイルに書き込む |
--verbose | flag | オフ | デバッグ出力を有効にする |
# Quickstart: scan localhost with built-in default paths
python3 cve_2024_40725_scanner.py --target http://localhost
# Scan specific paths
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--paths /index.php /admin/config.php /wp-config.php
# Use a wordlist file
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt
# Combine wordlist + extra inline paths (merged, deduplicated)
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt \
--paths /extra/secret.php
# HTTPS with self-signed certificate
python3 cve_2024_40725_scanner.py \
--target https://myserver.local \
--no-verify-ssl
# Polite scan with 1 second delay and JSON report
python3 cve_2024_40725_scanner.py \
--target http://myserver.local \
--wordlist php_paths.txt \
--delay 1.0 \
--output results.json \
--verbose
# CI/CD usage (exit code 1 = vulnerable, 0 = clean)
python3 cve_2024_40725_scanner.py --target http://localhost || echo "VULNERABLE"
1行に1パスを指定します。# で始まる行はコメントとして扱われスキップされます。空行は無視されます。先頭のスラッシュは自動的に正規化されます。
# Common PHP entrypoints
/index.php
/info.php
/phpinfo.php
# Admin panels
/admin/index.php
/admin/config.php
# CMS files
/wp-config.php
/wp-login.php
/configuration.php
# API internals
/api/v1/status.php
スキャナーはパスごとに2つのプローブを実行します:
GET /index.php HTTP/1.1
PHPファイルを直接リクエストした場合に、その生のソースコードが返されるかどうかを確認します。直接リクエストでも AddType が機能しない誤設定のサーバーで影響を受けます。
GET / HTTP/1.1
ファイル自体ではなく親ディレクトリをリクエストします。Apacheは内部で DirectoryIndex → index.php を解決し、サブリクエストを生成します。これがApache 2.4.0–2.4.61で r->handler が NULL に落とされる正確なコードパスです。
プローブBはより重要で現実的なテストです。多くのサーバーは直接ファイルパスではなく、サブリクエストパスを通じてのみ脆弱です。
スキャナーはレスポンス本文にPHPソースコードのシグネチャが含まれているかどうかをチェックします:
<?php<?PHP<?=一致が見つかった場合、レスポンス本文全体を出力せずに、リーク位置の周囲150文字のスニペットを抽出してトリアージに使用します。
Server: レスポンスヘッダーを読み取ってApacheのバージョンを検出します。リークが確認される前でも、バージョン 2.4.0 または 2.4.61 を報告するサーバーにフラグを立てます。
注: 堅牢化されたサーバーは
Server:ヘッダー(ServerTokens Prod)を抑制する場合があります。スキャナーはそれに関係なくすべてのプローブを実行します。
============================================================
CVE-2024-40725 -- Apache Source Code Disclosure Scanner
============================================================
Target : http://localhost
Paths : 6
Time : 2024-08-01T12:00:00
[*] Fingerprinting server: http://localhost
Server Header : Apache/2.4.61 (Debian)
Apache Version: 2.4.61
[!] Version is in vulnerable range (2.4.0 - 2.4.61)
[*] Testing 6 path(s)...
--- /index.php
Direct (HTTP 200): OK
Subreq (HTTP 200): LEAKED
[!] VULNERABLE via: subrequest (directory index)
Leaked snippet: '<?php\n$db_pass = "supersecretpassword";'
--- /info.php
Direct (HTTP 404): OK
Subreq (HTTP 404): OK
[+] Safe
============================================================
SCAN SUMMARY
============================================================
Target : http://localhost
Apache Version : 2.4.61
Paths Tested : 6
Vulnerable Paths : 1
Safe Paths : 5
[!] RESULT: VULNERABLE
Vulnerable paths:
* /index.php (trigger: subrequest (directory index))
Remediation:
1. Upgrade to Apache httpd >= 2.4.62
2. Replace 'AddType' with 'SetHandler' in <FilesMatch> blocks
============================================================
--output results.json){
"target": "http://localhost",
"scan_time": "2024-08-01T12:00:00",
"apache_version": "2.4.61",
"apache_in_range": true,
"paths_tested": 6,
"vulnerable_paths": [
{
"path": "/index.php",
"direct_url": "http://localhost/index.php",
"directory_url": "http://localhost/",
"direct_status": 200,
"direct_leaked": false,
"direct_snippet": null,
"directory_status": 200,
"directory_leaked": true,
"directory_snippet": "<?php\n$db_pass = \"supersecretpassword\";",
"server_header": "Apache/2.4.61 (Debian)",
"vulnerable": true,
"trigger": "subrequest (directory index)"
}
],
"safe_paths": [...]
}
| コード | 意味 |
|---|---|
0 | 脆弱なパスは検出されませんでした |
1 | 1つ以上の脆弱なパスが見つかりました |
終了コードにより、このスキャナーはCI/CDパイプラインや自動化されたインフラストラクチャ監査での使用に適しています。
# Debian / Ubuntu
sudo apt update && sudo apt install apache2
# RHEL / CentOS / AlmaLinux
sudo dnf update httpd
# Verify version (must be >= 2.4.62)
apache2 -v
AddType を SetHandler に置き換えるPHPの実行に使用される AddType ディレクティブをすべて置き換えます:
# ❌ Vulnerable Configs
AddType application/x-httpd-php .php
# ✅ Safe Configs
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# VULNERABLE
<VirtualHost *:80>
DocumentRoot /var/www/html
AddType application/x-httpd-php .php # ← triggers CVE
DirectoryIndex index.php
</VirtualHost>
# SAFE
<VirtualHost *:80>
DocumentRoot /var/www/html
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
DirectoryIndex index.php
</VirtualHost>
| CVE | バージョン | 説明 |
|---|---|---|
| CVE-2024-39884 | 2.4.0 | 元のソースコード開示リグレッション |
| CVE-2024-40725 | 2.4.61 | 不完全な修正 — 同種のバグ |
| CVE-2024-40898 | 2.4.61 | mod_rewrite における別のSSRF(Windowsのみ) |