IPBUF安全漏洞报告
English
CVE-2026-33170 CVSS 6.1 中危

CVE-2026-33170 Ruby on Rails Active Support XSS漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33170
漏洞类型
跨站脚本 (XSS)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Ruby on Rails Active Support

相关标签

XSSRuby on RailsActive SupportCVE-2026-33170Web Security

漏洞概述

Ruby on Rails Active Support在特定版本前存在安全漏洞。SafeBuffer#%方法未正确传播@html_unsafe标志,当SafeBuffer被就地修改(如使用gsub!)后,利用不可信参数进行格式化时,结果错误返回html_safe状态。这导致ERB自动转义失效,攻击者可利用此漏洞实施跨站脚本攻击。

技术细节

该漏洞源于Ruby on Rails Active Support库中SafeBuffer类的实现逻辑缺陷。SafeBuffer机制用于标记安全字符串以防止XSS。然而,SafeBuffer#%方法在创建新缓冲区时未能正确传播@html_unsafe标志。攻击流程如下:首先,应用对SafeBuffer对象使用gsub!等方法进行原地修改;随后,当应用使用攻击者控制的不可信输入通过%操作符对该对象进行格式化时,由于标志传播失败,生成的字符串被错误判定为html_safe。最终,ERB渲染时跳过自动转义,导致恶意脚本在用户浏览器中执行。

攻击链分析

STEP 1
1. 目标识别
攻击者识别出使用受影响版本的Ruby on Rails Active Support(8.1.2.1、8.0.4.1、7.2.3.1之前)的Web应用程序。
STEP 2
2. 构造恶意输入
攻击者构造包含恶意JavaScript代码的载荷(如<script>...),准备发送至目标应用。
STEP 3
3. 触发漏洞逻辑
应用处理输入,对SafeBuffer对象执行原地修改操作(如gsub!),随后使用%操作符将恶意载荷格式化进缓冲区。
STEP 4
4. 标志传播失效
由于SafeBuffer#%未传播@html_unsafe标志,格式化后的字符串被错误标记为html_safe。
STEP 5
5. 执行XSS
ERB模板渲染引擎认为字符串安全,不进行HTML转义直接输出,导致恶意脚本在受害者浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-33170 require 'active_support/core_ext/string/output_safety' # Create a SafeBuffer safe_str = ActiveSupport::SafeBuffer.new("Hello ") # Mutate in place safe_str.gsub!("Hello", "World") # Use untrusted input with % untrusted_input = "<script>alert(1)</script>" result = safe_str % untrusted_input # Check vulnerability if result.html_safe? puts "[VULNERABLE] Result is marked html_safe: #{result}" else puts "[PATCHED] Result is not html_safe" end

影响范围

Ruby on Rails Active Support < 8.1.2.1
Ruby on Rails Active Support < 8.0.4.1
Ruby on Rails Active Support < 7.2.3.1

防御指南

临时缓解措施
建议开发者尽快升级Ruby on Rails Active Support库。若无法立即升级,应审查代码中是否存在对SafeBuffer对象进行原地修改(如gsub!)后紧接着使用%操作符进行格式化的逻辑,并手动对结果进行HTML转义或避免使用此类操作模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表