
ماسح ضوئي لثغرة CVE-2024-40725 في خادم Apache HTTP الخاص بكشف الكود المصدري؛ يفحص المسارات المباشرة ومسارات الطلبات الفرعية، ويتعرّف على الإصدارات المتأثرة، ويُخرج تقارير JSON للتكامل المستمر/النشر المستمر (CI/CD).
أداة كشف مبنية على بايثون لثغرة CVE-2024-40725، وهي ثغرة كشف عن الكود المصدري في خادم Apache HTTP Server تؤثر على الإصدارات 2.4.0 و2.4.61.
إشعار قانوني: شغّل هذا الماسح فقط ضد الخوادم التي تملكها أو لديك إذن كتابي صريح لاختبارها. قد يشكّل الاستخدام غير المصرح به انتهاكًا لقوانين الاحتيال الحاسوبي (مثل CFAA أو قانون إساءة استخدام الحواسيب).
CVE-2024-40725 هي انتكاسة في خط أنابيب الطلبات الداخلي في Apache، أُدخلت في الإصدار 2.4.0 (كإصلاح غير مكتمل لثغرة CVE-2024-39884). عندما يتم تكوين الخادم باستخدام توجيهات AddType القديمة (مثل AddType application/x-httpd-php .php)، يتم إسقاط تعيين المعالج الداخلي في Apache بصمت أثناء معالجة الطلب الفرعي (الذي يتم تشغيله بواسطة DirectoryIndex أو mod_rewrite أو mod_dir).
نتيجةً لذلك، لا يتم استدعاء مُفسِّر نصوص PHP أبدًا. بدلاً من ذلك، يفتح default-handler المدمج في Apache الملف من القرص ويرسل وحدات البايت الخام مباشرةً إلى العميل، بما في ذلك بيانات اعتماد قاعدة البيانات ومفاتيح API ومنطق التطبيق.
الإصدارات المتأثرة: Apache httpd 2.4.0 – 2.4.61
تم الإصلاح في: Apache httpd 2.4.62+
requestspip 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، مما يولّد طلبًا فرعيًا. هذا هو مسار الكود المحدد الذي يتم فيه إسقاط r->handler إلى NULL في Apache 2.4.0–2.4.61.
الفحص 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 | تم العثور على مسار واحد أو أكثر معرض للثغرة |
تجعل أكواد الخروج الماسح مناسبًا للاستخدام في خطوط 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استبدل أي توجيهات AddType تُستخدم لتنفيذ PHP:
# ❌ 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 | الإصدار | الوصف |
|---|
| العلم | النوع | الافتراضي | الوصف |
|---|
--target | URL | (مطلوب) | عنوان URL الأساسي لخادم Apache المراد اختباره |
--paths | PATH [PATH ...] | قائمة مدمجة | مسار PHP واحد أو أكثر لفحصه مباشرةً |
--wordlist | FILE | — | المسار إلى ملف قائمة كلمات (مسار واحد في كل سطر) |
--no-directory-check | flag | off | تخطي فحص الطلب الفرعي/فهرس الدليل (الفحص B) |
--timeout | int (seconds) | 10 | المهلة الزمنية لكل طلب |
--delay | float (seconds) | 0.0 | التأخير بين الطلبات (تحديد معدل الطلبات) |
--no-verify-ssl | flag | off | تعطيل التحقق من شهادة SSL |
--output | FILE | — | كتابة تقرير JSON كامل إلى هذا الملف |
--verbose | flag | off | تفعيل مخرجات التصحيح |
| CVE-2024-39884 | 2.4.0 | الانتكاسة الأصلية لكشف الكود المصدري |
| CVE-2024-40725 | 2.4.61 | إصلاح غير مكتمل — نفس فئة الخلل |
| CVE-2024-40898 | 2.4.61 | ثغرة SSRF منفصلة في mod_rewrite (نظام Windows فقط) |