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

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

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

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

工具目录

分类

查看所有分类
Loading categories
drupal-openai-provider-ssrf-cve-2026-13233 — CVE-2026-13233(Drupal OpenAI Provider,SA-CONTRIB-2026-053):响应 URL 导致的 SSRF / 本地文件读取。来源为不受信任的上游(服务端),而非提示词。包含安全复现器 + 检测规则。已在 1.1.1/1.2.2 版本中修复。 | Kitploit
工具/GitHubGitHub/kuninogu/drupal-openai-provider-ssrf-cve-2026-13233
漏洞分析Web安全学习与教育
GitHubkuninogu/drupal-openai-provider-ssrf-cve-2026-13233

drupal-openai-provider-ssrf-cve-2026-13233

CVE-2026-13233(Drupal OpenAI Provider,SA-CONTRIB-2026-053):响应 URL 导致的 SSRF / 本地文件读取。来源为不受信任的上游(服务端),而非提示词。包含安全复现器 + 检测规则。已在 1.1.1/1.2.2 版本中修复。

查看仓库

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
1个月前尚未审核
分享

Drupal OpenAI Provider — 通过响应 URL 进行的 SSRF / 本地文件读取(CVE-2026-13233)

不可信的上游:该提供者获取了其响应所指示的 URL。 Drupal OpenAI Provider(ai_provider_openai)· SSRF(CWE-918)· CVE-2026-13233 · SA-CONTRIB-2026-053

状态: 协调披露 已完成(2026-07-10)。 已私下报告给 Drupal 安全团队,已修复,并以 CVE-2026-13233 / 公告 SA-CONTRIB-2026-053 发布(评级为 中度严重)。作者被列为 发现者与修复开发者。

针对 AI“连接点”上典型的授权 / 输入验证缺陷的研究:AI 图像生成提供者使用没有协议白名单的通用函数获取了上游 API 响应中包含的 URL。在配置的上游不是受信任默认值(自带端点 / 代理 / 自托管网关 / 受损中继)的部署中,响应可能将服务器指向 file:// 或内部地址。

到达风险点的不可信输入是上游响应 URL——而不是用户的提示。

  • 类别(已发布): SSRF(CWE-918)。该 SSRF 包含 file:// 本地文件读取;作者的内部分析还将其映射到 CWE-73 / CWE-441。
  • 严重性: Drupal 中度严重(SA-CONTRIB-2026-053)——位于 Drupal 评级体系的中段,约等于 CVSS 中危;不是 CVSS 严重 / 高危。 作者在披露前的自我评估:下限 3.1 / 有条件 5.3(中危);先前 6.5 / 7.4 的评估已撤回,中段评级也印证了这一点。
  • 受影响: Drupal OpenAI Provider(ai_provider_openai)< 1.1.1 及 1.2.0–1.2.1(审计版本 1.2.1),基于 Drupal core 11.2
  • 修复版本: 1.1.1 / 1.2.2 · CVE: CVE-2026-13233 · 公告: https://www.drupal.org/sa-contrib-2026-053

已证实(已确认)与未证实(未验证)

所有验证均在自有、网络隔离的沙箱中针对模拟上游进行。从未调用真实 OpenAI API。泄漏 oracle 仅为合成数据。

已确认(动态论证):

  • 非管理员触发 → 服务端读取由上游选择的本地文件(通过每次运行唯一的标记证明任意路径;返回的响应体与标记逐字节相等;标记仅存在于应用容器中,模拟上游中不存在——排除了“模拟上游返回了其自有文件”的可能)。
  • settings.php 的读取通过 sha256 字节匹配(35,182 字节)得到确认——内容从未被打印;因此数据库凭证属于影响范围。
  • 从没有公开端口的服务检索内部 HTTP SSRF 响应(内部令牌逐字节匹配)。
  • 授权边界:同一账户在管理员配置路由上获得 403(200 与 403 对比)。
  • 通过管理员配置的字段小部件“Generate”的真实流程,由没有任何 AI 权限的编辑者实现合法 HTTP 可达性。

未验证(明确不主张):

  • 云元数据(IMDS)凭证窃取——从同一风险点在机制上可行,但未尝试。
  • 基类孪生问题的动态可达性——在此提供者上被覆写(对当前目标是死代码);记为同根因变体以移植修复,而非单独主张。
  • 被动的“仅保存”自动化触发——已测试,结果为否定。“仅保存”不会触发它。
  • 存储型 XSS(内容类型混淆)和语音转文本并发竞争——是独立的线索,未经证实。

不受影响: 默认的 api.openai.com(通过 TLS)。host 设置由管理员 / 配置同步 / 部署控制——运行时的非管理员攻击者无法更改它。


根因与修复方向(摘要)

响应 URL 被传递给了尊重每个已注册 PHP 流包装器(file、php、http、data、phar 等)的通用抓取函数。response_format 默认为 url,因此易受攻击的分支就是默认路径。file:// 是 PHP 的默认文件系统包装器,且不受 allow_url_fopen 的限制(早先“需要 allow_url_fopen”的说法是错误的,现已撤回)。

修复底层原语,而不仅是修复调用点:

  1. 停止使用通用抓取函数进行远程检索;改为使用注入的仅 HTTP 客户端。
  2. 在请求之前验证协议为 http / https;禁用重定向(30x 可跳转到 file://)。
  3. 纵深防御:拒绝解析后的私网 / 链路本地 / 环回主机,或限制为配置的图像 CDN 主机;验证大小 / 内容类型 / 图像解码。
  4. 将相同修复移植到基类,使同级提供者继承(否则修复不完整)。
  5. 回归测试以拒绝用例优先:file://…、http://169.254.169.254/… 以及 302→file:// 重定向都必须被拒绝。

完整方向:docs/fix-direction.md。


目录结构

root@kitploit:~
.
├── README.md                          # this file (English, canonical)
├── README_ja.md                       # Japanese mirror
├── SECURITY.md                        # reporting policy + responsible-disclosure disclaimer
├── .gitignore                         # blocks secrets / primary evidence from being committed
├── docs/
│   └── fix-direction.md               # root-cause fix + variant hunt + minimal-diff sketch (EN)
├── reproducer/                        # SAFE reproducer only (sandbox, mock upstream, benign oracle)
│   ├── README.md                      # how to stand up the network-isolated sandbox
│   ├── verdict.md                     # what "success" means: raw-byte match + 200-vs-403 + exit codes
│   ├── mock-openai-server.py          # benign mock; default happy-path PNG, ssrf_demo → file:///etc/hostname only
│   └── docker-compose.yml             # TEMPLATE: isolated Drupal sandbox + mock (you add the vulnerable target)
├── detections/
│   ├── README.md
│   ├── sigma/web-egress-to-internal-after-imagegen.yml
│   ├── sigma/php-sensitive-file-open.yml
│   ├── sentinel/imagegen-egress-correlation.kql
│   └── splunk/imagegen-content-type-mismatch.spl
└── timeline.md                        # disclosure timeline (single source of truth)

文档目前是日文(.ja.md);英文权威翻译是待办事项。本仓库中不包含: 武装载荷以及任何开箱即用的文件读取 PoC。公开的 reproducer/ 使用单个良性 oracle(/etc/hostname)针对模拟上游演示缺陷机制——没有任意路径读取,没有 settings.php 抓取,没有 IMDS。它不是针对在线站点的武器。请更新到 1.1.1 / 1.2.2。


安全复现器

目标: 让研究人员能够确认缺陷类别,而无需提供针对真实目标的利用或暴露机密。一切均在离线环境下运行。

  • 隔离: 通过 docker compose 在隔离网络上运行应用和模拟上游(语言原语检查使用 --network none)。不挂载任何凭证。模拟上游从不与真实 API 通信。
  • 忠实的不受信任上游模型: 模拟上游扮演“一个指向不受信任代理 / 自托管网关的 host”。它通过带外方式(而非提示词)被武装,以返回一个合成目标 URL——这体现了修正后的攻击者模型(上游选择 URL,用户仅触发)。
  • 仅使用良性 oracle:
    • file:///etc/hostname 以及仅在应用容器内写入的每次运行唯一标记 → 证明应用读取了由上游选择的路径(标记在模拟上游中不存在)。
    • settings.php 通过 sha256 字节匹配验证,内容从未被输出 → 在不泄露凭证的前提下证明“数据库凭证在影响范围内”。
    • 一个没有公开端口的内部 HTTP 服务 → 通过合成令牌证明内部 SSRF 响应检索。
  • 判定依据是原始字节,而非 HTTP 200: 成功 = 返回的响应体与预期的合成值逐字节相等,外加 200 与 403 的授权对比。退出代码严格(0 可利用 / 1 前置条件 / 2 未复现 / 3 清理失败 / 99 错误)。参见 reproducer/verdict.md。

参见 reproducer/README.md。


披露时间线

参见 timeline.md。摘要:


检测指南

实践者检测位于 detections/;原理说明见 docs/detection-engineering.md。简而言之:

  • 将谁触发了图像生成(应用审计)与 API 调用后紧密时间窗口内到 169.254.169.254 / 环回 / RFC1918 地址的异常出口流量(代理 / EDR)进行关联。不要仅凭出口流量告警。
  • file:// 读取不会触网——通过主机审计(auditd/EDR)检测Web 进程打开敏感文件,并建立基线,使只有图像生成请求中偏离模式的读取才会触发。
  • 回溯排查声明为 image/* 但魔数不是图像的字节。
  • 大多数 AI 集成不会记录哪个用户获取了哪个 URL——请添加一条抓取审计记录 {request_id, actor, target_url, scheme, resolved_ip, content_type}。仅靠标准日志无法捕获此类问题。

参考

  • OWASP Top 10 A10:2021 — 服务端请求伪造(Server-Side Request Forgery)
  • CWE-918 SSRF · CWE-73 外部控制文件名 / 路径 · CWE-441 意外代理 / 中继 · CWE-610 外部控制的引用
  • PHP 流包装器(file:// 是默认文件系统包装器;不受 allow_url_fopen 限制)
  • Drupal 安全团队——通过项目的“报告安全漏洞”进行的协调披露
  • 公告: Drupal SA-CONTRIB-2026-053 — https://www.drupal.org/sa-contrib-2026-053
  • CVE: CVE-2026-13233(CNA:Drupal.org)

安全声明

  • 披露已完成(CVE-2026-13233 / SA-CONTRIB-2026-053),因此产品 / 版本 / 代码细节均为公开信息。请先更新到 1.1.1 / 1.2.2——未打补丁的站点仍然存在。
  • reproducer/ 是仅沙箱专用的,使用合成 oracle。它不是针对真实目标的利用工具,也不包含任何机密。切勿对你不拥有且未经授权测试的系统运行它。
  • 这里刻意不包含可用的文件读取 PoC 和任何含有机密的主要证据——即使在修复后、未打补丁的部署仍存在的情况下,也是如此。

负责任披露免责声明

所有研究均由作者在自有的、网络隔离的沙箱中针对模拟上游进行——从未联系真实厂商 API,也从未测试任何第三方系统。 该发现首先私下报告给 Drupal 安全团队,并且仅在修复和公告(SA-CONTRIB-2026-053、CVE-2026-13233)同步发布后才公开;厂商评级为 中度严重。作者的 CVSS 数值是临时性自我评估,并非官方评分,且有意保持保守(无 CVSS 严重 / 高危)——这与厂商的中段评级一致。本材料仅用于防御和教育目的。参见 SECURITY.md。

下载工具
  • 透明度说明: 任何环境标准化(例如修正先前 root 运行留下的不可写沙箱文件目录属主)均有记录,且仅影响保存 / 提供分支,不影响文件读取风险点本身。披露这一点是为了避免评审者将其误解为预设条件。
  • DateEvent
    2026-06-10静态审查定位到风险点;固定路径 file:// 读取经动态验证
    2026-06-11任意路径读取 + settings.php sha256 匹配 + 内部 HTTP SSRF 均确认
    2026-06-11生产消费方可达性(自动化器内部路径;FWA 合法 HTTP 外渗)
    2026-06-11独立同行评审纠正过度主张(攻击者模型、CVSS、allow_url_fopen);提交被置于 HOLD
    2026-06/07HOLD 项已清除;私下报告给 Drupal 安全团队;基类孪生问题标记给 drupal/ai
    2026-07-10修复版本 1.1.1 / 1.2.2 发布;公告 SA-CONTRIB-2026-053 和 CVE-2026-13233 发布;作者被列为 发现者与修复开发者