Discuz! X5.0 挂了条公告,CVE-2026-49952,类型一栏写的是认证绕过。影响范围是 20260320 到 20260501 这两个日期之间的 X5.0 版本,CVSS 4.0 给了 9.3。

先说它到底能干什么,比「认证绕过」四个字吓人得多。它打的目标不是前台帖子、也不是后台登录,而是数据库的备份和恢复接口——就是后台那套「数据备份」按钮背后真正在跑的东西,具体是 dbbak.php 暴露出来的那个备份 API。攻击者不用账号、不用登录,就能拿到数据库导入/导出的能力。按公告的措辞,是「未认证远程攻击者藉此获得对数据库备份与恢复功能的未授权访问」。整个库能被人拷走,也能被人盖回来。

根子不复杂,但很典型:UCenter 集成那块和备份接口 dbbak.php 共用了一把加密密钥,归在 CWE-323——密钥/随机数被两处复用。密钥本该只服务一个用途;一旦两处共用,在 A 处合法的加密结果,就能被搬到 B 处冒充一个合法凭据。

链子本身还挺讲究。Discuz 登录流程里会把用户名拿去写登录日志,走的是 logging_ctl::logging_more() 那段。攻击者在用户名字段里塞构造好的数据,等于把登录日志的加密逻辑当成一台「签名机」来用——你喂输入、它吐一个带合法签名的东西,这就是所谓的加密 oracle。拿到这个被「合法签名」过的 token,回头再去调数据库备份/恢复接口,授权那一步就被绕过去了。公告里还加了一句:配合一个竞争条件,还能冒充任意用户。

这条 CVE 不是一个孤立的点。报它的是 Karmainsecurity(编号 KIS-2026-09),同一批他们还发过一篇题目很直白的分析——「chaining bugs in Discuz: from race condition to RCE」。意思很明白:单看这个 CVE 是认证绕过加数据库沦陷;把竞争条件那条线往上接,是能一路接到命令执行的。

版本和处理:

  • 受影响:Discuz! X5.0 的 20260320 – 20260501(版本号就是发布日期)
  • 修复:升到 20260501 之后的版本;上游对应修复提交是 Gitee DiscuzX 仓库的 9962dad5
  • 更早的 X3.x 线不在这条 CVE 范围内,但那些分支早停了安全维护,能升就别留着

自查两条命令:

# 1) 看自己的版本(站点根目录下)
grep -E "DISCUZ_(VERSION|RELEASE)" source/discuz_version.php

# 2) 备份接口别对公网开门
curl -sI https://你的论坛域名/dbbak.php

第一条:RELEASE 落在 20260320–20260501 区间,就在范围内。第二条看回显——正常的站不该让未认证请求拿到可用的备份接口内容。把备份脚本、导库脚本直接从 Web 目录晾在公网上的习惯,平时看不出毛病,出事就是从这儿进,跟前面那波 PHP2Shell、另一个 PHP 洞 是同一本账。

说句实在的,这条我第一眼差点划过去。Discuz 这两年点名点得多,看到「认证绕过」四个字有点麻木。真让我停下来的是「数据库备份接口」——这不是什么新功能,是十几年前就有的老东西。雷达里也提了一句,国内还在跑 Discuz 的老论坛存量仍然不小,很多是套件装完就没再动过版本。这种「没人管、又不肯下线」的站,恰恰是这类洞最喜欢的宿主。

来源:NVD CVE-2026-49952、VulnCheck 公告(Discuz X5.0 dbbak.php encryption oracle)、Karmainsecurity KIS-2026-09。