Hlavní navigace

PHPMailer má kritickou chybu, ohrožuje miliony webů

Petr Krčmář

Vážná zranitelnost byla objevena v knihovně PHPMailer, která je velmi oblíbeným řešením pro odesílání e-mailů z aplikací napsaných v PHP. Knihovna je součástí mnoha redakčních systémů jako WordPress, Drupal nebo Joomla.

Kritická bezpečnostní chyba s označením CVE-2016–10033 dovoluje útočníkovi zneužít mezeru v knihovně PHPMailer ke spuštění vlastního kódu na straně serveru. Výsledkem je tak převzetí kontroly nad aplikací a kompromitace uživatelského účtu, pod kterým běží.

PHPMailer je oblíbeným řešením pro odesílání pošty z PHP kódu. Podle informací z domovské stránky projektu toto řešení používá přes 9 milionů webů a knihovna je integrována do řady různých populárních aplikací včetně redakčních systémů jako WordPress, Drupal, Joomla, SugarCRM, vTiger CRM, Mantis, XOOPS, Zikula a další.

Chyba již má svou opravu ve verzi 5.2.18, která vyšla před dvěma dny. Historie ale ukazuje, že velká část instalací zůstane navždy nezáplatovaná a chyba tak bude ještě dlouhou dobu zneužívána. Pokud spravujete weby využívající PHPMailer, měli byste co nejdříve aktualizovat. Zmíněné redakční systémy pracují na aktualizované verzi svých balíčků, které budou záplatu také obsahovat.

Pokud web používá nezáplatovanou verzi, může útočník zneužít některý z formulářů pro komentáře, kontakty nebo třeba obnovu hesla. Stačí, aby se aplikace na základě vyplněných informací pokusila odeslat e-mail pomocí děravé funkce.

Původní objevitel chyby, Dawid Golunski, nezveřejnil o chybě příliš mnoho detailů. Slíbil další informace za několik dní, až budou mít uživatelé šanci záplatu aplikovat. Někdo jiný ale prošel zpětně kód záplaty a vytvořil vlastní funkční exploit. Při úspěšném zneužití chyby je do kořene webu přidán soubor backdoor.php, který pak nabízí vlastní shell pro vzdálené ovládání.

Zneužitelná chyba podle všeho spočívá ve špatně ošetřeném zpracování vstupu, který je pak použit k volání funkce mail. Jednotlivé položky se pak použijí jako parametry pro Sendmail. Validace mailu odesílatele je prováděna podle RFC 3696 a umožňuje v adrese použít mezeru, pokud je obalena pomocí uvozovek. Následující adresa je proto validní:

"Attacker -Param2 -Param3"@test.com

Takto přidané parametry se za normálních okolností nepoužijí zvlášť, protože jsou předány v jednom argumentu. Pokud ale útočník do adresy přidá například sekvenci \", dokáže jednotlivé položky oddělit a předat Sendmailu další parametry.

Našli jste v článku chybu?
28. 12. 2016 18:16

servery nemá spravovat člověk, který tomu nerozumí!

Jedná se o php knihovnu, která není v debiáních balíčcích. Aktualizovat server podle toho, kde výjde jaká zprávička je dost špatné, primárně máš aktualizovat z daného security kanál ve své distribuci, tam zpravidla je k dispozici jíž aktualizace v momentě, kdy se o tom začalo psát.

29. 12. 2016 10:06

Ne že by PHP bylo výkladní skříní dobrého návrhu, ale tvrdit, že „by samotná struktura jazyka a jeho standardní knihovny obsahovaly katastrofální bezpečnostní chyby“ mi přijde dost nadsazené. Standardní knihovna jeste může (teda spíše její implementace), ale struktura jazyka? To je spíš na programátorovi, jak se s tím vyrovná. Že je PHP zbytečně error-prone? Někde ano, ale rozhodně v tom není samo: Podívejte se třeba na C a jeho standardní knihovnu (scanf, strcat etc.). Nebo na Perl.

Nav…