KindaRails2Shell (CVE-2026-66066): 通过 Active Storage 上传实现任意文件读取和远程代码执行
1. 基本信息
- 文章标题: 关于 Ruby on Rails Active Storage 漏洞可导致远程代码执行的警告
- 发布方: JPCERT/CC
- 发布及更新日期: 2026-07-30
- 原始文章: https://www.jpcert.or.jp/at/2026/at260021.html
- 相关来源: https://github.com/rails/rails/security/advisories/GHSA-xr9x-r78c-5hrm
- 相关实体: CVE-2026-66066, KindaRails2Shell, Ruby on Rails, Active Storage, libvips, ruby-vips
- 严重程度: 严重
2. 一句话总结
这是一个结合 Active Storage 直接上传和 libvips 变体处理功能的漏洞,允许攻击者在未经身份验证的情况下上传构造文件、读取服务器上的文件和凭据,并在特定条件下以 Rails 进程权限执行代码。
3. 攻击流程
- 攻击者发现或猜测目标 Rails 应用使用了 Active Storage。
- 攻击者通过未经身份验证的直接上传功能注册构造文件。
- 攻击者触发由存在漏洞的 Active Storage 和 libvips 默认构建处理的变体处理。
- 攻击者读取服务器上的任意文件。
- 攻击者获取 Rails 密钥、云凭据、数据库凭据和其他敏感数据。
- 攻击者可能通过获取的密钥或处理链实现远程代码执行。
- 攻击者可能作为下一步横向移动到数据库、存储、云环境或 CI/CD 管道(推测)。
4. 攻击者位置和执行位置
攻击者通过 HTTP 从外部网络上传文件。处理发生在 Rails 应用服务器和 libvips 进程上。远程代码执行以 Rails 或变体处理服务的操作系统权限运行。
5. 受害者和管理员看到的内容
- 即使没有面向用户的上传界面,如果启用了 Active Storage,应用也可能易受攻击。
- 管理员可能在日志中看到直接上传、blob 创建、变体请求以及 libvips 异常或文件访问。
- 由于看起来像正常的图像处理,单靠 WAF 很难检测。
6. 成功和失败条件
成功条件
- 已启用 Active Storage。
- 变体处理器设置为
:vips。 - libvips 使用默认构建,例如来自发行版包。
- 使用存在漏洞的版本(早于 7.2.3.2、8.0 至 8.0.5.1,或 8.1 至 8.1.3.1)。
失败条件
- 已更新到修复版本。
- 已应用 libvips/ruby-vips 条件的官方变通方法。
- 已停止直接上传和变体处理或限制网络访问。
- 密钥与文件分离并遵循最小权限原则。
7. 成功时发生的情况
服务器上的文件和凭据被泄露,导致远程代码执行、数据库被攻陷、云资源滥用以及源代码或客户数据被盗。JPCERT/CC 建议将所有可读取的凭据视为已被攻陷而更改。
8. 可观察的日志
- 电子邮件: 通常没有。
- 代理/SWG/DNS: 应用服务器向未知目的地的后续流量,下载包或工具。
- 终端/EDR: Rails/libvips 的异常文件访问、子进程、shell 以及读取密钥文件。
- 身份/IdP: 异常使用应用密钥、云密钥和数据库凭据。
- SaaS/云: 对象存储 blob/变体、Secrets Manager 和云审计日志。
- 网络: 直接上传、构造的 blob、变体处理请求以及远程代码执行后的出站流量。
9. 攻击成功判断
- 仅接触: 探测目标端点。
- 用户操作: 不需要。
- 初始执行: 注册构造的 blob 和变体处理。
- 恶意软件或成功身份验证: 任意文件读取、使用密钥和子进程执行。
- 数据窃取/会话攻陷: 异常访问密钥、数据库和云数据。
- 确认后期攻陷: Web shell、持久进程、新密钥、数据库篡改和外部数据泄露。
10. 调查手册
- 触发器: 检测到存在漏洞的版本、PoC 风格的上传、libvips 异常或密钥文件访问。
-
初始检查: 确认 Rails、
activestorage、libvips和ruby-vips版本、:vips设置以及直接上传的可访问性。 - 端点: 保留 Web、Rails 和 Active Storage 日志、blob、变体、进程和文件审计。
- 身份验证和云: 检查所有密钥的异常使用,包括 Rails 凭据、环境变量、数据库和 S3。
- 后续操作: 跟踪新进程、cron 作业、服务、Web shell、出站流量和数据访问。
- 遏制: 更新软件、必要时停止功能、隔离受影响的主机、撤销并轮换所有可读取的凭据,以及从已知良好版本重建。
- 判断类别: 存在漏洞 / 已探测 / 恶意上传 / 文件读取 / 凭据使用 / 远程代码执行 / 下游攻陷。
11. 防御和检测思路
- 单个事件: 直接上传后出现异常变体、libvips 访问密钥文件或 Rails 生成 shell。
- 时间线关联: Blob 创建 -> 变体处理 -> 密钥文件读取 -> 新身份验证 -> 出站流量。
- 威胁狩猎: 跨所有面向互联网的 Rails 应用交叉检查 Active Storage 设置和过去的 blob/变体请求。
- 日志缺失: 没有对象存储和文件访问审计,很难确定文件读取是否成功。
- 优先级对策: 更新软件、安全管理密钥、应用服务最小权限和限制上传。不要依赖 WAF 作为更新的替代。
12. 事实 / 推断 / 假设
事实
- JPCERT/CC 确认了公开的 PoC 并警告了广泛利用的可能性。
- 没有面向用户上传功能的应用仍然可能成为目标,因为直接上传缺乏身份验证。
- JPCERT/CC 建议更改所有可读取的凭据。
推断
- 如果 Rails 应用具有高云权限,远程代码执行前的文件读取本身就可能导致严重的云攻陷。
假设
- 将 Active Storage 事件与主机文件访问日志结合使用,可以比 WAF 更准确地确定成功。
13. MITRE ATT&CK 映射
- 高置信度: T1190 利用面向公众的应用程序、T1005 从本地系统获取数据、T1552.001 文件中的凭据。
- 中置信度: T1059 命令和脚本解释器、T1078 有效账户、T1105 入口工具传输、T1041 通过 C2 进行数据泄露。
14. 未知事项和额外调查
- 实际利用的存在和开始时间
- PoC 的确切文件格式和请求序列
- 远程代码执行的可读范围和完整前提条件
- 对托管服务和衍生框架的影响
15. 对 SOC 和组织的影响
Rails 广泛用于 Web 服务,即使没有可见的上传功能,环境也可能成为目标,这构成了重大风险。组织必须对照资产清单检查 Gem 锁定文件和运行时配置,并假设已发生泄露而轮换凭据。
16. 按角色总结
- 针对 SOC: 将上传、变体、密钥读取和身份验证使用关联起来。PoC 发布后调查所有历史日志。
- 针对管理员: 检查 Rails 和 libvips 依赖项、更新它们并轮换所有可读取的密钥。
- 针对用户: 不需要用户操作。如果发现服务异常,请向管理员报告。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.