Svetimas el. paštas slaptažodžio atstatymo formoje — ir admin paskyra jau ne jūsų: CVE-2026-8206 Kirki
Svetimas el. paštas slaptažodžio atstatymo formoje — ir admin paskyra jau ne jūsų: CVE-2026-8206 Kirki
Įdiegiate WordPress temą. Aukštas įvertinimas, daugiau nei 500 000 aktyvių įdiegimų. Kartu ateina Kirki — WordPress Customizer karkasas, leidžiantis temai siūlyti puikius spalvų, šriftų ir tarpų nustatymus. Kirki nesidaro matomas — tiesiog veikia. Jūs apie jį negalvojate.
Tuo tarpu užpuolikas jau žino jūsų administratoriaus username — tai nesunku, WordPress pagal nutylėjimą rodo jį autorių archyvuose. Jis atidaro slaptažodžio atstatymo formą, įveda tą username ir pakeičia savo el. pašto adresu. Customizer paklusniai išsiunčia atstatymo nuorodą jam, o ne jums. Po trisdešimties sekundžių užpuolikas turi naują admin paskyros slaptažodį. Svetainė — jo.
Taip veikia CVE-2026-8206 — pažeidžiamumas Kirki Freeform Page Builder versijose 6.0.0–6.0.6. CVSS 9.8 (Critical), CWE-269 — Improper Privilege Management. Jokio autentifikavimo, jokio brute force, jokios sudėtingos išnaudojimo grandinės. Viena HTTP užklausa su pakeitu el. paštu — ir admin paskyra perimta. Pažeidžiamumą atrado tyrėjas CHOIGYEONGMIN ir pranešė Wordfence 2026 m. gegužės 4 d.
KAIP VEIKIA PAŽEIDŽIAMUMAS
Kirki 6.x versijoje buvo pridėtas savitas paskyros valdymo sluoksnis — įskaitant slaptažodžio atstatymo formą svetainėms, naudojančioms page builder komponentą. Forma registruoja REST API endpoint, priimantį du parametrus: username ir email. Numatyta logika buvo paprasta: gauti username, surasti susietą paskyrą, išsiųsti atstatymo nuorodą į tos paskyros registruotą el. pašto adresą.
Problema — funkcijoje handle_forgot_password(), esančioje faile CompLibFormHandler.php. Funkcija teisingai priima username ir suranda reikiamą paskyrą. Tačiau siunčiant laišką ji naudoja ne el. pašto adresą iš WordPress duomenų bazės, o adresą iš užklausos parametro — tą, kurį atsiuntė klientas. Palyginimo patikrinimo nėra. Kūrėjas tikėjosi, kad vartotojas įves savo el. paštą, ir tiesiog neprirašė validacijos.
Užpuoliko požiūriu viskas atrodo taip. Reikia žinoti taikinio username. Tada — viena HTTP užklausa:
POST /wp-json/kirki/v1/forgot-password HTTP/1.1
Host: example.com
Content-Type: application/json
{"username": "admin", "email": "[email protected]"}
Kirki priima užklausą, teisingai identifikuoja admin paskyrą pagal username — ir išsiunčia atstatymo nuorodą į [email protected] iš užklausos turinio. WordPress sugeneruoja teisėtą atstatymo tokeną, susietą su admin paskyra, ir laiškas keliauja į užpuoliko pašto dėžutę. Jis paspaudžia nuorodą, nustato naują slaptažodį. Ataka baigta. Laiškas išsiunčiamas tikros svetainės vardu — tikrasis administratorius nieko nemato, jokių pranešimų į jo el. paštą neateina.
Pažeidžiamos svetainės, kuriose aktyvuotos Kirki frontend paskyros valdymo funkcijos — konkrečiai page builder ir paskyros formos komponentai. Vien įdiegto papildinio be aktyvių formų komponentų nepakanka išnaudojimui. Tačiau dauguma Kirki svetainių kaip tik taip jį ir naudoja.
CHRONOLOGIJA
CHOIGYEONGMIN pranešė apie pažeidžiamumą per Wordfence Bug Bounty programą 2026 m. gegužės 4 d. ir gavo $6 436 atlygį. Wordfence patvirtino pažeidžiamumą ir nedelsiant išdiegė ugniasienės taisykles premium prenumeratos vartotojams — gegužės 9 d. Po šešių dienų, gegužės 15 d., buvo informuotas tiekėjas Themeum. Kūrėjai reagavo greitai: pataisymas buvo parengtas per tris dienas, Kirki 6.0.7 išleista 2026 m. gegužės 18 d.
2026 m. birželio 1 d. Wordfence paskelbė viešą advisory — tuo metu pataisymas jau dvi savaites gulėjo repozitorijuje. Ugniasienės taisyklės nemokamos Wordfence versijos vartotojams buvo suplanuotos birželio 8 d. — tai reiškia, kad birželio 1–8 d. laikotarpiu svetainės be premium prenumeratos ir be atnaujinto Kirki buvo atviros. Per pirmąsias 24 valandas po viešo atskleidimo Wordfence užblokavo daugiau nei 222 išnaudojimo bandymus — automatizuoti skeneriai sureagavo iš karto.
KODĖL TAI SVARBU
Kirki — ne egzotinis papildinys. Tai vienas populiariausių WordPress temų karkasų su daugiau nei 500 000 aktyvių įdiegimų. Pažeidžiamumas palietė 6.0.x šaką — maždaug 40% papildinio vartotojų bazės, apie 200 000 svetainių. Be to, Kirki dažnai tiekiamas kartu su mokamomis temomis: svetainės savininkas perka temą, ją aktyvuoja, o Kirki įdiegiamas automatiškai kaip priklausomybė. Daugelis administratorių net nežino, kad turi Kirki — jie valdo tik temą.
Būtent šis nematomumas daro pažeidžiamumą ypač pavojingu. Administratorius seka WordPress branduolio ir svarbiausių papildinių atnaujinimus. Tačiau su tema atėjusi priklausomybė dažnai atnaujinama tik kartu su pačia tema. Jei tema neišleido atnaujinimo, Kirki gali likti pažeidžiamas be galo ilgai.
Admin paskyros perėmimas — tai ne tik „blogai”. Pirmiausia užpuolikas įdiegia backdoor, kad išsaugotų prieigą net ir pakeitus slaptažodį. Tai atrodo kaip PHP failas temos ar papildinio aplanke — kelios obfuskuoto kodo eilutės, failo pavadinimas niekuo neišsiskiria tarp kitų. Tokio failo rasti rankiniu būdu be skaitytuvo praktiškai neįmanoma, ypač jei temoje yra keli šimtai failų. Užpuolikas gali grįžti po savaitės, po mėnesio — prieiga bus. Todėl po admin paskyros kompromitacijos nepakanka pakeisti slaptažodžio: reikia pilno failų sistemos ir duomenų bazės audito dėl neteisėtų pakeitimų.
Internetinėms parduotuvėms pasekmės dar konkretesnės: užpuolikas su administratoriaus teisėmis gali prijungti trečiosios šalies mokėjimo šliuzą, perimantį kortelių duomenis, arba įterpti JavaScript skimmerį tiesiai į atsiskaitymo puslapio šabloną. Pirkėjai matys įprastą svetainę, įves kortelių duomenis — ir tie duomenys nukeliaus į užpuoliko serverį. Bendroje prieglaudoje su prasta izoliacija vienos svetainės kompromitavimas gali atverti prieigą prie kaimyninių svetainių failų.
Papildoma rizika — user enumeration. Išnaudojimui reikia žinoti taikinio username. WordPress pagal nutylėjimą atskleidžia username per autorių archyvus (/?author=1), per REST API (/wp-json/wp/v2/users) ir per prisijungimo klaidų pranešimus. Jei user enumeration nėra uždarytas — užpuolikas gauna visų username sąrašą per kelias sekundes, po to CVE-2026-8206 paleidžiamas prieš bet kurį iš jų.
KĄ DARYTI
Pirmiausia patikrinkite, ar Kirki įdiegtas ir kokia versija naudojama. WordPress valdymo skydelyje tai matoma skiltyje Plugins → Installed Plugins — ieškokite „Kirki” arba „Kirki Freeform Page Builder”. Per WP-CLI patikrinimas užtrunka vieną komandą:
wp plugin get kirki --field=version
Jei versija nuo 6.0.0 iki 6.0.6 imtinai — atnaujinkite nedelsiant:
wp plugin update kirki
Jei Kirki atėjo su tema ir valdymo skydelyje nematomas kaip atskiras papildinys, patikrinkite papildinių katalogą tiesiogiai:
ls /var/www/html/wp-content/plugins/ | grep -i kirki
cat /var/www/html/wp-content/plugins/kirki/kirki.php | grep "Version:"
Po atnaujinimo — administratoriaus paskyrų auditas. Jei svetainė veikė su pažeidžiama versija po birželio 1 d., reikia patikrinti ar neatsirado naujų admin paskyrų arba paskyrų su pakeistais el. pašto adresais. WP-CLI išveda visus administratorius su ID, prisijungimo vardais, el. pašto adresais ir registracijos datomis:
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Nepažįstamos paskyros arba paskyros su įtartinais el. pašto adresais — nedelsiant šalinti. Tuo pat metu peržiūrėkite web serverio prieigos žurnalus dėl POST užklausų į Kirki slaptažodžio atstatymo endpoint. Jei tokių įrašų yra — žiūrėkite į IP adresus ir laiko žymes: kelios užklausos iš to paties IP per trumpą laiką — automatizuotas skeneris, užklausos iš skirtingų IP — endpoint pateko į masinio skenavimo įrankius. Pirmojo įrašo data parodys nuo kurio momento skaičiuoti galimą kompromitaciją:
grep "kirki.*forgot-password" /var/log/nginx/access.log
# arba Apache atveju:
grep "kirki.*forgot-password" /var/log/apache2/access.log
Papildoma apsaugos priemonė — uždaryti user enumeration. Tai neišgydo CVE-2026-8206, bet pašalina vieną iš išankstinių atakos žingsnių. nginx vienas location blokas grąžins 403 bet kuriai užklausai su author parametru:
location ~ ^/\?author= {
return 403;
}
REST API user enumeration uždaromas per mu-plugin — filtras pašalina /wp/v2/users endpoint iš REST API registro:
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
IŠVADOS
CVE-2026-8206 — puikus pavyzdys to, kaip WordPress svetainės saugumą lemia ne tik pasirinkti papildiniai, bet ir tai, kas atėjo kartu su tema. Kirki nieko neprašo, nedaro nieko akivaizdžiai pavojingo — tiesiog prideda slaptažodžio atstatymo formą su vienu nepatikrintu parametru validacijos logikoje. Viena funkcija, vienas nepatikrintas parametras — CVSS 9.8.
Themeum ištaisė klaidą per tris dienas po pranešimo gavimo. Tai greita reakcija. Pataisymas buvo prieinamas nuo gegužės 18 d., viešas atskleidimas — birželio 1 d., dvi savaitės pranašumo tiems, kas atnaujino laiku. Jei jūsų serveryje veikia WordPress su Kirki — patikrinkite versiją dabar.
