Du užklausos užvaldyti Joomla svetainę: CVE-2026-48907 JCE plaginui ir kaip patikrinti savo serverį dabar
Du užklausos užvaldyti Joomla svetainę: CVE-2026-48907 JCE plaginui ir kaip patikrinti savo serverį dabar
Jūsų Joomla svetainė neturi viešos registracijos. Jokio forumo, jokios vartotojo paskyros — lankytojai tik skaito. Pagrįstai manote, kad nėra ką įsilaužti: jei nėra prisijungimo, nėra ir grėsmės. Tada 2026 m. birželio 3 d. populiariausio Joomla vizualinio redaktoriaus kūrėjas išleido skubų pataisymą su formuluote „kritinė pažeidžiamumo vieta visose ankstesnėse versijose” — ir paaiškėjo, kad būtent tokios svetainės be registracijos ir tapo taikiniais. Ne todėl, kad buvo atakuotos tikslingai. O todėl, kad botnetas metodiškai peršukuoja visą internetą ir įkelia webshell į kiekvieną Joomla svetainę su pažeidžiama JCE versija — be jokio autentifikavimo, dviem HTTP užklausomis.
CVE-2026-48907 — Improper Access Control tipo pažeidžiamumo vieta JCE (Joomla Content Editor) plaginui, labiausiai įdiegtam plėtiniui Joomla ekosistemoje. Paveiktos visos versijos iki 2.9.99.5. Pataisymas išleistas 2026 m. birželio 3 d. Veikiantis išnaudojimas paskelbtas GitHub platformoje birželio 9 d. Birželio 16 d. CISA įtraukė CVE-2026-48907 į Known Exploited Vulnerabilities katalogą — tai JAV vyriausybės patvirtinimas apie realias atakas, išduodamas tik esant verifikuotų įrodymų. Jei naudojate Joomla su JCE — skaitykite toliau. Greitai.
KAS YRA JCE IR KODĖL TAI SVARBU
JCE reiškia Joomla Content Editor — vizualinis redaktorius, pakeičiantis standartinį Joomla teksto redaktorių į pilnavertį WYSIWYG su paveikslėlių, failų, lentelių ir medijos įterpimo palaikymu. Pasak mysites.guru, tai labiausiai įdiegtas plėtinys Joomla ekosistemoje — ne „vienas iš populiarių”, o tiesiog populiariausias. Kūrėjas — Widget Factory Limited, maža nepriklausoma komanda vadovaujama Ryan Demmer, prižiūrinti JCE daugiau nei penkiolika metų. Pažeidžiamumą pranešė Uwe Flottemesch iš fc-hosting.de; David Jardin suteikė techninę pagalbą kuriant pataisymą.
Pagrindinė JCE koncepcija — redaktoriaus profiliai. Profilis apibrėžia ką konkreti vartotojų grupė gali daryti redaktoriuje: kokius failų tipus įkelti, į kokius katalogus, kokie plėtiniai leidžiami. Autoriams gali būti leidžiami tik JPG ir PNG į images/ aplanką, administratoriams — viskas. Tai teisinga prieigos kontrolės architektūra. Problema buvo ta, kad profilio importo mechanizmas buvo prieinamas be jokio autentifikavimo.
KAIP VEIKIA PAŽEIDŽIAMUMAS
JCE turi profilio importo užduotį: POST užklausa į index.php?option=com_jce&task=profiles.import. Sumanymas buvo toks, kad šis endpoint būtų prieinamas tik autentifikuotam administratoriui — redaktoriaus nustatymams perkelti tarp svetainių arba profilius atkurti iš atsarginės kopijos. Iš tikrųjų, iki versijos 2.9.99.5, jokio autorizacijos patikrinimo ten nebuvo. Bet kuris HTTP klientas galėjo siųsti POST šiuo URL — ir Joomla paklusniai sukurdavo naują redaktoriaus profilį.
To jau pakanka atakai. Užpuolikas sukuria profilį, leidžiantį įkelti failus su plėtiniu .php, išjungus MIME validaciją. Tada per tą pačią JCE failų įkėlimo funkciją — kuri dabar naudoja kenkėjišką profilį — į serverį įkeliamas PHP webshell. Visas procesas: dvi HTTP užklausos, nulis paspaudimų, nulis prisijungimo duomenų.
KAIP TAI IŠNAUDOJAMA
Botnetas kiekvieną kartą veikia pagal tą patį scenarijų — mysites.guru stebėjo identišką piršto atspaudą šimtuose kompromituotų svetainių. Pirmoji užklausa: POST į index.php?option=com_jce&task=profiles.import sukuria kenkėjišką profilį. Profilis gauna automatiškai sugeneruotą pavadinimą, pavyzdžiui J940401 arba J938560, kartais atvirai — Pwned su aprašymu RCE via JCE. Profilio rikiavimo reikšmė nustatoma į -99999 — kad jis atsidurtų sąrašo viršuje virš visų teisėtų profilių. Profilio parametruose leidžiami plėtiniai php ir phtml, MIME validacija išjungta.
Antroji užklausa: POST per JCE failų įkėlimo funkciją — dabar naudojant sukurtą profilį — įkelia webshell. Jei įkėlimo kelias profilyje nenurodytas, failas pagal nutylėjimą patenka į images/ aplanką, iš kurio gali būti paleistas per naršyklę. mysites.guru rastų webshell pavyzdžiai: klasikinės eval(gzinflate(base64_decode(...))) konstrukcijos, shell_exec komandų apvalkalai, nedideli žymeklio failai pavadinti Nxploited ir .xml.php diegikliai. Žiniatinklio serverio prieigos žurnaluose ataka palieka charakteringą dviejų užklausų parašą: POST į task=profiles.import, po kurio iš karto seka POST į method=upload, abu grąžina 200, abu be autentifikavimo, dažnai su žymekliu id=RCExxx.
Visa tai — automatizuotas botnetas, o ne tikslinė ataka. Svetainės dydis, registracijos buvimas ar nebuvimas, srauto apimtis — nieko nereiškia. Nuskaitomos visos pasiekiamos Joomla įdiegtys iš eilės.
KAIP PATIKRINTI SAVO SERVERĮ
Pirmiausia — žiniatinklio serverio žurnalai. Ieškokite POST užklausų į profilio importo endpoint be autentifikavimo. nginx atveju tai bus access.log — paprasčiausias būdas:
grep "profiles.import" /var/log/nginx/access.log
Apache atveju pakeiskite kelią į /var/log/apache2/access.log. Jei žurnalai nestandartinėje vietoje — žiūrėkite virtualaus serverio konfigūraciją. Bet koks vykdymo rezultatas reiškia arba sėkmingą ataką, arba bandymą. Pirmiausia įrašyta data rodo kada svetainė buvo pirmą kartą pasiekta — nuo tos datos reikia skaičiuoti atsarginę kopiją. Atminkite: daugelis prieglobos paslaugų teikėjų žurnalus saugo tik kelias savaites, o rotacija jau galėjo paslėpti pėdsakus.
Patikrinkite redaktoriaus profilius Joomla valdymo skydelyje: Komponentai → JCE Editor → Redaktoriaus profiliai. Neatpažinti profiliai su automatiškai sugeneruotais pavadinimais, rikiavimo reikšme -99999 ar kitu dideliu neigiamu skaičiu — atakos požymis. Leidimas įkelti .php ar phtml failus išjungus MIME validaciją — tai būtent tai, ką sukuria botnetas. Radę tokį profilį — iš karto netrinkite. Pirmiausia išsaugokite jo parametrus, jie padės nustatyti kompromitavimo laikotarpį.
Patikrinkite katalogus dėl svetimų PHP failų — įprastai images/, media/, tmp/ kataloguose PHP failų neturėtų būti visai. Paieška visoje svetainės medžio struktūroje:
find /var/www/html -path "*/images/*.php" -o \
-path "*/media/*.php" -o \
-path "*/tmp/*.php" | sort
Taip pat verta patikrinti failus su .php pavadinime tarp kitų plėtinių — klasinis diegiklių triukas:
find /var/www/html -name "*.php.*" 2>/dev/null
Radę ką nors — iš karto netrinkite. Pirmiausia išsaugokite kopiją kaip įrodymą (sukūrimo data, turinys), tada atnaujinkite JCE iki 2.9.99.7 ir tik tada valykite — kitaip botnetas viską atkurs kol pažeidžiamumo vieta dar atvira.
CHRONOLOGIJA
2026 m. birželio 3 d. — JCE kūrėjas išleidžia versiją 2.9.99.5 su CVE-2026-48907 pataisymu. Oficialus pranešimas skelbia: „kritinė pažeidžiamumo vieta visose ankstesnėse versijose”, aktyvus išnaudojimas jau vyko pataisymo išleidimo metu.
2026 m. birželio 8 d. — išleidžiamas JCE 2.9.99.6 su papildomu apsaugos stiprinimu po pilno kodo audito.
2026 m. birželio 9 d. — veikiantis išnaudojimas paskelbiamas GitHub platformoje. Nuo šio momento atakos tampa visiškai automatizuotos — bet kas gali paleisti paruoštą scenarijų prieš visą internetą.
2026 m. birželio 16 d. — CISA įtraukia CVE-2026-48907 į Known Exploited Vulnerabilities katalogą oficialiu pavadinimu „Widget Factory Joomla Content Editor Improper Access Control Vulnerability”. JAV federalinės agentūros gauna privalomą pataisymo terminą.
2026 m. birželio 18 d. — išleidžiamas JCE 2.9.99.7. Versija 2.9.99.6 turėjo klaidingą PHP žymų aptikimą, kuris blokavo teisėtų paveikslėlių ir failų įkėlimą. 2.9.99.7 ištaiso šią regresiją, prideda papildomą įkėlimo pipeline ir profilio importo apsaugos stiprinimą, taip pat naują Permitted User Groups parinktį — vartotojų grupių, kurioms leidžiama priskirti ir importuoti profilius, baltąjį sąrašą. Dabartinė rekomenduojama versija — 2.9.99.7.
KODĖL TAI SVARBU
Šią ataką nepatogu suvokti dėl jos paprastumo. Išnaudojimui nereikia paskyros, nereikia spėlioti slaptažodžio, nereikia laukti kol kas nors paspaus nuorodą. Dvi HTTP POST užklausos — ir serveryje yra webshell. Nuo to momento užpuolikas turi interaktyvią prieigą prie failų sistemos ir gali vykdyti komandas žiniatinklio serverio proceso vardu: skaityti configuration.php su duomenų bazės kredencialais, įkelti papildomus įrankius, ieškoti kitų svetainių tame pačiame serveryje.
Atakos mastas parodo kaip greitai išnaudojimas išplito: mysites.guru pradėjo nuo trijų kompromituotų svetainių viename portfelyje ir per kelias dienas matė šimtus. Automatizuotas skaitytuvas su vieša PoC per kelias savaites gali apeiti visą matomą internetą. CISA svetainę prideda į KEV katalogą tik turėdama verifikuotų realių atakų įrodymų — tai ne atsargumo priemonė, o fakto konstatavimas.
JCE verta paminėti atskirai, nes tai ne specializuotas pluginas siauros auditorijos — tai numatytasis pasirinkimas kai Joomla svetainei reikia geresnio redaktoriaus. Jei svetainę kūrė agentūra ar laisvai samdomas specialistas, tikimybė rasti įdiegtą JCE yra didelė. Tokia įdiegimų bazė paverčia vieną neapsaugotą API endpoint masinės kompromitacijos įvykiu.
KĄ DARYTI
Jei dar nepatikrinte dėl kompromitacijos — pirmiausia patikrinkite žurnalus ir profilius (žr. skyrių aukščiau), tik tada atnaujinkite. Svarbi tvarka: atnaujinimas uždaro įėjimo tašką, bet neišvalo to, kas jau įkelta. Atnaujinus be patikrinimo galima gauti uždarą pažeidžiamumą ir veikiantį webshell vienu metu.
Atnaujinkite iki JCE 2.9.99.7 — tai ištaiso ir patį pažeidžiamumą, ir 2.9.99.6 regresiją, ir prideda Permitted User Groups baltąjį sąrašą. Atnaujinimai atliekami per standartinį Joomla plėtinių tvarkytuvą: Sistema → Atnaujinimai → Plėtiniai. Įdiegtą JCE versiją galite patikrinti komandinėje eilutėje — komanda nuskaito versiją tiesiai iš plėtinio manifesto diske:
grep -r "version" /var/www/html/administrator/components/com_jce/jce.xml 2>/dev/null | head -3
Po atnaujinimo JCE versija turėtų rodyti 2.9.99.7 arba naujesnę.
Jei atnaujinti iki 2.9.99.7 neįmanoma dėl platformos reikalavimų — reikalingas PHP 7.4 ir Joomla 3.9 arba naujesnė — kūrėjas išleido nemokamą pataisymo paketą JCE 2.7.x, 2.8.x ir 2.9.x šakoms, prieinamą oficialios JCE svetainės skyriuje Downloads → Security Patch. Šis pataisymas uždaro tik pažeidžiamumą, be papildomo 2.9.99.6 apsaugos stiprinimo, ir neišvalo jau kompromituotos svetainės. Tai laikina priemonė — migracija į palaikomą platformą vis tiek reikalinga, nes end-of-life PHP palieka jus pažeidžiamus kitoms neištaisytoms problemoms.
Radę kenkėjišką profilį ar įtartinų failų: išsaugokite įrodymus, atnaujinkite JCE, ištrinkite profilį per Joomla administratoriaus skydelį, tada pašalinkite per jį įkeltus failus. Po valymo pakeiskite visus slaptažodžius: Joomla administratoriaus, duomenų bazės, prieglobos ir FTP — ir tuos pačius slaptažodžius kitose svetainėse, kur jie buvo pakartotinai naudojami. Paleiskite pilną serverio kenkėjiškų programų nuskaitymą — daugelis prieglobos paslaugų teikėjų teikia Imunify ar panašų įrankį.
JCE 2.6.x versija pagal numatytąją konfigūraciją, kūrėjo vertinimu, nepaveikta — unauthenticated profilio importo kelias ten užblokuotas ir nėra svečiams prieinamo profilio pagal nutylėjimą. Tai nepatvirtinta nepriklausomai. Šaka 2.6.x nebėra palaikoma ir gali turėti kitų neištaisytų problemų, todėl migracija į palaikomą platformą vis tiek reikalinga.
IŠVADOS
CVE-2026-48907 — vadovėlinis pavyzdys kaip vienas neapsaugotas API endpoint panaikina visas kitas svetainės saugumo priemones. Nesvarbu koks sudėtingas administratoriaus slaptažodis. Nesvarbu, kad nėra viešos registracijos. Vienas endpoint be autorizacijos patikrinimo — ir serveris kompromituotas be nė vieno įvesto slaptažodžio.
JCE kūrėjas reagavo greitai ir atsakingai: pataisymas išleistas, nemokamas paketas senoms versijoms taip pat, detalus advisory paskelbtas. Tačiau atakos prasidėjo dar prieš pataisymą, PoC pasirodė šeštą dieną po jo, o automatizuotas botnetas nepauzuoja kol jūs skaitote šį straipsnį. Patikrinkite savo serverį pagal aukščiau pateiktą instrukciją ir atnaujinkite JCE iki 2.9.99.7.
