Prémiový plugin Hide my WP, který má na CodeCanyon téměř 30 tisíc prodejů, obsahuje dvě závažné zranitelnosti. Obě byly opraveny ve verzi 6.2.4, proto neotálejte s aktualizací.
Hide My WP je plugin, který umožňuje skrýt co nejvíce známek toho, že web je postavený na WordPressu. Je zmiňován v mnoha článcích na různých webech, včetně musilda.cz, jako jedno z možných vylepšení bezpečnosti.
Bohužel, obsahuje zranitelnosti, které objevil tým https://patchstack.com/ a okamžitě kontaktoval autory pluginu. Ten nezareagoval ani po týdnu, proto kontaktovali Evato, které zareagovalo do deseti minut. Vývojář pak po dalších dvaceti jedna dnech, vydal opravu.
U pluginu, který má zvyšovat zabezpečení webu, by měla být reakce podstatně rychlejší.
Pojďme však ke zranitelnostem.
První zranitelnost umožňuje přihlášenému uživateli jakékoliv úrovně deaktivovat plugin.
Stačí jednoduše vyvolat url
/wp-admin/admin-ajax.php?die_message=new_admin&action=heartbeat
a protože funkce die_message() nekontroluje oprávnění uživatele, vypíše na obrazovku option hmwp_reset_token, které pak lze využít k deaktivaci pluginu při načtení souboru /wp-content/plugins/hide_my_wp/d.php z root složky pluginu.
Fix: do funkce byla přidána kontrola oprávnění uživatele.
Druhá zranitelnost je vážnější, protože umožňuje použít SQL injection.
Kód, který umožňuje injection vypadá takto:
$user_ip = $this->hmwp_get_user_ip();
$dbips_info = $wpdb->get_var("SELECT `ip` FROM `{$blocked_ips_table}` WHERE `allow`='1' AND `ip`='{$user_ip}'");
Metoda hmwp_get_user_ip se snaží získat ip adresu z různých hlaviček a to u z těch, které mohou být podvrženy. Vložením škodlivého kódu do jedné z těchto hlaviček, dojde k jeho použití v SQL dotazu a injection je na světě.
Například pomocí CURL:
curl --location --request GET "https://example.com" --header "X-Forwarded-For: 1' union all select sleep(3)#
"
Zranitelnost byla opravena přepsáním SQL dotazu z metody get_var na prepare, která vstupy sanituje a v které se musí definovat typ proměnné, jenž má být v dotazu použita.
Závěr:
Pokud používáte plugin, nezbývá vám, než jej zaktualizovat. Bohužel, se jedná o prémiový plugin, takže aktualizace z WordPress repozitáře není k dispozici a automatickou vám to nabídne, pouze, pokud máte obnovenou půlroční subscription. Což u pluginů z Codecanyonu není zrovna běžné.