-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

„Niesamowity” plugin, który miał chronić WordPressy przed SQL injection, sam miał krytyczną podatność… SQL injection

29 listopada 2021, 17:48 | W biegu | 0 komentarzy

Chodzi o plugin Hide My WP. Jak czytamy (podkreślenie nasze) w opisie produktu:

Hide My WP – Amazing Security Plugin for WordPress!

Hide My WP is number one security plugin for WordPress. It hides your WordPress from attackers, spammers and theme detectors. Over 26,000 satisfied customers use Hide My WP. It also hides your wp login URL and renames admin URL. It detects and blocks XSS, SQL Injection type of security attacks on your WordPress website.

Badacze postanowili sprawdzić na ile plugin jest „amazing” i doszli do takich wniosków:

There were multiple security vulnerabilities fixed in the Hide My WP plugin by wpWave which allowed unauthenticated SQL injection and allowed unauthenticated users to retrieve a token to deactivate the plugin.

  • Gdzie dokładnie znajdowało się SQL injection?
    W polu adres IP.
  • Ale – powiecie – przecież nie da się zmienić adresu IP na payload SQL injection!
    No więc czasem się da :-) np. w nagłówku HTTP: X-Forwarded-For

Podatny fragment kodu:

$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}'");

$user_ip nie jest w żaden sposób sanityzowany, zatem prosty Proof of Concept może wyglądać tak:

curl --location --request GET "https://example.com" --header "X-Forwarded-For: 1' union all select sleep(3)# 
"

Jak może doczytaliście nieco powyżej, podatność nie wymagała posiadania jakiegokolwiek konta w atakowanej instancji WordPressa.

Co atakujący mógłby osiągnąć, wykorzystując podatność? Np. wyłączyć plugin (żeby to zrobić potrzebne jest wyeksploitowanie jeszcze drugiej luki w pluginie – szczegóły tutaj), czy wprost ukraść całą zawartość bazy danych, z której korzysta WordPress. No więc to by było na tyle, jeśli chodzi o reklamowaną ochronę przed SQL injection ;-)

Podatność została załatana w wersji 6.2.4 pluginu.

~Michał Sajdak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz