nuke-on-rails/nuke-on-rails

GitHub: nuke-on-rails/nuke-on-rails

Nuke on Rails 是一个面向 AI 编程代理的 Rails 安全审计技能,整合确定性扫描器与 LLM 分诊能力,按影响程度排序输出可执行的修复计划。

Stars: 20 | Forks: 1

Nuke on Rails: a steam train hauling a nuclear bomb through the desert as a mushroom cloud erupts ### 一条命令。找出 Rails 应用中的所有风险,并按影响程度排序。 Follow on X Follow on LinkedIn MIT License

它是什么  •  它能检测什么  •  工作原理  •  快速开始

## 它是什么 **Nuke on Rails** 是一个开源的**技能**,专为 AI 编程代理(Claude Code、Cursor、Codex 等)设计,而不是一个添加到 Gemfile 的 gem。它像首席工程师一样审计你的 Rails 应用:*该重构什么,哪里有漏洞,以及修复的优先顺序。* 它不是简单地将各个工具的报告拼凑在一起,而是返回**一个按影响程度排序的列表**。支付控制器中的 IDOR 问题排名高于臃肿模型;高频繁修改的臃肿模型排名高于理论上的警告。 扫描器只负责列出问题。而 Nuke on Rails 负责决定优先顺序。 ## 快速开始 Nuke on Rails 通过 [`skills`](https://skills.sh) CLI 发布。你需要安装 [Node.js](https://nodejs.org)。 **1. 安装 `skills` CLI:** ``` npm install -g skills ``` **2. 添加 Nuke on Rails**(在你的项目根目录下执行): ``` skills add nuke-on-rails/nuke-on-rails ``` 它兼容各种代理:Claude Code、Cursor、Codex、Gemini CLI、Warp 等等。 **3. 运行它**(在你的代理中): ``` /nuke-on-rails ``` 此后无需任何额外设置。它会自动安装所需的工具,检测是 Rails 还是纯 Ruby 项目,运行所有检测流程,并为你提供修复计划。它绝不会触碰你的 Gemfile。 **4. 更新**(当你想要最新的检测视角和修复补丁时): ``` skills update nuke-on-rails ``` ## 为什么不直接让代理“审查我的代码”? 你可以这么做,它也能找出一些问题。但是“审查我的 Rails 应用”每次给出的答案都不一样且更肤浅,并且会漏掉所有确定性扫描器能抓出的问题。区别在于: | | 要求代理“审查我的代码” | Nuke on Rails | |---|---|---| | **扫描** | 模型只能粗略查看它碰巧读到的文件 | Brakeman 解析 100% 的 AST;bundler-audit 和 ruby_audit 检查每一个锁定的 gem | | **可重复性** | 每次运行结果都不同 | 确定性引擎加上固定的分析方法 | | **检查范围** | 视模型随机游走的范围而定,直到上下文耗尽 | 通过变动率 × 复杂度,精准定位真正重要的热点 | | **CVE 与 EOL** | 受限于训练数据的截断日期;无法获知昨天刚发布的 CVE | 实时咨询数据库、零日网络交叉检查、生命周期终止检测 | | **误报** | 貌似合理实则错误的误报问题,且汇报语气十分自信 | 每一个安全发现都经过对抗性验证;无法验证的问题会被标记为“理论上的” | | **覆盖率** | 取决于它当天记住了要检查什么 | 每次运行都采用固定的 OWASP Top 10 检测视角目录 | | **输出** | 一大段冗长的文字 | 一个按影响程度排序的列表,附带“立即修复”计划 | LLM 仍然在做它擅长的事情:阅读代码路径、解释漏洞利用、评估严重程度。它只是不再单打独斗、全凭记忆且毫无优先级地工作了。 ## 它能检测什么 检测范围映射到 **OWASP Top 10 2025**。每个领域都是一个[检测视角](lenses/):这是一项纯 Markdown 编写的检查规则,在扫描器之上应用于审计过程。
访问控制与 IDOR * 通过 ID 加载记录但缺少所有权范围限定(典型的支付/订单/发票场景) * 存在身份验证的地方缺少授权验证(已登录并不等于有权限) * 批量赋值:`permit!`、权限提升、嵌套属性、原始 Hash 绕过 * 通过表单下拉列表和序列化器泄露记录 * 多租户应用中的跨租户泄露;路由暴露了本不应公开的操作
身份验证与会话 * Devise 配置错误:用户枚举、无锁定机制、永不过期的会话、弱密码策略 * 会话固定攻击以及缺少 Cookie 标志(`secure` / `httponly` / `SameSite`) * Token 和凭据查找过程中的时序攻击和类型混淆攻击 * Token 以明文存储或没有过期时间;速率限制/节流绕过 * 自定义 Warden 策略漏洞、作用域混淆、模拟登录缺陷;JWT 陷阱(`none` 算法、无过期时间)
机密信息 * `master.key`、凭据密钥或 `.env` 被提交到了 git(包括历史记录中) * 代码和初始化程序中硬编码的 API 密钥(Stripe、AWS、Twilio 等) * seeds、fixtures 或 `database.yml` 中包含机密信息;将机密信息作为 ENV 备份
密码学 * 加密预言机(一个加密例程被同时用于信任令牌和用户数据) * 自行编写的加密逻辑而非采用 Rails 原语;静态 IV;未经身份验证的加密模式 * 弱密码哈希(MD5/SHA);敏感列(CPF、SSN、银行、健康信息)以明文存储
配置与强化 * 关闭了 `force_ssl` / HSTS;后台服务流量(Postgres、Redis)以明文传输 * CSP 缺失或被禁用;在基于 Cookie 验证的操作中跳过了 CSRF;主机头注入 * 挂载了未经身份验证的仪表盘(Sidekiq、PgHero、Flipper) * Debug / console gems 被部署到了生产环境(形成了一个远程代码执行攻击面) * 向用户暴露堆栈跟踪、不安全的上传、通过 Markdown 渲染导致的存储型 XSS
API 表面 * JSON 信息过度暴露(`render json:` 泄露了 Token 摘要、角色标识、PII) * 缺少分页(导致数据表被整体拖取和自我拒绝服务);带有凭据的 CORS 通配符配置;查询字符串中包含 Token * 异常信息泄露;未经验证的 Webhooks * GraphQL 内省以及无限制的查询深度/复杂度 * XXE 和实体扩展 * OAuth 的 `redirect_uri`、`state` 和范围缺陷
日志与监控 * 日志中包含敏感数据(过滤漏洞、`puts` / logger 转储、未清洗的错误跟踪器面包屑) * 将 PII 发送给第三方及 LLM 调用 * 对登录、支付、权限和管理员操作缺乏审计追踪
依赖项与版本 * 你的 gems 和 Ruby 版本本身存在的已知 CVE * JavaScript 依赖项安全通告 * 不安全或未锁定的 gem 源 * 已停止维护的 Ruby 或 Rails 版本(即使没有公开的 CVE,这也是一个严重的合规性发现)
代码质量 * 臃肿模型 * 回调驱动的工作流 * 代码纠缠的 mixins * 意大利面条式的混乱分支 * N+1 查询 * 变动率 × 复杂度得出的热点区域
社区正在不断扩充这个目录:添加一项新的检查只需提交一个 Markdown PR,完全不需要编写代码。 ## 工作原理 确定性的扫描器负责执行扫描;LLM 是裁判,而不是作者。在每次运行中,该技能会: 1. **检测**项目类型:完整的 Rails 应用、纯 Ruby 项目(平滑降级),或两者皆非。 2. **运行扫描器**并读取它们的机器可读输出。它自带工具,绝不触碰你的 Gemfile。 3. 通过变动率 × 复杂度**筛选出热点区域**,在重要的地方进行深入阅读,而不是一视同仁地审查所有内容。 4. **进行分诊**:它通过阅读实际的代码路径来消除误报,应用上述检测视角,并在安全发现被写入报告之前对其进行对抗性验证。任何它无法给出合理理由的问题都会被降级为“理论上的”,而不会被谎报为已确认的问题。 5. **返回一份按影响程度排序的报告**:这是一份首席工程师会批准的计划,而不是简单的工具数据堆砌。 ## Star 历史 [![Star History Chart](https://api.star-history.com/svg?repos=nuke-on-rails/nuke-on-rails&type=Date)](https://star-history.com/#nuke-on-rails/nuke-on-rails&Date)
标签:AI Agent插件, AI编程助手, MITM代理, Ruby on Rails, 云安全监控, 内存转储, 批量扫描, 技术债务, 防御加固, 静态分析