2021-12安全发布/常见问题解答

This page is a translated version of the page 2021-12 security release/FAQ and the translation is 100% complete.

MediaWiki中发现了一系列漏洞。这些漏洞导致攻击者可以通过私人wiki泄露页面内容并绕过编辑权限。 此次wiki泄漏的主要载体是在$wgWhitelistRead 中列出的页面上使用易受攻击的操作,因此可被公开访问。 默认情况下,MediaWiki现在仅在$wgWhitelistRead 中的页面上公开“查看”的操作权限。 这些问题在1.35.5、1.36.3和1.37.1版本中得到修复,压缩包和补丁的链接请参阅公告

有哪些问题?

  • CVE-2021-44858: “撤消”功能 (action=edit&undo=##&undoafter=###) 允许攻击者查看任意版本的修订内容,无论他们是否有权限这样做。在mcrundo和mcrrestore的操作(action=mcrundoaction=mcrrestore)中也发现了这一点。
  • CVE-2021-45038:“回退”功能(action=rollback)能通过传递一个特殊构建的参数,使攻击者能够查看任意页面的内容,无论他们是否是否有权限这样做。
  • CVE-2021-44857:“mcrundo”和“mcrrestore”功能(action=mcrundoaction=mcrrestore)没有正确检查编辑权限,允许攻击者获得任意版本的页面内容并保存到他们制定的页面中。这将会影响到公共wiki站点和私有wiki站点的公共页面。

我没时间打补丁,我如何去禁止这些功能?

把这些添加到您的LocalSettings.php:

$wgActions['mcrundo'] = false;
$wgActions['mcrrestore'] = false;

如果您的wiki站点是私用的(需要登录才能查看页面),您需要设置以下配置:

$wgWhitelistRead = [];
$wgWhitelistReadRegexp = [];

它应该完全禁用易受攻击的代码。这些更改也适用于没有可用补丁而易受攻击的已结束技术支持的MediaWiki版本。

如果您使用 $wgWhitelistRead 允许注销的用户查看带有帮助文本的主页,请将这些信息迁移到MediaWiki:Loginreqpagetext中,这个消息页面会展示“需要登录”的错误信息。

我受到影响了吗?

如果您使用了Lockdown 或者Whitelist Pages 类似的扩展来限制一些用户不能读取一些页面,这可能也会受影响。

哪些版本易受攻击?

自1.23.0版至1.34.x版的所有MediaWiki版本,以及修复前的1.35.x、1.36.x、1.37.x(參见顶部部分),都存在私有wiki阅读权限绕过的漏洞(CVE-2021-44858,CVE-2021-45038)。

自1.32.0版至1.34.x版,以及修复前的1.35.x版、1.36.x版、1.37.x版的所有MediaWiki版本(參见顶部部分),都存在编辑权限绕过的问题(CVE-2021-44857)。

此问题是如何解决的?如何保证不会复发?

除了“查看”之外的所有操作现在都需要明确的“阅读”用户权限。 这类似于 Action 和 REST API 中使用的权限检查。如果在这些操作中发现更多漏洞,它们至少不会被私有wiki站点上的登出用户利用。

$wgWhitelistRead 设置的页面可用的操作能被新的Action::needsReadRight()方法所覆盖。

如何查看是否有人在我的wiki站点上利用了它?

检查访问日志有没出现 action=mcrundoaction=mcrrestore,除非您启用了multi-content revisions的插件,否则这些参数是没用的。

此外,检查action=edit&undo=###&undoafter=###的请求,检查里面的版本ID对应的来源页面和被编辑页面是不是相同。

对于“回退”功能缺陷,检查action=rollback&from=...请求,from参数的内容是不是一个模板嵌入的wikicode(例如:from={{:private page}})。

这些错误不会导致任何数据丢失,因此攻击者可能采取的任何写入操作都将像所有其他编辑一样,记录在页面历史记录中。

鸣谢

该问题由Dylsss发现,非常感谢他识别并报告问题。 如果您发现MediaWiki的程序缺陷,请查看报告安全缺陷的处理流程。