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.