Bezpečnostní vydání z roku 2021-12/Často kladené otázky
V MediaWiki byla nalezena řada zranitelností, které útočníkovi umožňují únik obsahu stránek ze soukromých wikin a obejít oprávnění k úpravám.
Hlavním vektorem tohoto úniku wiki je použití zranitelných akcí na stránkách, které jsou uvedeny v $wgWhitelistRead a jsou tedy veřejně přístupné.
MediaWiki nyní ve výchozím nastavení zpřístupňuje akci "zobrazit" veřejně pouze na stránkách v doméně $wgWhitelistRead.
Tyto problémy jsou opraveny ve verzích 1.35.5, 1.36.3 a 1.37.1, odkazy na tarbally a záplaty naleznete v oznámení.
Uživatelům se důrazně doporučuje aktualizovat na verzi 1.45.1 (nejnovější stabilní), 1.44.3 (starší verze) nebo 1.43.6 (starší verze s dlouhodobou podporou).
Jaké jsou problémy?
- CVE-2021-44858: Funkce "zpět" (
action=edit&undo=##&undoafter=###) umožňovala útočníkovi zobrazit obsah libovolných revizí bez ohledu na to, zda k tomu měl oprávnění. Toto bylo zjištěno i u akcí "mcrundo" a "mcrrestore" (action=mcrundoaaction=mcrrestore). - CVE-2021-45038: Funkce "vrácení zpět" (
action=rollback) mohla být předána jako speciálně vytvořený parametr, který útočníkovi umožňoval zobrazit obsah libovolných stránek bez ohledu na to, zda k tomu měl oprávnění. - CVE-2021-44857: Akce "mcrundo" a "mcrrestore" (
action=mcrundoaaction=mcrrestore) správně nekontrolovaly oprávnění k úpravám a umožňovaly útočníkovi vzít obsah libovolné revize a uložit jej na libovolnou stránku dle vlastního výběru. Toto se týká jak veřejných wikinách, tak i veřejných stránek na soukromých wikinách.
Nemám čas na opravu, jak to můžu vypnout?
Níže uvedené řešení již není považováno za bezpečné.
K vašemu LocalSettings.php přidejte následující:
$wgActions['mcrundo'] = false;
$wgActions['mcrrestore'] = false;
Pokud je vaše wiki soukromá (pro zobrazení stránek je nutné přihlášení), budete muset také nastavit:
$wgWhitelistRead = [];
$wgWhitelistReadRegexp = [];
Mělo by to plně deaktivovat zranitelný kód. Tyto změny budou fungovat i pro zranitelné verze MediaWiki, které jsou na konci jejich životnosti a nemají k dispozici opravu.
Pokud jste použili $wgWhitelistRead, abyste odhlášeným uživatelům umožnili zobrazit hlavní stránku s textem nápovědy, měli byste tento text nápovědy přesunout do zprávy MediaWiki:Loginreqpagetext, která se zobrazuje při chybě "vyžadováno přihlášení".
Byl jsem ovlivněn/a?
- Pokud je vaše wiki veřejná (stránky může číst kdokoli): ano
- Pokud je vaše wiki soukromá a
$wgWhitelistReadnebo$wgWhitelistReadRegexpmá alespoň jednu stránku: ano
Pokud použijete rozšíření jako Lockdown nebo Whitelist Pages, abyste některé stránky znemožnili číst některým uživatelům, pravděpodobně se to dotkne i vás.
Které verze jsou zranitelné?
Všechny verze MediaWiki od verze 1.23.0 do 1.34.x a 1.35.x, 1.36.x, 1.37.x před opravami (viz horní část) jsou zranitelné vůči obcházení oprávnění pro čtení soukromé wiki (CVE-2021-44858, CVE-2021-45038).
Všechny verze MediaWiki od verze 1.32.0 do 1.34.x a 1.35.x, 1.36.x, 1.37.x před opravami (viz horní část) jsou zranitelné vůči obcházení oprávnění k úpravám (CVE-2021-44857).
Jak se tohle dlouhodobě opravuje?
Všechny akce kromě "zobrazení" nyní vyžadují explicitní uživatelské oprávnění "čtení". Je to podobné jako kontroly oprávnění používané v rozhraních Action API a REST. Pokud se v akcích najdou další zranitelnosti, nebudou alespoň zneužitelné pro nepřihlášené uživatele na soukromých wikinách.
Akce, které musí být použitelné na stránkách $wgWhitelistRead, mohou přepsat novou funkci Action::needsReadRight().
Jak zjistím, jestli někdo zneužil mou wiki?
Hledejte v protokolech přístupu hodnotu action=mcrundo nebo action=mcrrestore. Pokud jste výslovně nepovolili rozšíření, které používá revize s více obsahy, pro tyto akce neexistuje legitimní využití.
Dále hledejte požadavky typu action=edit&undo=###&undoafter=### a zkontrolujte, zda ID revizí patří k jinému názvu než k upravované stránce.
V případě chyby vrácení zpět hledejte action=rollback&from=..., kde parametr "from" představuje vyloučení šablony (například from={{:private page}}).
Tato chyba nezpůsobuje žádnou ztrátu dat, takže veškeré akce zápisu, které by útočník mohl provést, budou zaznamenány v historii stránky stejně jako všechny ostatní úpravy.
Kredit
Problém objevil uživatel Dylsss, mnohokrát mu děkujeme za identifikaci a nahlášení problému. Pokud v MediaWiki najdete chybu, podívejte se prosím na postup pro hlášení bezpečnostních chyb.