报告者:Marco Paciaroni (BomboBombone)。
MediaWiki 的 action=revisiondelete 在未检查 suppressrevision 的情况下接受了 suppress=no。拥有 viewsuppressed 和特定类型管理权限的调用者,即使没有管理隐藏的权限,也可以移除受限位。
一种权限配置授予了 viewsuppressed 以及 deleterevision 或 deletelogentry,但没有授予 suppressrevision,这允许调用者暴露受隐藏工作流保护的材料。这个跨用户授权问题取决于这些权限被分离。
准备一个仅包含无害金丝雀字符串的一次性修订版本,并在隔离的本地 wiki 上隐藏其内容。创建一个拥有 viewsuppressed 和 deleterevision 但没有 suppressrevision 的测试账户。该脚本发送存在漏洞的 API 请求,检查匿名请求是否能看到金丝雀字符串,并使用单独的管理员测试账户恢复隐藏。
该脚本拒绝非回环 wiki URL,检查两个账户的权限,提示输入两个密码,并在更改测试修订版本的可见性之前要求输入确认。仅使用一次性本地测试夹具。
python poc.py --base http://127.0.0.1:8080 --username ViewOnlyEditor --restore-username LocalAdmin --page-title CVE102975DisposablePage --revision-id 123 --confirm-test-fixture
修订版本 ID 和页面标题必须指向被隐藏的金丝雀测试夹具。恢复账户需要 suppressrevision。