查看: 58|回复: 0

CVE-2025-67442 分析报告

433

主题

947

回帖

3266万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32662992

推广达人宣传达人突出贡献优秀版主论坛元老

QQ

CVE-2025-67442 分析报告:CE 6.2.0-4 存在性评估

分析日期:2026-05-15
分析版本:EVE-NG CE 6.2.0-4
分析方法:源码分析 + 三步过滤法(情境/链路/场景)


1. CVE 概述

项目 内容
CVE ID CVE-2025-67442
原始报告 XunMInt/cve
影响版本 EVE-NG 6.4.0-13-PRO(专业版)
CVSS 3.1 7.6 HIGH (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L)
CWE CWE-22 — Path Traversal
漏洞类型 目录遍历(/api/export 接口)

漏洞描述

/api/export 接口在处理用户提交的文件路径参数时,未对 .. 路径穿越序列做过滤。攻击者构造包含 ../../ 的 JSON 请求,可读取任意系统文件并打包到 ZIP 导出。


2. 源码验证

2.1 路由入口

api.php:1236

$app -> post('/api/export', function() use ($app, $db) {
    // ...
    $p = json_decode(json_encode($event), True);
    $output = apiExportLabs($p);
});

2.2 漏洞函数

api_labs.php:201-278apiExportLabs()

path 参数有校验(安全)

api_labs.php:208

if (checkFolder(BASE_LAB.$p['path']) !== 0) {
    // Path is not valid → 返回 400
}

functions.php:88-92checkFolder() 正则:

function checkFolder($s) {
    if (preg_match('/^\/[\/A-Za-z0-9_\s-]*$/', $s) && is_dir($s)) {
        return 0;
    }
    // ...
}

path 参数被正则保护,., .. 字符被禁止

element 参数无校验(漏洞)

api_labs.php:224-258

foreach ($p as $key => $element) {
    if ($key === 'path') {
        continue;  // 跳过 path,处理其他参数
    }
  
    $relement = substr($element, strlen($p['path']));
    if ($relement[0] != '/') {
        $relement = '/'.$relement;
    }
  
    // ❌ 未对 $relement 做任何过滤,直接拼接到 is_file / zip 命令
    if (is_file(BASE_LAB.$p['path'].$relement)) {
        $cmd = 'zip '.$export_file.' ".' .$relement.'"';
        exec($cmd, $o, $rc);
    }
}

element 参数(如 "1": "/../../../../../etc/passwd")没有经过 checkFolder() 或任何 .. 过滤

2.3 调用链

POST /api/export
  → api.php:1236 路由
    → api_labs.php:201 apiExportLabs($p)
      → checkFolder(BASE_LAB.$p['path'])     ← path 参数受保护
      → foreach: $relement = ...               ← element 参数不受保护
        → is_file(BASE_LAB.$path.$relement)    ← 路径穿越
          → exec('zip ... ".'.$relement.'"')    ← 打包任意文件

3. 三步过滤法评估(适用于 CE 6.2.0-4)

第一层:情境过滤 — 多用户模型

检查项 结果
CVE 原始攻击者角色 regular user(PRO 多用户)
CE 用户模型 单用户(只有 admin)
CE 中是否有权限边界可跨越? ❌ 无 — admin = root
结论 CE 单用户下无提权路径

第二层:链路过滤 — 前端盲区

检查项 结果
前端是否调用了此 API? actions.js:1695, mainCtrl.js:474
前端是否允许用户手动输入路径? ❌ 用 data-path 属性,非自由输入
API 是否可直接 curl 访问? ✅ 带认证 cookie 即可
前端是否阻止 .. 无此需求(data-path 不含 ..
结论 API 层可绕过前端,但 CE 中攻击者已是 admin

第三层:场景过滤 — 功能正确性

检查项 结果
导出系统文件(如 /etc/passwd)是否是用户意图? ❌ 不是
这是否是代码缺陷? ✅ 是(缺少输入校验)
admin 能否通过漏洞读到本不可读的文件? ❌ 不能 — admin 已有完全文件访问权限
结论 是代码质量缺陷,非 CE 安全漏洞

4. 最终结论

维度 结论
漏洞代码是否存在? 存在api_labs.php:235-237element 参数无 .. 过滤
CE 中能否从 Web UI POC? ✅ 可行(curl + cookie)
CE 中是否构成安全风险? ❌ 否
原因 CE 单用户 admin = root,无权限边界可跨越

与之前 30→0 审计的关系

本次分析与之前安全审计结论一致:CE 6.2.0-4 中的代码缺陷表现为 代码质量缺陷(缺少输入校验),但 CE 单用户模型下不存在可被有效利用的安全攻击路径

修复建议(如需)

若 CE 未来支持多用户,需在 apiExportLabs() 中添加 $relement.. 过滤:

// 在 api_labs.php:230 之后添加
if (strpos($relement, '..') !== false) {
    continue;  // 跳过含路径穿越的参数
}

或使用 realpath() 校验最终路径是否在 BASE_LAB 范围内。


5. 证据索引

文件 行号 说明
api.php 1236 /api/export 路由注册
api_labs.php 201-278 apiExportLabs() 函数完整实现
api_labs.php 208 checkFolder() 保护 path 参数
api_labs.php 235-237 element 参数无校验 → 路径穿越
functions.php 88-92 checkFolder() 正则(禁止 .
actions.js 1695-1700 前端调用 /api/export(data-path)
functions.js 466-496 前端 exportObjects() 封装
不忘初心
回复

使用道具 举报

本版积分规则

Copyright   ©2015-2026  EmulatedLab  Powered by Discuz!©   ( 浙ICP备2021010423号-1 )
快速回复 返回列表 返回顶部