Dne 26. ledna 2023 byla týmem Wordfence objevena zranitelnost Cross-Site Scripting v pluginu Limit Login Attempts pro WordPress, který je nainstalován na více než 600 000 webových stránkách a umožňuje blokování IP adres, které se opakovaně snažily neúspěšně přihlásit.
Tato zranitelnost postihuje verze pluginu až do verze 1.7.1 včetně. Oprava pro tuto zranitelnost byla vydána 4. dubna 2023 jako verze 1.7.2. Všem majitelům webů se doporučuje co nejdříve provést aktualizaci na verzi 1.7.2.
Plugin Limit Login Attempts poskytuje různé možnosti konfigurace, včetně maximálního počtu pokusů o přihlášení, doby trvání uzamčení, doby vypršení uzamčení a volby protokolování a oznamování. Zranitelnost s označením CVE-2023-1912 se týká specifické konfigurace, kde volba „Připojení k webu“ musí být nastavena na „Zpoza reverzní proxy“ a musí být povoleno protokolování IP adres během uzamčení.
Pokud je povolena volba detekce reverzního proxy serveru, plugin Limit Login Attempts použije hlavičku X-Forwarded-For k určení IP adresy návštěvníka. Tato hlavička je sice podvržená v HTTP, ale plugin nabízí její použití jako alternativu pro ty, kteří používají vyrovnávač zátěže nebo zpracovatel mezipaměti. Toto nastavení však není použito ve výchozím nastavení.
Když je zapnutá funkce protokolování v pluginu, bloky přihlášení jsou zaznamenávány a zobrazují se na konfigurační stránce.
Jak je patrné, tato funkce sestavuje tabulku informací, ale neescapuje hodnoty, které používá. Ačkoli se doporučuje provádět sanitaci přijatého vstupu, je mnohem účinnější použít escapování výstupu, i když je vstup již sanitizován, k prevenci Cross-Site Scripting. Bohužel, tento plugin nepoužíval ani sanitaci, ani escapování ukládané hodnoty IP adresy, která mohla být dodána přes hlavičku X-Forwarded-For.
Pro využití této zranitelnosti by mohl útočník odeslat požadavek na přihlášení s následující hlavičkou X-Forwarded-For:
X-Forwarded-For: <span onmouseover=alert(1)>23.23.23.23</span>
Tato hlavička může být nastavena různými způsoby, například pomocí pluginu pro prohlížeč nebo přidáním ji ručně při zachycení požadavku na přihlášení. Jakmile je dosažen práh pro blokování pluginu, bude tato kódovaná IP adresa zaznamenána jako blokovaná IP a zákeřný JavaScript kód se spustí, když administrátor navštíví stránku s konfigurací, kde je zobrazen seznam blokovaných IP adres. Tento škodlivý kód je spuštěn pod autentizací administrátora a může být použit k usnadnění převzetí kontroly nad webovou stránkou.
Zranitelnosti Cross-Site Scripting jsou výsledkem chybějící sanitace a neescapovaného zobrazení uživatelského vstupu. Nejčastěji vidíme exploitační vstupy od uživatele, které jsou získány prostřednictvím formuláře. V tomto konkrétním případě jsou zpracovávané informace stále poskytovány uživatelem, ale jsou získávány jiným a neobvyklým způsobem, což může vést k opomenutí řádné sanitace a escapování.
Pokud plugin používáte na některém z vašich webů, doporučuji co nejdříve aktualizovat na nejnovější verzi Limit Login Attempts.