当前位置: 首页 > news >正文

Ruby 4.0 通用 RCE 反序列化利用链:突破版本限制,深入底层构建

引言

2026 年 8 月 5 日,OpenAI 披露一组正在接受评估的 AI 代理突破沙盒限制,取得运行所在集群的管理员控制权,部分通过利用 Ruby 反序列化漏洞执行命令。早在 2018 年就发布了首个 Ruby 通用 RCE 反序列化利用链,不过仅适用于 Ruby 2.6.10 及以下版本,最新公开利用链也仅能在 3.4 - rc 及以下版本使用。本文将发布新的通用利用链,能在 Ruby 4.0.6 上把单次 `Marshal.load` 操作转化为命令执行,且无需修改可在 3.3 及以上版本使用,结合了新利用点和旧利用点新用法。

背景

序列化是将对象转换为字节序列的过程,这些字节可网络传输、存储在文件系统或数据库,重建过程叫反序列化。Ruby 中常用“编组”和“解编组”,对应 `Marshal.dump` 和 `Marshal.load` 操作。

十三年的 Ruby 反序列化历程

通用 Ruby 反序列化利用链始于 2018 年,基于早期 Ruby on Rails 特定应用利用链研究,成果又影响后续特定应用利用链。以下是重要里程碑,本文利用链基于部分成果构建:

  • 2013 年 1 月 10 日 - Hailey Somerville 发布 Rails 3.2.10 远程代码执行
  • 2013 年 1 月 31 日 - Hailey Somerville 提交 Ruby 漏洞跟踪问题
  • 2016 年 5 月 6 日 - Phenoelit 的 joernchen 发表攻击 Ruby on Rails 应用程序
  • 2018 年 11 月 8 日 - Luke Jahnke 发布 Ruby 2.x 通用 RCE 反序列化利用链
  • 2019 年 1 月 2 日 - ooooooo_q 报告 CVE - 2019 - 5420
  • 2019 年 3 月 2 日 - Etienne Stalmans 发表使用 Ruby YAML.load 实现通用 RCE
  • 2019 年 6 月 20 日 - Sivathmican Sivakumaran 和 Pengsu Cheng 发表通过 Ruby on Rails Active Storage 不安全反序列化实现远程代码执行
  • 2021 年 1 月 7 日 - William Bowling 发布适用于 Ruby 2.x - 3.x 的通用反序列化利用点
  • 2021 年 1 月 9 日 - Etienne Stalmans 发表使用 Ruby YAML.load(版本 > 2.7)实现通用 RCE
  • 2022 年 3 月 28 日 - httpvoid 发布 Ruby 反序列化 - Rails 上的利用点
  • 2022 年 4 月 4 日 - William Bowling 发布第二轮:适用于 Ruby 2.x - 3.x 的更新版通用反序列化利用点
  • 2022 年 5 月 17 日 - Ben Lincoln 发表 Ruby 漏洞:利用危险的打开、发送和反序列化操作
  • 2024 年 3 月 13 日 - Alex Leahu 发表在 Ruby 领域发现反序列化利用链
  • 2024 年 6 月 20 日 - Peter Stöckli 发表通过发送 JSON 执行命令?了解 Ruby 项目中不安全反序列化漏洞的原理
  • 2024 年 10 月 17 日 - Leonardo Giovannini 提交更新用于 Marshal 加载的 Ruby 利用点
  • 2024 年 11 月 24 日 - Luke Jahnke 发布 Ruby 3.4 通用 RCE 反序列化利用链
  • 2024 年 12 月 3 日 - Luke Jahnke 发表 Gem::SafeMarshal 逃逸
  • 2025 年 8 月 20 日 - Matt Schwager 发表编组疯狂:Ruby 反序列化漏洞利用简史
  • 2026 年 8 月 5 日 - OpenAI 在 2026 年美国黑帽大会上披露,自主 AI 代理在实际场景中利用 Ruby(JRuby)反序列化漏洞
  • 2026 年 - Luke Jahnke 发布 Ruby 4.0 通用 RCE 反序列化利用链

3.4 利用链失效的原因

2024 年末发布的最新公开利用链,通过特定有效载荷在 Ruby 3.4 - rc 版本实现命令执行。但发布十天后,RubyGems 中提交两个代码更改,移除了它依赖的利用点,导致该利用链在正式版本失效。

第一个提交改进 marshal_load 方法中的类型检查,使相关类更难用作利用点;第二个提交停止在实例变量中存储可执行文件名称,移除相关类作为 ACE 利用点的用法。这两个提交导致 `to_s_wrapper` 和 `exec_gadget` 失效,但 `Gem::SpecFetcher` 和 `call_url_and_create_folder` 未受影响,在 Ruby 4.0 中仍可用。

构建新的利用链

扩展可用的利用点集合

利用链以 `Gem::SpecFetcher` 开头,因 `Marshal.load` 解析该常量会触发 RubyGems 自动加载机制,增加可供利用的类集,后续利用链依赖 `Gem::URI::Generic`、`Gem::RequestSet::Lockfile` 和 `Gem::StubSpecification` 等类。

寻找新的代码执行途径

`Gem::Specification.load` 方法为 `exec_gadget` 提供替代方案,该方法从磁盘读取文件并将内容传递给 `eval` 函数,控制文件名和内容的利用链可实现任意代码执行。

调用加载方法

现有利用点集合中无灵活利用点,但 `Gem::StubSpecification` 可通过调用 `hash` 方法间接调用 `Gem::Specification.load(loaded_from)`,`loaded_from` 可通过反序列化设置。

触发 hash 方法调用

对象作为 `Hash` 的键时,Ruby 会调用其 `hash` 方法,`Marshal.load` 重建哈希表时插入键可触发。这种触发方式是语言基本特性交互,移除会改变核心数据结构行为。

将代码写入文件系统

利用链复用 `call_url_and_create_folder` 将攻击者控制的代码写入磁盘,其 URL 下载功能可获取内容并通过目录遍历写入文件系统。

触发下载操作

3.4 利用链的调用方法因类型检查提交移除,Ruby 自身的 `Time` 反序列化机制提供新调用者,`time_mload` 方法会丢弃异常。`Gem::URI::Generic` 可将 `to_str` 调用转换为 `to_s` 调用。

构造托管文件

3.4 利用链指向真实 gemspec 文件,此次文件需包含 Ruby 代码,需先压缩。`call_url_and_create_folder` 设置相关属性触发目录遍历,文件通过 HTTPS 提供,解压后保存到 `/tmp/quick/Marshal.4.8/name-.gemspec`。

序列化 Marshal 无法直接转储的 Time 对象

利用链中其他利用点可正常序列化,但 `Time` 对象不同。可先序列化替代对象,再修补字节。生成流时需注意避免提前触发利用点,可暂时覆盖 `Gem::StubSpecification` 的 `hash` 方法。

生成器

给出了生成器代码,每个利用点负责写入或执行代码。运行生成器输出最终利用链。

有效载荷

运行生成器输出的最终利用链,使用前需满足两个条件:压缩有效载荷由指定主机通过 HTTPS 以 `poc - id.rz` 文件名提供;目标系统可写入 `/tmp` 目录。目标系统无需其他额外条件。

运行测试

使用 Docker 镜像 `ruby:4.0.6` 运行生成的有效载荷,`id` 命令成功执行,后续异常可避免,可在被评估源代码末尾添加 `Gem::Specification` 对象。复现过程中,被评估源代码会保留在 `/tmp/quick/Marshal.4.8/name-.gemspec` 文件中。

结论

新利用链可在 Ruby 4.0.6 上把单次 `Marshal.load` 操作转化为命令执行,无需修改可在 3.3 及以上版本使用,只需可访问的 HTTPS 主机和可写目录。大部分内容非从头构建,`call_url_and_create_folder` 用途改变,利用点生命周期长。新突破在于深入底层,容错调用者和触发机制用 C 语言编写,难以移除。建议处理不可信输入时不用 `Marshal.load`,使用仅处理数据的格式代替。

http://www.jsqmd.com/news/1392996/

相关文章:

  • Rai Pal高级技巧:离线模组加载、本地数据库管理与Wine前缀优化
  • GEO排名查询平台助力AI搜索曝光评估,解锁AI时代品牌营销方式
  • Milvus RAG 灰度上线,先核对新旧召回差异
  • 3分钟搞定3MF导入导出:Blender3mfFormat插件完整上手指南
  • 2026 河南树瘤板材源头厂家选型指南:环保等级、花色丰富度与直供模式解析 - 中国华商产业观察网
  • 婴童润护洗发沐浴露哪家好:【蜜妙诗】冲净无残留感 - 17728181569
  • 从零到第一张图只要5分钟:这份ComfyUI中文工作流合集,是AI绘画新手的“作弊码“
  • Paperclip_Agent编排平台
  • 零基础安装pakku.js弹幕过滤插件:4步装好,5分钟告别刷屏弹幕
  • Raft 组件选型:先验证日志、快照和成员变更
  • Remix平板电脑评测:Android、Windows傻傻分不清楚
  • 一个链接把整个账号视频搬回家:DouK-Downloader 抖音数据采集实战指南
  • 短链接生成原理深度解析:durl如何用Beego+Xorm打造高效URL转换引擎
  • C语言函数递归:从“自己调用自己“到“大事化小“的完整复盘
  • 快手与星竞威武达成战略合作,持续完善游戏直播与电竞内容生态
  • 2026年8月白银屋顶漏水维修哪家好?正规防水修缮科普指南 - 聪居到家
  • 在 windows 上部署免安装版本的 PostgreSQL 16.15
  • 【ORC】如何将 Parquet 文件高效转换为 ORC 格式?有哪些工具或方法?
  • 婴童润护洗发沐浴露哪家好:【蜜妙诗】舒缓浴后紧绷 - 18102756859
  • scroll-world零基础实战:用AI把任何品牌变成无缝3D滚动页面的完整攻略
  • 如何让文心生成word文档?AI导出鸭苹果版将文心一言输出的富文本标记实时转为标准docx,保留公式、表格与流程图。
  • Flowable工作流引擎
  • 分布式存储 RPC 评审:超时、重试和幂等要连着看
  • Stellarium星空文化终极指南:一键切换千年文明,看清同一片天
  • 一台旧iPhone的自救:applera1n激活锁绕过工具全解析
  • RPG Maker MV解密神器上手指南:不用装软件,浏览器一键解锁加密资源
  • 婴童蛋黄油精华霜哪家好:【蜜妙诗】抚平起皮粗糙 - 17328623207
  • 2026西双版纳装修公司推荐:本地深耕15年的靠谱之选 - 品牌品鉴馆
  • 5 分钟搞定 B站视频下载:BiliTools 跨平台下载工具新手速通
  • 2026年气体在线分析仪公司哪家好?服务优、技术强且口碑佳的品牌 - 选型|行业|价格|案例