Zavolat Další kontakty >
E-mail Kontakty

Zranitelnost ve Wordpress pluginu Fancybox-for-WordPress 3.0.2

Byla zveřejněna zranitelnost typu persistentního XSS ve velmi rozšířeném pluginu Fancybox for Wordpress verze 3.0.2. Pokud tento plugin používáte, zkontrolujte si zda používáte aktuální verzi!

Tato chyba vznikla obdobně jako chyba ve známém pluginu Mail Poet, která se objevila v létě - neošetřením hooku admin_init (příp. is_admin) + neošetřením potenciálních uživatelských vstupů.

Hook admin_init je se spouští při jakékoliv manipulaci s administrací, může být aktivován i voláním admin-post.php/admin-ajax.php - tento soubor může zprostředkovávat volání z frontendu do administrace pomocí formulářů nebo JavaScriptů v případě admin-ajax.php. V případě pluginu Mail Poet byl problém prakticky stejný.

Zdrojový kód zranitelné verze pluginu FancyBox for Wordpress vypadá takto:

 

Vidíme zde funkci mfbfw_admin_options. Zde se načítá z tabulky prefix_options nastavení pojmenované mfbfw. Dále se testuje, zda byl předán v URL parametr page a zda obsahuje hodnotu fancybox-for-wordpress. Dále je zde parametr action, který může mít hodnotu update a reset. Update je pro nás zajímavý, protože trvale ukládá zaslané nastavení.

"Ochrana" uživatelského vstupu je zde udělána tak, že se na celé předané pole $_POST['mfbfw'] aplikuje PHP funkce stripslashes, která odstraňuje zpětná lomítka. Spíše než pro ochranu je to zde z důvodu odstranění zpětných lomítek, které do řetězců automaticky přidávají při zapnuté direktivě magic_quotes_gpc. Dále je všechny prvky pole již uložené v settings použita wordpress funkce convert_chars. Tato funkce opravuje některé neplatné Unicode znaky, odstraňuje tagy <title> a <category>, nahrazuje opuštěné & za &amp; a převádí některé nepárové tagy na validné XHTML tvar (<br> na  <br />). Nelze tedy také hovořit o ochraně.

Funkce mfbfw_admin_options je spouštěna v hooku admin_init, který se spouští při práci s administrací - pokud tedy zavoláme metodou POST například admin-ajax.php?page=fancybox-for-wordpress, dojde k aktivaci a uložení námi zaslaných hodnot do nastavení.

Druhá část zranitelnosti je ve funkci  mfbfw_init, která nastavení načítá do frontendu přes proměnnou $settings:

 

$settings jsou pak použity při generování obslužného javascriptu v HTML kódu:

Je vidět, že uložené nastavení je přímo vypsáno, tak jak jsme ho poslali.

 

Pokud si tedy při dotazu na příslušnou adresu s pošleme mfbfw[padding]=Ahoj, tak ve vygenerovaném kódu pro uživatele uvidíme toto:

Řetězec "Ahoj" je nyní uložen v databázi a ve zdrojovém kódu ho najdou všichni uživatelé. "Ahoj" žádnou škodu nezpůsobí, ale pokud by zaslaný řetězec vypadal například </script><script>zlá_funkce()</sript>, tak první uzavírací tag ukončí provádění skriptu (původní skript bude špatně ukončen = nebude fungovat, ale to útočníkovi nevadí), následuje správě otevřen a uzavřen zlý skript a zbytek původního skriptu opět útočníka nezajímá. Setkal jsem se škodlivými funkcemi, které do stránek vkládaly iframy, ale i s nebezpečnějšími skripty typu Beef.

Autoři ve verzi 3.0.3 provedli úpravu, že z této části kódu odstranili action='update' a pro action='reset' testují, zda požadavek přišel z příslušné stránky administrace - check_admin_referer( 'mfbfw-options-reset' ) - tato funkce nekontroluje pouze HTTP_REFERER (ten lze zfalšovat), ale testuje i správnou hodnotu wp_nonce - zda byl formulář opravdu zaslán z administrace WP.

Vzhledem k populárnosti tohoto pluginu - má více než půl milionu stažení - se jedná bezpečnostní chybu s velmi velkým dopadem.

Pokud tedy používáte FancyBox  for Wordpress (otevřete zdrojový kód stránky v prohlížeči a zkuste vyhledat řetězec Fancybox for WordPress, který bude v komentáři s verzí pluginu), zkontrolujte verzi a pokud není alespoň 3.0.3, okamžitě aktualizujte!

Nejčastěji jsem se setkal s tím, že útočník do kódu vkládá odkaz na nebezpečný flash soubor:

Pokud je pro vás bezpečnost Vašeho Wordpress webu důležitá a nechcete se o ni starat sami, můžete nás poptat na správu a aktualizace Wordpressu.

Pro zdokonalení vaší práce s Wordpressem můžete také přijít na konferenci Wordcamp Praha 2015, která se koná 28.2. v Praze.

Komentáře

Přidat komentář

K článku prozatím nebyly přidány žádné komentáře.