简介
vBulletin是一款功能强大的开源论坛软件,它支持多种数据库,如MySQL、PostgreSQL等。它提供了灵活的权限管理系统,让管理员可以精细控制不同用户组和用户的访问权限和功能使用,适用于各种规模的在线社区。
影响版本
5.0.0 <= vBulletin < 5.7.6
6.0.0 <= vBulletin < 6.0.4
漏洞成因
vBulletin 的 /ajax/api/ad/replaceAdTemplate
接口本身就存在设计缺陷,而 PHP 8.1+ 的行为变化又放大了这个缺陷,最终导致可远程命令执行(RCE)。
该接口底层调用 vBulletin 的 API 方法 vB_Api_Ad::replaceAdTemplate()
。在 PHP 7 及以下版本中,即使攻击者手工构造请求,protected/private 方法默认无法直接通过外部请求调用;但 PHP 8.1 后,ReflectionMethod::setAccessible(true)
的行为发生变化,使得 vBulletin 依赖反射保护的逻辑失效——攻击者可以直接调用内部方法。
接口用途
ajax/api/ad/replaceAdTemplate
是 vBulletin 提供的 AJAX API 接口,用于在后台管理中对广告模板内容进行替换。也就是说,这个接口原本的功能就是将用户提交的内容写到服务器端模板文件中,用于广告展示。
使用接口时需要用到这几个参数
routestring
这是 vBulletin AJAX 请求必须带的参数之一,用来告诉 vBulletin 调用哪个“路由”处理当前请求。这里的值是 ajax/api/ad/replaceAdTemplate
,表示希望调用广告模板的替换接口。
styleid
vBulletin 支持多套“风格/主题”,styleid
用于指定要操作哪个风格中的模板。数字 ID,默认 1 通常是“Default Style”,所以在大多数情况下,这个值 1 意味着对默认风格进行操作。
location
在 vBulletin 中是广告系统的一个参数,表示广告要显示的位置标识,比如“header”、“footer”、“sidebar”等。实际上是随意的自定义值——这个字段在漏洞利用中并不关键,只是需要带上才能通过接口的参数完整性校验。
template
关键参数,表示要把哪段模板内容写入到广告模板文件里
参数导致风险
关键参数是 template
,用户可以提交自定义模板内容。vBulletin 会把这个 template
的值直接写入到服务器端的模板文件里,并由后续访问的 PHP 解析执行。如果这里的内容中含有 可执行的 PHP 代码(比如 <?php system($_GET['cmd']); ?>
),模板文件一旦被访问,就会被 PHP 引擎执行,导致 RCE。
漏洞复现
除了 template
,其余字段(routestring/styleid/location)只是为了符合接口需要的参数格式,否则服务器会返回参数错误。其中最关键的是:routestring
选定漏洞接口;template
提供恶意代码;而 styleid
和 location
更多是对 vBulletin 模板系统的“配合参数”,对利用并无具体意义。
参考链接:
vBulletin远程代码执行漏洞 (CVE-2025-48827) 在野利用通告 - 安全内参 | 决策者的网络安全知识库vBulletin Remote Code Execution Vulnerabilities Exploited in the Wild (CVE-2025-48827 & CVE-2025-48828) – Qualys ThreatPROTECT