Lançamento de segurança de dezembro de 2021 / Perguntas frequentes
Uma série de vulnerabilidades foi encontrada no MediaWiki que permite a um invasor vazar o conteúdo de páginas de wikis privados e contornar permissões de edição.
Uma série de vulnerabilidades foi encontrada no MediaWiki que permite a um invasor vazar o conteúdo de páginas de wikis privados e contornar permissões de edição.
Agora o MediaWiki torna apenas a ação de ‘visualização’ publicamente acessível em páginas em $wgWhitelistRead
por padrão.
Esses problemas foram corrigidos nas versões 1.35.5, 1.36.3 e 1.37.1, consulte o [anúncio https://lists.wikimedia.org/hyperkitty/list/mediawiki-announce@lists.wikimedia.org/message/QEN3EK4JXAVJMJ5GF3GYOAKNJPEKFQYA/] para links de tarballs e patches.
Quais são os problemas?
- CVE-2021-44858: O recurso ‘desfazer’ (
action=edit&undo=##&undoafter=###
) permitia que um invasor visualizasse o conteúdo de revisões arbitrárias, independentemente de ter permissão para fazê-lo. Isso também foi encontrado nas ações ‘mcrundo’ e ‘mcrrestore’ (action=mcrundo
eaction=mcrrestore
). - CVE-2021-45038: O recurso ‘rollback’ (
action=rollback
) poderia receber um parâmetro especialmente criado que permitia a um invasor visualizar o conteúdo de páginas arbitrárias, independentemente de ter permissão para fazê-lo. - CVE-2021-44857: As ações ‘mcrundo’ e ‘mcrrestore’ (
action=mcrundo
eaction=mcrrestore
) não verificavam adequadamente as permissões de edição e permitiam que um invasor pegasse o conteúdo de qualquer revisão arbitrária e o salvasse em qualquer página de sua escolha. Isso afeta tanto wikis públicas quanto páginas públicas em wikis privadas.
Eu não tenho tempo para aplicar o patch, como desabilito isso?
Adicione o seguinte ao seu LocalSettings.php:
$wgActions['mcrundo'] = false;
$wgActions['mcrrestore'] = false;
Se o seu wiki é privado (requer login para visualizar páginas), você também precisará definir:
$wgWhitelistRead = [];
$wgWhitelistReadRegexp = [];
Isso deve desabilitar completamente o código vulnerável. Essas alterações também funcionarão para versões do MediaWiki vulneráveis e sem suporte que não possuem um patch disponível.
Se você usou $wgWhitelistRead
para permitir que usuários não logados vissem a página principal com texto de ajuda, em vez disso, mova esse texto de ajuda para a
mensagem MediaWiki:Loginreqpagetext, que é exibida no erro ‘login necessário’.
Eu fui afetado?
- Se o seu wiki é público (qualquer pessoa pode ler páginas): sim
Se o seu wiki é privado e $wgWhitelistRead
ou $wgWhitelistReadRegexp
tem pelo menos uma página: sim
Se você usa uma extensão como Lockdown ou Whitelist Pages para tornar algumas páginas ilegíveis para alguns usuários, também é provável que seja afetado.
Quais versões são vulneráveis?
Todas as versões do MediaWiki desde 1.23.0 até 1.34.x e 1.35.x, 1.36.x, 1.37.x antes das correções (veja o topo da seção #contentSub), são vulneráveis às violações de permissões de leitura de wikis privados (CVE-2021-44858, CVE-2021-45038).
Todas as versões do MediaWiki desde 1.32.0 até 1.34.x, e 1.35.x, 1.36.x, 1.37.x antes das correções (veja a seção superior), são vulneráveis à violação de permissões de edição (CVE-2021-44857).
Como isso está sendo corrigido a longo prazo?
Todas as ações, exceto “visualizar”, agora exigem um direito de usuário “ler” explícito. Isso é semelhante às verificações de permissão usadas nas APIs de Ação e REST. Se forem encontradas mais vulnerabilidades nas ações, pelo menos elas não serão exploráveis por usuários desconectados em wikis privados.
Ações que precisam ser usadas em páginas $wgWhitelistRead
podem substituir a nova função Action::needsReadRight()
.
Como posso ver se alguém explorou isso no meu wiki?
Procure por action=mcrundo
ou action=mcrrestore
em seus registros de acesso. A menos que você tenha habilitado especificamente uma extensão que use revisões de conteúdo múltiplo, não há uso legítimo para essas ações.
Além disso, procure por solicitações action=edit&undo=###&undoafter=###
e verifique se os IDs de revisão pertencem a um título diferente da página que está sendo editada.
Para o bug de reversão, procure por action=rollback&from=...
onde o parâmetro “de” é uma transclusão de modelo (por exemplo, from={{:private page}}
).
Este bug não causa perda de dados, então todas as ações de gravação que um invasor poderia ter tomado serão registradas no histórico da página como todas as outras edições.
== Crédito ==
O problema foi descoberto por Dylsss, muitos agradecimentos a eles por identificar e relatar o problema. Se você encontrar um bug no MediaWiki, consulte o processo para relatar bugs de segurança.