WordPress 3.0.4 vyšel nečekaně kvůli kritické bezpečnostní chybě

I když nás od chystaného WordPressu 3.1 dělí opravdu už jen několik posledních dní (vyzkoušet už bez obav můžete nejnovější novoroční Release Candidate 2), přesto se koncem roku 2010 nečekaně objevila ještě jedna důležitá bezpečnostní aktualizace v podobě WordPressu 3.0.4, jehož načasování poměrně dobře svědčí o závažnosti nalezeného problému.

Kritická bezpečnostní chyba umožňující využití metody Cross-site scripting (XSS) byla nahlášena vývojářům již před Vánocemi (konkrétně 19. prosince 2010), tedy necelé dva týdny po vydání WordPressu 3.0.3. Problém byl sice opraven hned následující den, ale protože souvisel s externí knihovnou a šlo o poměrně složité úpravy (regulární výrazy), trvalo více než týden než byla během vánočních svátků oprava (a vlastně celá knihovna) pořádně otestována. Provedenou opravu si můžete prohlédnout přímo ve zdrojovém kódu. Každopádně i podle vývojářů šlo o nejzávažnější bezpečnostní problém WordPressu v roce 2010. Po vcelku dlouhém období klidu se tak během jediného měsíce objevily hned tři nové verze.

Samotná chyba spočívala v chybném využití externí knihovny kses, kterou WordPress využívá pro filtrování a parsování uživateli vkládaného HTML kódu. Co vlastně tato knihovna konkrétně umí? Stručně řečeno hlídá (filtruje), aby někdo nevložil na web nějaký škodlivý (zakázaný) HTML kód, např. při vkládání komentáře. S její pomocí si tak můžete jednoduše nadefinovat, které HTML značky chcete nechat uživatelům povolené a zakázat např. klikací URL odkazy. A právě v případě odkazů byla objevena chyba – stačí když při vkládání HTML odkazu někdo nahradil atribut href velkými písmeny (HREF) a pak už stačilo jen přidat škodlivý JavaScriptový kód. Následky pak už závisejí na konkrétním škodlivém kódu. Ale lepší než dlouhé vysvětlování bude jednoduchý příklad:

<a HREF="javascript:eval(document.getElementById('site-title').innerHTML+=' Důležitá zpráva! Na webu separatista.net naleznete zdarma češtinu pro WordPress!');">Důležitá zpráva</a>

Vložte výše uvedený HTML kód jako komentář na nějakém webu ve WordPressu, který ještě nebyl aktualizován na nejnovější opravnou verzi WordPressu 3.0.4, a komentář bude správně vložen a také zobrazen v administraci. A pokud na tento odkaz administrátor náhodou klikne, zobrazí se mu nadpis přímo v záhlaví administrace, čímž na sebe docela výrazně upozorní. Podobným způsobem je možné získat i např. cookies přihlášeného uživatele a mnohé další věci (podobný popis, anglicky).

Varováním pro tuto bezpečnostní chybu sice mohly být již některé dříve diskutované problémy s touto knihovnou, naštěstí ale nešlo zcela o příklad ignorance dlouhodobě známých problémů, jako tomu bohužel bylo v případě WordPressu 3.0.2 a WordPressu 2.9.2, kdy tyto verze nemusely být vůbec vydány, pokud by vývojáři trochu pozorněji sledovali nahlášené chyby. Jediným řešením je tedy pravidelně aktualizovat, protože webů fungujících ve WordPressu je stále více a hackeři tyto chyby rádi vyhledávají (cílem je virtuální sláva) a často i zneužívají (cílem je vlastní obohacení či jen způsobená škoda). Jedním z aktuálních příkladů z poslední doby je např. útok na weby hostované u americké společnosti Dreamhost, kde hackeři zneužili jedné ze starších chyb a pokud někdo své weby již delší dobu neaktualizoval, tak musel řešit zase několik problémů navíc a strávil tím určitě více času než jsou dvě kliknutí myší potřebné pro automatickou aktualizaci. Chyba byla samozřejmě opravena i v chystaném WordPressu 3.1, nadále se ale vyskytuje ve starších verzích (už nepodporovaných, např. ve WordPressu 2.9.2), takže ještě jednou raději všem doporučujeme aktualizovat na nejnovější verzi!

A nakonec se ještě vrátíme k samotné knihovně kses, na kterou není třeba kvůli objevené chybě zanevřít, protože díky ní můžete ve WordPressu využít několik zajímavých funkcí, např. wp_kses(). Samotný popis je už ale na samostatný článek, zatím můžete nastudovat podrobný návod (anglicky), který představuje pokročilejší možnosti využití (nejen filtrování HTML kódu, ale i jeho parsování a využití filtrů WordPressu). Doplněna byla nově také licence využívané knihovny, kterou před mnoha lety sám Matt Mullenweg při implementaci do WordPressu odstranil, čím došlo de facto k jejímu porušení.

WordPress 3.0.4 obsahuje také starou verzi pluginu Akismet, takže pokud jste již plugin dříve aktualizovali, tak ho po instalaci aktuální bezpečnostní opravy budete muset aktualizovat ještě jednou. Toto podivné chování bude snad odstraněno v některé z dalších verzí, kdy už Akismet pravděpodobně nebude součástí instalačního balíčku. V oblasti českého překladu se nezměnilo vůbec nic, takže můžete zatím klidně aktualizovat na anglickou verzi, i když čeština pro WordPress 3.0.4 možná nakonec stejně vyjde a bude použita k testovacím účelům (přímé napojení lokalizace na aplikaci GlotPress).

Nejoblíbenější hosting pro WordPress WEDOS.cz

3 thoughts on “WordPress 3.0.4 vyšel nečekaně kvůli kritické bezpečnostní chybě”

  1. Dobrý den, rád bych se zeptal na plugin WP-TABLE RELOADED. Pokud importuji text bez diakritiky je vše vpořádku, jakmile použiju CSV a importuji češtinu, výsledkem jsou klikyháky. Pulgin jsem odebral a znovu přidal, čeština pro 3.0.4 byla instalována automaticky i manuálně. Je možné néjakým příkazem donutit akceptovat tento plugin češtinu a nebo je chyba v CSV souboru. Mimochodem import pres format html neni prilis fukcni. Dekuji za info.

  2. Libor: Pravděpodobně bude problém v kódování souboru (podobně jsme to řešili v našem fóru, kdy zase nefungoval export). Zkuste .csv soubor uložit ve formátu utf-8, např. pomocí editoru PSPad. Pokud to nepomůže, tak někde nahrajte kus příslušného .csv souboru, ať to můžeme vyzkoušet. V další diskuzi pak prosím pokračovat ve fóru, tento článek nemá s tímto pluginem nic společného…

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *