CVE-2026-3300: Everest Forms Pro paleidžia svetimą PHP kodą iš formos lauko
CVE-2026-3300: Everest Forms Pro paleidžia svetimą PHP kodą iš formos lauko
Jūsų svetainė priima užklausas per kontaktinę formą. Kažkas užpildo lauką „Vardas” — ir serveryje įvykdomas bet koks PHP kodas. Ne todėl, kad buvo įsilaužta į duomenų bazę, ne todėl, kad buvo atspėtas slaptažodis. Tiesiog todėl, kad į formos lauką buvo galima įrašyti ką tik nori, o papildinys tai perdavė tiesiai į PHP funkciją eval().
Taip veikia CVE-2026-3300 — kritinis pažeidžiamumas WordPress papildinyje Everest Forms Pro, CVSS 9.8. Pažeidžiamos visos versijos iki 1.9.12 imtinai. Pataisymas išleistas 2026 m. kovo 18 d. — versija 1.9.13. Aktyvus išnaudojimas pradėtas balandžio 13 d. Wordfence duomenimis, iki birželio pradžios ugniasienė užblokavo daugiau nei 29 300 išnaudojimo bandymų, iš kurių daugiau nei 17 900 — tik gegužės 16 d. Atakos tęsiasi.
KAS YRA EVEREST FORMS PRO
Everest Forms Pro — komercinis WPEverest papildinys, papildas prie nemokamo Everest Forms. Jį diegia tada, kai paprastos formos nebeužtenka: reikia kelių žingsnių anketos su sąlyginiais laukais, registracijos formos su laiko pasirinkimu arba kainos skaičiuoklės tiesiai formoje, nepereinant prie krepšelio. Tipiniai naudotojai — nedidelės internetinės parduotuvės, paslaugų įmonės, agentūros, kurioms reikia užsakymo formos su dinaminiu kainodara. Apie 4 000 aktyvių diegimų pagal Wordfence duomenis — skaičius kuklus, bet tai neapsaugo: botnetai nesirenka taikinių pagal papildinio populiarumą, jie nuskaituoja viską iš eilės.
Pažeidžiama pasirodė konkreti Pro versijos funkcija — Complex Calculation. Tai papildinys, leidžiantis kurti matematines formules iš formos laukų reikšmių: prekių kiekis padaugintas iš kainos, taikoma nuolaida pagal reklaminį kodą, pridedamos pristatymo išlaidos. Visa tai vyksta serveryje pateikiant formą — PHP apskaičiuoja rezultatą ir grąžina jį klientui. Būtent čia, tarp vartotojo įvesties ir serverio skaičiavimo, atsirado skylė kaip sunkvežimis.
KAIP VEIKIA PAŽEIDŽIAMUMAS
Kai vartotojas pateikia formą su įjungta Complex Calculation funkcija, laukų reikšmės patenka į papildinio funkciją process_filter(). Ten jos sujungiamos į PHP kodo eilutę, kuri perduodama į eval(). Idėja suprantama: reikia dinamiškai apskaičiuoti formulę iš vartotojo įvesties. Problema ta, kad įvestis prieš tai praeina tik per sanitize_text_field().
Ši WordPress funkcija skirta tekstui išvalyti nuo HTML žymų ir perteklinių tarpų — ji pašalina <script> ir panašias konstrukcijas. Tačiau viengubų kabučių ir kitų PHP sintaksei svarbių simbolių ji neliečia. PHP kodo generavimo kontekste tai katastrofa: „saugu” iš HTML perspektyvos atrodo įvestis gali būti visavertė PHP injekcija. Everest Forms Pro kūrėjai supainiojo kontekstus — jie panaudojo HTML valymo įrankį ten, kur reikėjo PHP ekranavimo.
Rezultatas: užpuolikas įrašo specialiai suformuotą PHP payload į bet kurį eilutės tipo formos lauką (tekstas, email, URL, select, radio). Forma turi naudoti Complex Calculation — tai būtina sąlyga. Jokio autentifikavimo nereikia: bet kuris svetainės lankytojas gali pateikti formą. Serveris gauna užklausą, process_filter() surenka eilutę iš vartotojo reikšmių, eval() ją įvykdo kaip PHP kodą su vartotojo, kuriuo veikia žiniatinklio serveris, teisėmis.
REALI ATAKOS GRANDINĖ
Viskas prasideda nuo automatizuoto nuskaitymo. Botai šliaužia per WordPress svetaines ieškodami Everest Forms Pro — pagal būdingus CSS klases ir formos atributus, kuriuos papildinys įterpia į kiekvieną puslapį. Tai automatizuotas procesas: specializuoti šliaužikliai apžvelgia milijonus svetainių ieškodami konkrečių papildinių parašų. Radę formą su Complex Calculation, botas siunčia POST užklausą su paruoštu payload tekstiniame lauke. Payload sukuria PHP failą serveryje — web shell. Visas šis procesas nuo aptikimo iki shell įdėjimo trunka sekundes.
Po to užpuolikas pereina prie rankinio darbo. Per HTTP užklausas į web shell jis nuskaito wp-config.php — ten saugomi duomenų bazės prisijungimo duomenys. Turėdamas DB slaptažodį, jis prisijungia prie MySQL ir sukuria naują WordPress administratoriaus paskyrą — būtent šį modelį Wordfence užfiksavo atakose. Tuo pat metu jis naršo failų sistemą: kiti konfigūraciniai failai, SSH raktai namų kataloguose, .env failai, žurnalai su slaptažodžiais. Jei serveryje veikia kelios svetainės viename PHP-FPM fonde — užpuolikas gauna prieigą prie visų jų failų, ne tik prie užpultos svetainės. Klasikinis lateral movement: įsilaužta į vieną svetainę — prieiga prie dešimties.
Wordfence nustatė būdingą kompromiso žymeklį — eilutę diksimarina žurnaluose ir užpuoliko sukurtuose failuose. Pagrindinis atakų srautas ateina iš dviejų IP adresų: 202.56.2.126 ir 209.146.60.26. Wordfence skelbia visą IOC sąrašą, tačiau šie du yra aktyviausi. Užpuolikas gali pakeisti IP per kelias minutes, todėl konkrečių adresų blokavimas naudinga laikina priemonė, bet ne pagrindinė apsauga.
CHRONOLOGIJA
2026 m. vasaris: tyrėjas slapyvardžiu h0xilo pranešė apie pažeidžiamumą per Wordfence Bug Bounty programą. Kovo 18 d. WPEverest išleido pataisymą — versija 1.9.13. Kovo 30 d. Wordfence paskelbė CVE ir techninius duomenis. Balandžio 13 d. prasidėjo aktyvi išnaudojimas — praėjus 26 dienoms po pataisymo išleidimo.
26 dienų tarpas tarp pataisymo ir išnaudojimo — tipinis vaizdas WordPress papildiniams. Dauguma svetainių neatnaujinamos automatiškai. Dalis savininkų apskritai neseka papildinių atnaujinimų. Per tą laiką užpuolikai išanalizavo pataisymą, atkūrė pažeidžiamą kodą, parašė išnaudojimą ir pradėjo masinį nuskaitymo. Gegužės 16 d. — atakų pikas: 17 900 bandymų per vieną dieną. Tai rodo, kad kažkas įtraukė CVE-2026-3300 į savo automatizuotą masinio nuskaitymo įrankių rinkinį.
KODĖL TAI SVARBU
4 000 diegimų — tai ne tūkstančiai pažeidžiamų serverių, kaip būna su populiariais papildiniais kaip Contact Form 7 ar Yoast SEO. Tačiau WordPress atakos retai būna tikslinės: botnetai nuolat nuskaituoja internetą ir puola viską, kas pasitaiko. Jei jūsų svetainė naudoja Everest Forms Pro ir neatnaujinta — ji jau yra užpuolikų sąrašuose, nesvarbu, kokia ji „maža” ar „neįdomi”.
Svarbiau kita: RCE per formą — tai visiškas serverio perėmimas žiniatinklio proceso teisių prasme. Užpuolikas gauna ne tik prieigą prie duomenų bazės per SQL injekciją, o galimybę vykdyti bet kokį kodą. Tai reiškia web shell kūrimą, bet kokių PHP pasiekiamų failų skaitymą, svetainės kodo keitimą, prisijungimo duomenų vagystę iš wp-config.php. Jei tame pačiame serveryje veikia kitos svetainės tame pačiame PHP-FPM fonde — jos irgi pavojuje. Klasikinis lateral movement bendro hostingo aplinkoje.
Yra ir ne toks akivaizdus pavojus. Šio klaidos tipas — vartotojo įvestis į eval() — nėra būdingas tik Everest Forms Pro. WordPress ekosistema milžiniška: tūkstančiai papildinių, daugelis kurių įgyvendina panašią dinaminę logiką. CVE-2026-3300 istorija — geras priminimas, kad bet kuris papildinys su „išmaniosiomis” formomis, kainų skaičiuoklėmis ar dinaminiais laukais gali daryti kažką panašaus. Kaip sistemos administratorius negalite patikrinti kiekvieno papildinio kodo — bet galite juos laikyti atnaujintus, stebėti Wordfence Intelligence ir sukonfigūruoti įspėjimus apie naujus PHP failus svetainės kataloge. Tai sumažina pažeidžiamumo langą nuo „kol kas nors neįsilaužė” iki „kol neišleistas pataisymas”.
KĄ DARYTI
Pirma — patikrinti papildinio versiją. WordPress konsolėje: Papildiniai → Įdiegti papildiniai → rasti Everest Forms Pro ir pažiūrėti versiją. Turi būti 1.9.13 arba naujesnė. Jei mažesnė — atnaujinti nedelsiant per standartinį WordPress atnaujinimo mechanizmą.
Versiją galima patikrinti ir iš komandinės eilutės per WP-CLI:
wp plugin get everest-forms-pro --fields=name,version,status
Jei papildinys įdiegtas ir versija žemesnė nei 1.9.13 — atnaujinti. Sėkmingas atnaujinimas atrodo taip: Success: Updated 1 of 1 plugins.
wp plugin update everest-forms-pro
Jei papildinys aktyviai nenaudojamas — išjungti ir ištrinti. Neaktyvus papildinys su pažeidžiamu kodu diske vis tiek kelia pavojų tam tikrose serverio konfigūracijose:
wp plugin deactivate everest-forms-pro
wp plugin delete everest-forms-pro
Antras žingsnis — patikrinti, ar svetainė jau nebuvo sukompromituota. Atakos vyksta nuo balandžio, ir jei papildinys visą tą laiką nebuvo atnaujintas — reikia patikrinti žurnalus ir failų sistemą. Ieškome kompromiso požymių nginx prieigos žurnaluose — POST užklausas į formas iš žinomų užpuolikų IP:
grep -i "POST" /var/log/nginx/access.log | grep -i "everest\|evf_" | grep "202.56.2.126\|209.146.60.26"
Tikriname, ar per pastaruosius du mėnesius neatsirado naujų PHP failų svetainės kataloge — tiek laiko praėjo nuo aktyvaus išnaudojimo pradžios. Komanda išves visų per tą laikotarpį pakeistų PHP failų sąrašą. Tarp jų bus teisėti failai iš planinio WordPress ir papildinių atnaujinimo — jie yra wp-admin/, wp-includes/ ir papildinių kataloguose wp-content/plugins/. Įtartinai atrodo failai wp-content/uploads/ (PHP failai ten niekada neturėtų patekti), failai šakniname kataloge su neįprastais pavadinimais (atsitiktinės raidės, skaičiai) ir bet kokie failai už standartinės WordPress struktūros ribų:
find /var/www/html -name "*.php" -mtime -60
Ieškome kompromiso žymeklio diksimarina, kurį Wordfence nustatė atakose:
grep -r "diksimarina" /var/www/html/
Tikriname WordPress administratorių sąrašą dėl nepažįstamų paskyrų:
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Jei rasti įtartini PHP failai, nežinomi administratoriai arba diksimarina pėdsakai failuose — svetainė sukompromituota. Šiuo atveju atkūrimas iš atsarginės kopijos iki atakų pradžios datos (iki balandžio 13 d.) patikimesnis nei bandymas rankiniu būdu išvalyti kenkėjišką programą: užpuolikas galėjo paslėpti kelis backdoor skirtingose failų sistemos vietose.
IP adresų blokavimas nftables lygmeniu — papildoma priemonė, sumažinsianti triukšmą žurnaluose. Komanda veikia su sąlyga, kad jūsų nftables konfigūracijoje jau yra set pavadintas blocklist lentelėje inet filter — kaip tai sukonfigūruota nftables kurse:
nft add element inet filter blocklist { 202.56.2.126, 209.146.60.26 }
Jei prieš WordPress stovi Cloudflare WAF, galima blokuoti užklausas su būdingais PHP įvykdymo šablonais POST turinyje per Custom Rule. Tačiau patikimiausias sprendimas — atnaujinti papildinį: tai visiškai uždaro atakos vektorių, o ne tik blokuoja konkrečius IP, kuriuos užpuolikas gali pakeisti per minutes.
IŠVADOS
CVE-2026-3300 — klasikinis pavyzdys, kaip viena netinkamai pritaikyta funkcija paverčia kontaktinę formą visiško serverio perėmimo tašku. CVSS 9.8, unauthenticated RCE, aktyvus išnaudojimas nuo balandžio, 29 300 užblokuotų bandymų. Pataisymas yra nuo kovo 18 d. — versija 1.9.13.
Jei Everest Forms Pro įdiegtas jūsų serveryje: patikrinkite versiją dabar. Jei versija žemesnė nei 1.9.13 — atnaujinkite ir peržiūrėkite žurnalus nuo balandžio 13 d. Jei papildinys nereikalingas — ištrinkite.
