
सीवीई-2024-40725 अपाचे HTTP सर्वर स्रोत-कोड प्रकटीकरण के लिए स्कैनर; प्रत्यक्ष और सबरिक्वेस्ट पथों की जांच करता है, प्रभावित संस्करणों की पहचान करता है, और CI/CD के लिए JSON रिपोर्ट आउटपुट करता है।
CVE-2024-40725 के लिए एक Python-आधारित डिटेक्शन टूल, जो Apache HTTP सर्वर में सोर्स कोड डिस्क्लोज़र (source code disclosure) दोष है और 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) के साथ कॉन्फ़िगर किया जाता है, तो सबरिक्वेस्ट प्रोसेसिंग के दौरान Apache का आंतरिक हैंडलर असाइनमेंट चुपचाप हटा दिया जाता है (DirectoryIndex, mod_rewrite, या mod_dir द्वारा ट्रिगर)।
परिणामस्वरूप, 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]
# 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"
प्रति पंक्ति एक पाथ। # से शुरू होने वाली पंक्तियाँ कमेंट मानी जाती हैं और छोड़ दी जाती हैं। खाली पंक्तियाँ अनदेखी की जाती हैं। आरंभिक स्लैश अपने-आप सामान्य हो जाते हैं।
# 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
स्कैनर प्रति पाथ दो प्रोब चलाता है:
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-अक्षर का स्निपेट निकालता है ताकि पूरी रिस्पॉन्स बॉडी प्रिंट किए बिना ट्राइएज किया जा सके।
Apache संस्करण का पता लगाने के लिए Server: रिस्पॉन्स हेडर पढ़ता है। किसी पुष्ट लीक से पहले ही 2.4.0 या 2.4.61 संस्करण बताने वाले सर्वरों को फ़्लैग करता है।
नोट: कठोर (hardened) सर्वर
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": [...]
}
| Code | Meaning |
|---|---|
0 | कोई असुरक्षित पाथ नहीं मिला |
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 | Version | Description |
|---|---|---|
| CVE-2024-39884 |
| Flag | Type | Default | Description |
|---|
--target | URL | (required) | परीक्षण के लिए Apache सर्वर का आधार URL |
--paths | PATH [PATH ...] | built-in list | एक या अधिक PHP पाथ जिन्हें सीधे प्रोब किया जाए |
--wordlist | FILE | — | वर्डलिस्ट फ़ाइल का पाथ (प्रति पंक्ति एक पाथ) |
--no-directory-check | flag | off | सबरिक्वेस्ट/डायरेक्टरी-इंडेक्स प्रोब (Probe B) छोड़ें |
--timeout | int (seconds) | 10 | प्रति-रिक्वेस्ट टाइमआउट |
--delay | float (seconds) | 0.0 | रिक्वेस्ट के बीच देरी (रेट लिमिटिंग) |
--no-verify-ssl | flag | off | SSL प्रमाणपत्र सत्यापन अक्षम करें |
--output | FILE | — | पूरी JSON रिपोर्ट इस फ़ाइल में लिखें |
--verbose | flag | off | डिबग आउटपुट सक्षम करें |
| 2.4.0 |
| मूल सोर्स डिस्क्लोज़र रिग्रेशन |
| CVE-2024-40725 | 2.4.61 | अधूरा फिक्स — उसी श्रेणी की बग |
| CVE-2024-40898 | 2.4.61 | mod_rewrite में अलग SSRF (केवल Windows) |