1. 基本信息
| 项目 | 内容 | 数据来源 |
|---|---|---|
| 名称 | kr2s-was-i-vulnerable(仓库自述名称为 “rails-forensics-CVE-2026-66066”,本报告收录其中的第一个技能) | GitHub |
| 作者/维护者 | Ruby on Rails 官方 GitHub 组织(rails),提交者 Mike Dalessio(GitHub 账号 flavorjones,Nokogiri / Loofah / Rails::Html::Sanitizer 等 Ruby 生态安全相关库的长期维护者),版权方为 37signals LLC(Rails 框架的原始创建公司) | GitHub API + LICENSE 文件 |
| 来源链接 | https://github.com/rails/rails-forensics-CVE-2026-66066/tree/main/skills/kr2s-was-i-vulnerable | — |
| 许可证 | MIT(仓库根目录 LICENSE 文件确认) | GitHub API + 仓库核对 |
| GitHub Stars / Forks | 16★ / 1 fork(仓库仅含两个紧密配套的技能) | GitHub API |
| 最新版本 | 无正式 tag/Release;仓库创建于 2026-07-30,最近一次提交 2026-07-31 | GitHub API |
| 安装方式 | git clone 后软链接进 ~/.claude/skills/,或直接让 agent 读取本地路径 |
官方 README |
2. 功能介绍与亮点
kr2s-was-i-vulnerable 是 Rails 官方组织为自己发布的严重漏洞 CVE-2026-66066(CVSSv4 9.5,“KindaRails2Shell”:伪装成 MATLAB 文件的上传可诱导 libvips 读取服务器任意可读文件)编写的取证工具第一步:判定 Rails 应用是否曾暴露,并给出精确暴露时间窗口。该漏洞已被 Rapid7、SOCPrime、HeroDevs 等安全机构公开报道。
主要亮点:
- 六个必要条件逐项核验(是否用 Active Storage 产出变体、处理器是否为
:vips、libvips 是否编译进matload、直传端点是否可达、variation_key是否可获取、Rails 版本是否早于修复版),六者同时成立才构成暴露,任一不满足即可提前终止 - 纠正“分析 HEAD 等于分析当年代码”的常见错误:需用
git worktree检出修复提交的父提交 - 区分“提交日期”与“部署日期”两种窗口误差,终点用错会漏掉真实攻击窗口,给出加宽处理办法
AGENTS.md明文禁止 agent 直连生产数据库或对象存储,生产环境命令一律由人工执行- 官方框架维护方主动为自己发布的具名 CVE 提供配套取证方法论,实践中并不常见
3. 适用场景
固定分类:安全与合规
面向已经部署或曾经部署 Rails + Active Storage(使用 :vips 变体处理器)的应用运维者、安全工程师:在 CVE-2026-66066 披露后,需要判断自己的应用历史上是否真的暴露过、暴露了多久,从而决定是否要展开更深入的入侵调查。
4. 跨 Agent 兼容性
- Claude Code:原生支持,自带
CLAUDE.md(引用@AGENTS.md)与专属软链接安装步骤 - Codex:以
AGENTS.md作为核心编排文件(Codex 一类 agent 的通行约定),但官方材料未点名,判定为格式兼容、未获明确验证 - OpenClaw / Hermes Agent:未验证,官方材料未提及
5. 推荐理由
Rails 官方组织针对自己发布的严重 CVE 提供的专用取证方法论,把“分析 HEAD 而非历史代码”“提交日期当部署日期”等真实调查中最容易踩的坑写进文档,且明确要求生产环境操作必须交给人工执行。
6. 评分
| 维度 | 分数 | 说明 |
|---|---|---|
| 受欢迎程度 | 8 | 发布于 Rails 官方 GitHub 组织账号下,提交者为 Ruby 生态知名安全相关库维护者,版权方是 Rails 框架的原始创建公司 37signals LLC;仓库本身创建仅两天(16★/1 fork),尚无独立第三方对该技能自身的讨论 |
| 可用性 | 8 | 提供 SKILL.md + references/guide.md(分阶段操作指南)+ RUNBOOK.md(配套扫描脚本手册)+ rake test 测试套件的完整文档体系;MIT 许可、无需付费依赖;安装需要 clone 加软链接两步 |
| 安全性 | 9 | 见下方安全检查清单 |
安全检查清单:
| 检查项 | 结果 |
|---|---|
| ① Shell 命令与权限范围 | 引导在 git worktree 中做只读代码分析;涉及生产环境的检测命令(如查询已部署 libvips 版本)由 agent 生成后交人工在生产控制台自行执行,AGENTS.md 明文禁止 agent 直接连接生产数据库或对象存储操作 |
| ② 运行时联网外发 | 仅会读取一个公开地址(官方漏洞公告页)核实已修复版本号,无数据外发 |
| ③ API Key/凭据存储 | 不需要任何 API Key 或凭据 |
| ④ 可疑指令 | 未发现提示注入或隐藏指令;文档反复强调“绝不修改目标应用的工作树,绝不提交,绝不推送” |
| ⑤ 作者/组织信誉 | Rails 官方组织账号,提交者为长期活跃的 Ruby 安全生态维护者,版权方为 Rails 创建公司 37signals LLC,无造假迹象 |
| ⑥ License | MIT,仓库根目录 LICENSE 文件确认 |
| ⑦ 最近维护 | 仓库创建于 2026-07-30,最近提交 2026-07-31,处于活跃维护中 |
综合评分 = 三项均值 = 8.33
7. 跟同类 Skills 相比的优势
安全与合规类目下已有的相关技能定位各不相同:
| Skill | 定位 | 与 kr2s-was-i-vulnerable 的差异 |
|---|---|---|
| VulnHunter(capitalone/VulnHunter) | 通用漏洞猎手,以攻击者视角正向推理代码库中未知漏洞的可利用性,自带证伪机制压低误报 | 面向“事前主动挖掘未知漏洞”,是通用型工具;kr2s-was-i-vulnerable 面向“事后判定对一个已公开、已确认的具名 CVE 历史暴露情况”,两者互补而非重叠 |
| threat-model-analyst / tm7-threat-model(github/awesome-copilot) | 用 STRIDE 方法论对系统做设计期威胁建模,产出结构化威胁清单 | 属于设计阶段的通用威胁建模工具,不针对任何具体已披露漏洞;kr2s-was-i-vulnerable 是披露后的精确取证方法 |
| incident-response-harness(harness/harness-skills) | 把安全事故与近期部署自动关联,评估影响范围并生成复盘文档 | 面向“已确认发生事故”之后的复盘协同,不负责判定“历史上是否曾经暴露”这一前置问题 |
8. 用户评价
该技能所属仓库创建仅两天,目前尚无第三方独立评价。
9. 其他补充
同一仓库还配套另一个技能 kr2s-was-i-exploited(确认暴露窗口后,扫描 Active Storage 寻找是否被真实利用),依赖本技能产出的窗口才能开始,本报告未单独收录该条目。仓库自带 rake test 测试套件与 RUNBOOK.md 操作手册。
10. 安装使用方式
方式一(推荐,Claude Code 等支持软链接的 agent):
git clone https://github.com/rails/rails-forensics-CVE-2026-66066.git
ln -s "$PWD/rails-forensics-CVE-2026-66066/skills/kr2s-was-i-vulnerable" ~/.claude/skills/
需软链接而非复制,因为技能要读取仓库根目录下的共享参考文档。
**方式二(通用,任何可读本地文件的 agent):**克隆后直接告知 agent SKILL.md 路径与目标应用路径即可,无需符号链接。
安装后注意事项:目标应用路径须与本仓库路径分开;需要本机已安装 git 以检出修复提交前的代码树;生产环境检测步骤需人工在生产控制台亲自执行并回传结果。
11. 注意事项
- 高度绑定 CVE-2026-66066 与 Rails + Active Storage + libvips 技术栈组合,不适用于其他框架或漏洞
- 交付物是“暴露时间窗口”而非是/否结论,解读需具备 Rails 部署与 Active Storage 配置基础知识
- 生产环境步骤刻意设计为半自动(agent 出命令、人工执行),无法端到端全自动跑完
- 仓库创建仅两天,长期维护路线尚不明确,且尚无独立于官方渠道的第三方评价