vydání systému řízení webového obsahu . Tento vydání je pozoruhodné zakončením na realizaci kontroly aktualizací a dodatků pomocí digitálního podpisu.
Dosud bylo při instalaci aktualizací ve WordPressu klíčovým faktorem zajištění bezpečnosti důvěra v infrastrukturu a servery WordPress (po načtení se prováděla kontrola hash, aniž by byla ověřována zdroj). V případě kompromitace serverů projektu měli útočníci možnost pozměnit aktualizaci a šířit škodlivý kód mezi weby na bázi WordPress, které využívaly systém automatické instalace aktualizací. V souladu s dříve používaným modelem doručování na základě důvěry by taková změna zůstala uživateli nepovšimnuta.
Vzhledem k tomu, že podle projektu w3techs je platforma WordPress používána na 33,8 % webových stránek na síti, incident by měl katastrofální rozsah. Přitom nebezpečí kompromitace infrastruktury nebylo hypotetické, ale zcela reálné. Například před několika lety jeden ze bezpečnostních výzkumníků nalezl zranitelnost, která umožnila útočníkovi spustit jeho kód na straně serveru api.wordpress.org.
V případě použití digitálních podpisů by získání kontroly nad serverem distribuce aktualizací nevedlo k narušení uživatelských systémů, protože k provedení útoku by bylo navíc nutné získat zvlášť uložený privátní klíč, pomocí kterého se aktualizace podepisují.
Zavedení kontroly zdroje aktualizací pomocí digitálního podpisu bylo ztíženo tím, že podpora potřebných kryptografických algoritmů byla nedávno součástí standardního dodání PHP. Potřebné kryptografické algoritmy se objevily díky integraci knihovny do hlavního jádra . Minimální podporovaná verze PHP, která je deklarována ve WordPressu, je verze Řešením byla
a začlenění kompaktní verze Libsodium do WordPress 5.2 — Sodium Compat , ve kterém je na jazyce PHP implementována minimální sada algoritmů pro ověřování digitálních podpisů. Implementace by mohla být lepší z hlediska výkonu, ale kompletně řeší problém s kompatibilitou a umožňuje vývojářům pluginů začít implementaci moderních kryptografických algoritmů.
K vytváření digitálních podpisů se používá algoritmus , vyvinutý za účasti Dániela Bernstein (Daniel J. Bernstein). Digitální podpis se vytváří pro hodnotu hash SHA384, vypočítanou z obsahu archivu s aktualizací. Ed25519 má vyšší úroveň bezpečnosti než ECDSA a DSA a vykazuje velmi vysokou rychlost ověřování a generování podpisů. Odolnost proti prolomení pro Ed25519 je přibližně 2^128 (ve středním případě bude pro útok na Ed25519 potřebné provést 2^140 bitových operací), což odpovídá odolnosti algoritmů jako NIST P-256 a RSA s velikostí klíče 3000 bitů nebo 128-bitovému blokovému šifru. Ed25519 také není náchylný k problémům s kolizemi v hashech, není citlivý na útoky pomocí analýzy časování cachování a útoky pomocí bočních kanálů.
Ve verzi WordPress 5.2 ověřování digitálního podpisu zatím pokrývá pouze základní aktualizace platformy a ve výchozím nastavení neblokuje aktualizaci, ale pouze informuje uživatele o vzniklém problému. Byla přijata rozhodnutí o nezahrnutí blokace ve výchozím nastavení kvůli nutnosti plného ověření a obcházení . V budoucnu se plánuje přidat ověřování digitálních podpisů také pro verifikaci zdroje instalace motivů a pluginů (výrobci budou moci podepisovat vydání svým klíčem).
Kromě podpory digitálních podpisů ve WordPress 5.2 lze zaznamenat následující změny:
- Do sekce „Zdraví webu“ byly přidány dvě nové stránky pro ladění typických problémů s nastavením, a také byla poskytnuta forma, skrze kterou mohou vývojáři zanechávat ladící informace administrátorům webu;
- Byla přidána implementace „bílého obrazovky smrti“, která se zobrazuje v případě fatálních problémů a pomáhá administrátorovi samostatně vyřešit problémy související s pluginy nebo motivy přepnutím do speciálního režimu obnovy po selhání.
- Byla implementována kontrola kompatibility s pluginy, která automaticky ověřuje, zda je možné plugin použít v aktuální konfiguraci s ohledem na verzi PHP. Pokud pro fungování pluginu vyžaduje vyšší verzi PHP, systém automaticky zablokuje jeho aktivaci.
- Byla přidána podpora pro aktivaci modulů s JavaScriptovým kódem pomocí a ;
- Byla přidána nová šablona privacy-policy.php, která umožňuje přizpůsobit obsah stránky s podmínkami ochrany osobních údajů.
- Pro motivy byla přidána obsluha wp_body_open hook, která umožňuje vložení kódu ihned za tag body.
- Požadavky na minimální verzi PHP byly zvýšeny na 5.6.20, v pluginech a šablonách se objevila možnost použití jmenných prostorů a anonymních funkcí.
- Bylo přidáno 13 nových ikon.
Dále lze zmínit kritická zranitelnost v pluginu WordPress (CVE-2019-11185). Zranitelnost umožňuje spuštění libovolného PHP kódu na serveru. Plugin je používán na více než 27 tisících webů pro zajištění interaktivního chatu s návštěvníkem, včetně webů takových společností jako IKEA, Adobe, Huawei, PayPal, Tele2 a McDonald's (Live Chat se často používá pro realizaci vyskakovacích chatu na stránkách firem s nabídkou promluvit si s pracovníkem).
Problém se projevuje v kódu pro nahrávání souborů na server a umožňuje obejít kontrolu povolených typů souborů a nahrát na server PHP skript, který je poté možné spustit přímým přístupem přes web. Je zajímavé, že loni byla v Live Chatu již odhalena podobná zranitelnost (CVE-2018-12426), která umožňovala nahrání PHP kódu pod záminkou obrázku, přičemž byl uveden jiný typ obsahu v poli Content-type. V rámci opravy problému byly přidány další kontroly na whitelistu a MIME typ obsahu. Jak se ukázalo, tyto kontroly byly implementovány nesprávně a bylo možné je snadno obejít.
Přímé nahrávání souborů s příponou „.php“ je zakázáno, ale do černé listiny nebyla přidána přípona „.phtml“, která je na mnoha serverech spojena s interpretem PHP. Whitelist povoluje pouze nahrávání obrázků, ale lze ho obejít použitím dvojité přípony, například „.gif.phtml“. Aby bylo možné obejít kontrolu MIME typu, stačilo před otevřením tagu s PHP kódem uvést řetězec „GIF89a“.
Zdroj: opennet.ru
