Ruby on Rails 简介
Ruby on Rails(Rails)是一个用 Ruby 构建的全栈模型-视图-控制器(MVC)网络框架。它"包罗万象",为开发人员提供所需的一切:对象关系映射器(Active Record)、请求/响应和视图层(Action Pack/Action View)、后台作业处理、邮件发送器、WebSocket 支持、文件存储和上传(Active Storage)等等。
自 2004 年首次发布以来,Ruby on Rails 已发展成为世界上应用最广泛的网络框架之一。如今,它已为数百万个网站和应用程序提供支持,包括 GitHub、Shopify、Airbnb、Basecamp 和 Netflix 等知名平台。Rails 非常强调 "公约重于配置"、开发人员的生产力和快速原型开发,因此已成为初创公司和大型企业的首选框架。
单元 515 研究:暴露 Rails 中的关键漏洞
在独立研究过程中,OPSWAT的515小组成员Thai Do 发现了 Ruby on Rails 中的两个漏洞,其中一个可能导致远程代码执行 (RCE)。这些发现被负责任地披露给了 Rails 安全团队,在整个过程中,OPSWAT 与该团队进行了协调。
2025 年 8 月 13 日,Rails 团队发布了公共公告,并发布了针对这两个漏洞的修补版本。
受影响版本和已修复版本
组件 | 受影响的版本 | 固定版本 |
---|---|---|
主动存储(CVE-2025-24293) | Rails ≥ 5.2.0 及以下的固定版本 | 7.1.5.2, 7.2.2.2, 8.0.2.1 |
活动记录日志(CVE-2025-55193) | Rails < 7.1.5.2, < 7.2.2.2, < 8.0.2.1 | 7.1.5.2, 7.2.2.2, 8.0.2.1 |
在 Rails 中发现的安全问题
CVE-2025-24293 - 活动存储不安全转换方法
该漏洞影响 Rails ≥ 5.2.0 版本中的 Active Storage。 当不安全的图像转换方法传递给mini_magick 时,就会发生该漏洞,当与未验证的用户输入相结合时,可能导致远程代码执行 (RCE)。尽管 Rails 指出在默认配置下该漏洞不可利用,但向用户暴露转换选项的应用程序尤其面临风险。
CVE-2025-55193 - 活动记录日志中的 ANSI Escape 注入
此漏洞影响 7.1.5.2、7.2.2.2 和 8.0.2.1 之前所有 Rails 版本中的 Active Record 日志。攻击者可在日志中注入包含 ANSI 转义序列的特制标识符,从而操纵查询在终端输出中的显示方式,导致误导或损坏日志。虽然该漏洞不会直接暴露数据或执行代码,但它可能会妨碍监控和事件响应工作。Rails 安全团队在相同的修补版本中解决了这一问题。
CVE-2025-24293 - Active Storage 远程代码执行的技术分析
主动存储概述
Active Storage 是 Rails 处理文件上传的内置框架。它使开发人员能够将文件附加到 Active Record 模型,并将其存储在本地(用于开发/测试)或亚马逊 S3、谷歌Cloud 存储或微软 Azure 等云服务上。其Core 功能包括执行图像转换、为 PDF 和视频等非图像文件生成预览,以及将上传文件镜像到多个服务以实现冗余或迁移。
图像转换的工作原理
图像转换使开发人员能够以特定尺寸或格式提供附件。这可以通过调用图像附件上的variant()方法并传递支持的操作来实现。
当客户端请求一个变体 URL 时,Active Storage 会按需对原始 blob 执行转换,将结果存储在配置的服务上,并返回一个指向新生成文件的重定向。
Rails 支持两种图像转换处理器:Vips和MiniMagick。使用的处理器可通过config.active_storage.variant_processor 进行配置。
图像转换中支持的具体操作由图像处理gem 决定,并取决于为 Rails 应用程序配置的底层处理器。
CVE-2022-21831 的不完全修复
2022 年 3 月,Rails 团队披露了CVE-2022-21831,这是 Active Storage 图像转换功能中的一个关键代码注入漏洞。补丁引入了转换方法的默认允许列表,以缓解该问题。
然而,在对补丁和 Rails 源代码进行深入审查时,Thai DoOPSWAT 515 小组)发现了一个旁路,导致原始修复不完整。这一绕过重新为攻击者提供了实现远程代码执行 (RCE) 的途径,导致 CVE-2025-24293 的泄露。
图像处理组件中的根本原因
应用转换时,Rails 会将操作委托给图像处理gem,最终调用lib/image_processing/processor.rb中的 ImageProcessing::Processor#call
如果配置的变体处理器是MiniMagick,漏洞就存在于lib/image_processing/mini_magick.rb 中的两个函数中:
-load_image- 接受来自**loader的未验证选项。
-save_image- 接受来自**saver的未验证选项。
对于load_image,**loader中除page、geometry 和auto_orient以外的任何键值对都会保留在**options 中。同样的情况也适用于save_image,除了allow_splitting以外的键值都保留在**options 中。这些选项稍后会传递给Utils.apply_options(magick,**options),后者会将它们作为 MiniMagick CLI 标志(如 -quality)应用。
虽然loader和saver已列入默认允许列表,因此被认为是安全的,但这种信任是错误的。通过精心制作的输入,攻击者可以利用这些选项绕过检查,最终导致 Rails 在主机上执行任意系统命令。
Rails 应用程序中的利用场景
例如,如果应用程序将未经验证的用户输入直接传入转换方法:
攻击者可伪造恶意输入来操纵加载器或保护器选项。这将绕过允许列表,在服务器上执行任意命令,导致远程代码执行 (RCE)。
概念验证:远程代码执行
在运行易受攻击版本(8.0.2.1、7.2.2.2 和 7.1.5.2 之前)的 Rails 应用程序中,OPSWAT Unit 515 成功演示了一个漏洞利用链,其中未经验证的转换输入会导致执行 shell 命令。
该视频 PoC 演示了CVE-2025-24293的可利用性,并强调了对 Rails 应用程序的实际影响:
缓解和专业渗透测试服务
企业应通过将 Ruby on Rails 升级到最新的安全版本(7.1.5.2、7.2.2.2 或 8.0.2.1)来解决CVE-2025-24293和CVE-2025-55193。如果无法立即打补丁,临时防护措施包括将图像转换限制为预定义预设、验证和清除用户输入、加固 ImageMagick 策略并确保日志无法解释 ANSI 转义序列。
然而,打补丁并不能消除现代网络环境中的所有风险。自定义业务逻辑、第三方集成和复杂的部署管道往往会产生超出供应商建议范围的漏洞。因此,网络应用渗透测试 至关重要。
在OPSWAT,Unit 515提供专业的网络应用渗透测试服务,远远超出了自动扫描仪或清单审计的范围。我们的团队由经验丰富的攻击性安全专家组成,他们拥有多年测试不同行业大型应用程序的经验。我们采用系统化的对抗方法,发现身份验证流、输入验证、访问控制和数据处理中的漏洞--这些问题即使在打满补丁的框架(如 Ruby on Rails)中也会持续存在。
每次合作都将深厚的技术专长与企业就绪报告相结合,提供清晰、可操作的见解,使开发团队能够有效地修复缺陷。通过与Unit 515 合作,企业可以确保其关键应用程序由专家进行测试,专家不仅会模拟真实世界的攻击技术,还会验证修复措施是否真正弥补了漏洞。这些专家不仅能模拟真实世界中的攻击技术,还能验证修复措施是否真正弥补了漏洞。他们的专业知识能加强修复工作,降低残余风险,并提高整体应用程序对不断变化的威胁的抵御能力。