WordPress 17. jūlijā izlaida trīs ārkārtas versijas — 6.8.6, 6.9.5 un 7.0.2 — un ieslēdza piespiedu automātisko atjaunināšanu. Iemesls ir divu kļūdu ķēde ar segvārdu wp2shell, kas kopā ļauj uzbrucējam bez paroles palaist kodu uz noklusējuma WordPress instalācijas. Kopējais CVSS novērtējums ir 9,8 no 10.
19. jūlijā parādījās publisks izmantošanas kods, un uzbrukumi sākās gandrīz uzreiz. Drošības firma VulnCheck līdz 19. jūlijam saskaitīja vairāk nekā divus desmitus atšķirīgu darbspējīgu PoC. Uzbrucēji izvieto webshell un izveido slēptus administratora kontus, pēc kā vietne ir pilnā svešā kontrolē. WordPress ir pasaulē visplašāk lietotā satura vadības sistēma, tāpēc skarto vietņu skaits mērāms miljonos.
Divas kļūdas, katra atsevišķi mazkaitīga
Ķēdi veido divas dažādas ievainojamības. Pirmā, CVE-2026-60137, ir SQL injekcija WP_Query parametrā author__not_in. Parametrs netiek pareizi attīrīts, tāpēc neuzticama ievade nonāk tieši datubāzes vaicājumā. Atsevišķi šī kļūda saņem CVSS 5,9 — vidēju vērtējumu, jo pati par sevi tā ļauj tikai nolasīt datubāzes saturu, piemēram, izvilkt lietotāju paroļu jaucējkodus. To atrada pētnieki TF1T, dtro un haongo.
Otrā, CVE-2026-63030, ir maršruta apjukums WordPress REST API batch galapunktā. Adam Kues no Assetnote (Searchlight Cyber) atklāja, ka batch galapunkts nepareizi pārbauda, uz kuru iekšējo maršrutu pieprasījums patiesībā tiek novirzīts. Batch galapunkts pastāv, lai vienā HTTP pieprasījumā apvienotu vairākus REST izsaukumus, bet tieši šī apvienošana ļauj apiet atļauju pārbaudi. Tāpēc neautentificēts pieprasījums var sasniegt galapunktus, kas normāli prasa pieteikšanos.
Kā abas kļūdas savienojas līdz koda izpildei
Katra kļūda atsevišķi ir problēma, bet ne katastrofa. Batch maršruta apjukums padara SQL injekciju neautentificētu: uzbrucējs caur batch galapunktu nosūta payload uz autentificēto endpointu, kas izsauc author__not_in. Tālāk uzbrucējs ar SQL injekciju izveido jaunu administratora kontu un pēc tam veic parastu pēcuzbrukuma darbību — augšupielādē webshell. Horizon3.ai to raksturo kā neautentificētu koda izpildi pret noklusējuma WordPress vietni, kurai nav vajadzīgs neviens spraudnis.
Uzbrukumam nav vajadzīgs neviens spraudnis un neviena iepriekšēja pieteikšanās. Pietiek ar tīru WordPress un pieprasījumu uz batch galapunktu.
Tieši šī kombinācija ceļ kopējo vērtējumu no vidēja 5,9 uz kritisku 9,8. Atsevišķa SQL injekcija prasītu pieteikšanos, atsevišķs maršruta apjukums pats par sevi neizpildītu kodu. Kopā tās izlaiž abus šķēršļus.
REST API WordPress ir ieslēgts pēc noklusējuma kopš versijas 4.7, kas iznāca 2016. gadā. Tas nozīmē, ka batch galapunkts ir sasniedzams praktiski katrā modernā instalācijā, arī tur, kur īpašnieks REST API nekad nav apzināti izmantojis. Uzbrukuma virsma nav atkarīga no spraudņiem vai motīviem, tikai no kodola versijas.
Kuras versijas ir skartas
SQL injekcija skar WordPress 6.8.0–6.8.5, 6.9.0–6.9.4 un 7.0.0–7.0.1. Batch maršruta apjukums parādījās tikai 6.9 sērijā, tāpēc pilnā neautentificētā ķēde darbojas uz 6.9.x un 7.0.x. Vecākās 6.8.x vietnes ir ievainojamas pret datu nolasīšanu, bet ne pret pilno pārņemšanu.
Labotās versijas ir 6.8.6, 6.9.5 un 7.0.2. Vēl neizlaistā 7.1 satur to pašu labojumu, sākot no beta2. WordPress komanda šoreiz ieslēdza piespiedu automātisko atjaunināšanu — solis, ko projekts izmanto reti, tikai visnopietnākajos gadījumos. Vietnes, kurām kodola autoatjaunināšana bija atstāta ieslēgta, lielākoties saņēma ielāpu jau naktī pēc izlaišanas.
Kā notikumi risinājās
17. jūlijā WordPress vienlaikus izlaida ielāpus un publicēja tehnisko aprakstu. Divu dienu logs starp ielāpu un publisko PoC 19. jūlijā bija pietiekams, lai automatizēta skenēšana atrastu neatjauninātas vietnes. VulnCheck fiksēja masveida pieprasījumus uz batch galapunktu jau tajā pašā nedēļas nogalē. Tas atkārto pazīstamu shēmu: kritiska kļūda kļūst bīstamākā nevis izlaišanas brīdī, bet dienas pēc tam, kad parādās gatavs izmantošanas kods.
Ko darīt tagad
Vispirms pārbaudi versiju sadaļā Dashboard → Updates vai ar wp core version. Ja instalācija jau ir 6.8.6, 6.9.5 vai 7.0.2, ķēde ir aizvērta. Ja automātiskā atjaunināšana iepriekš bija izslēgta, atjaunini rokām nekavējoties.
Pēc tam pārbaudi, vai vietne nav jau kompromitēta. Meklē nesen izveidotus administratora kontus lietotāju sarakstā, svešus PHP failus wp-content/uploads mapē un neparastus ierakstus servera piekļuves žurnālos ap batch galapunktu /wp-json/batch/v1. Tenable norāda, ka atjaunināšana aizver caurumu, bet neizmet uzbrucēju, kurš tur jau iekļuvis — inficētu vietni jātīra atsevišķi.
Cloudflare izvietoja WAF kārtulas, kas bloķē abus izmantošanas soļus arī nelabotām vietnēm. Tā ir pagaidu aizsardzība tiem, kas atjaunināšanu vēl nav paguvuši, nevis ielāpa aizvietotājs. Aģentūrām un mitināšanas pakalpojumiem, kas uztur daudzas klientu vietnes, tā ir iespēja nosegt visu floti, kamēr atsevišķie atjauninājumi vēl rit.
Pirms atjaunināšanas der izveidot datubāzes un failu dublējumu, jo ielāps maina kodola failus, un uz vecākiem PHP laidieniem atsevišķos gadījumos jāpārbauda spraudņu saderība. Ja vietne darbojas ar staging kopiju, ielāpu vērts izmēģināt tur pirms produkcijas. Bet gaidīšana ar testēšanu maksā dārgi: katra diena bez ielāpa ir diena, kad automatizētā skenēšana var atrast tieši šo vietni.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.