Stará zranitelnost WordPress pluginu Mail Poet 2.6.7

✍️ Vláďa Smitka
📅 22. 02. 2015

Plugin Mail Poet Newletters (wysija-newsletters) pro posílání newsletterů je jedním nejpopulárnějších pluginů na WordPress.org - aktuálně má téměř 3,5 miliónu stažení. Do tohoto pluginu je možné nahrávat vlastní HTML šablony pro výsledné e-maily. Šablona se nahrává jako zip soubor, který se po nahrání rozbalí do složky /wp-content/uploads/wysija/themes/jméno_šabony. V tomto zip souboru však mohou být i PHP skripty, které je možné následně spouštět (zabránit tomu lze zakázáním spouštění php skriptů ve složce uploads). Chybné použití hooku admin_init způsobilo, že soubor mohl nahrát prakticky kdokoliv.Hook admin_init se spouští při jakékoliv manipulaci s administrací, včetně zasílání dat z frontendu. Toho často využívají různé pluginy, které potřebují ukládat data, které získávají od návštěvníků - používají při tom soubory admin-ajax.php pro AJAXové požadavky a admin-post.php pro požadavky z formulářů.

Problémy byly v souboru helpers/back.php, kde se pouštějí funkce backendu zmíněným hookem admin_init. Z názvu hooku by se mohl zdát, že se spouští jen po načtení administrace, to pravděpodobně vedlo k jeho špatnému použití.

add_action('admin_init', array($this->controller, 'main'));

Útočníkovi tedy stačilo vytvořit falešný požadavek na nahrání svého zip souboru se škodlivým kódem:

/wp-admin/admin-post.php?page=wysija_campaigns&action=themeupload a jako data zaslat v proměnné my-theme zip soubor se škodlivým kódem. V tento moment se již útočník mohl jednoduše připojit na adresu nahraného souboru a provádět s webem co uznal z vhodné

Autoři rychle vydali verzi 2.6.7, kde se pokusili otestovat, zda má uživatel potřebná práva. Příliš se jim to ale nepodařilo. Přidali před výše zmíněný hook další, který nejprve otestoval práva a když neodpovídala, tak ukončil skript funkcí die().

Funkce verify_capability vypadá následovně:

Problémem je zde použití $_REQUEST. Tato proměnná v PHP zprostředkovává obecný přístup k datům zaslaným metodami $_POST, $_GET, $_COOKIE. Co se stane, pokud stejnou proměnnou pošleme jak pomocí POST tak GET? Záleží na nastavení direktivy request_order v php.ini. Ta defaultně dává přednost POST před GET. Toho útočníci využili a obešli podmínku substr( $_REQUEST['page'] ,0 ,7 ) == 'wysija_' tak, že poslali navíc $_POST['page'] = 'nesmysl' a díky tomu funkce vrátila true a nahrávání souboru mohlo bez ověření pokračovat.

Ve verzi 2.7.8 autoři již testují přímo $_GET, nelze ověření tedy předchozím způsobem obejít:

Zajímavé byly i okolnosti zveřejnění zranitelnosti, kdy se tvůrci pluginu ohradili proti Sucuri, že chybu zveřejnili velmi brzo. Uživatelé naopak Sucuri chválili za rychlé sdělení informace, že mohli plugin do vydání opravy dočasně vypnout.

V development sekci pluginu na WordPress.org naleznete všechny starší revize s opraveným kódem, pokud tedy hledáte původní zdrojové kódy, je třeba se podívat do SVN repozitáře.

Útok nejčastěji probíhal tak, že útočník nahrál škodlivý php skript, který následně infikoval všechny ostatní PHP soubory na webu. Pokud jste byli poškozeni, je cestou obnova z čisté zálohy a smazání a opětovné nahrání šablon do Mail Poet. Infikované soubory naleznete nejčastěji podle toho, že obsahují nečitelný blok kódu s funkcemi eval, base64_decode, gzip_inflate a podobnými.

Zda jsou soubory vaší instalace v pořádku můžete také otestovat pluginy Sucuri Security nebo Wordfence, které porovnají známé soubory jádra wordpressu, pluginů a šablon proti originálům.

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.

Další podobné články:

Štítky: ,

Napsat komentář

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


Lynt services s.r.o

Již 11 let vytváříme efektivnější kampaně, zrychlujeme weby a řešíme jejich bezpečnost. Kombinujeme marketing, vývoj a automatizaci.
poptávka služeb