17. jūlijā WordPress izlaida 7.0.2 un 6.9.5 — divus drošības laidienus, kas aizver caurumu, caur kuru anonīms uzbrucējs izpilda kodu uz noklusējuma instalācijas. Nevajag kontu. Nevajag spraudni. Nevajag īpašu konfigurāciju — pietiek ar vienu HTTP pieprasījumu uz REST API. Caurumam ir vārds wp2shell un CVSS vērtējums 9,8 no 10.
To atrada Adam Kues no Assetnote (Searchlight Cyber) un ziņoja caur WordPress HackerOne programmu. Laidiens labo divas atsevišķas kļūdas, kas kopā veido pilnu ķēdi no anonīma pieprasījuma līdz koda izpildei: piekļuves kontroles kļūdu REST batch galapunktā (CVE-2026-63030) un SQL injekciju WP_Query parametrā (CVE-2026-60137). Ievainojama ir tīra instalācija, bez neviena spraudņa.
Kā batch galapunkts sajauc pieprasījumus
Batch galapunkts /wp-json/batch/v1 parādījās, lai bloku redaktors un citi rīki varētu nosūtīt vairākas darbības vienā izsaukumā, nevis pa vienam pieprasījumam katrai. Iekšēji WordPress šos apakšpieprasījumus glabā trīs paralēlos masīvos: $requests tur pašus pieprasījumus, $validation tur to pārbaudes rezultātus, un $matches saista katru pieprasījumu ar maršrutu un apstrādātāju. Trim masīviem indeksiem jāsakrīt.
Tie nesakrīt. Kad viens apakšpieprasījums ir apzināti sabojāts un neiziet parsēšanu, WordPress to ieraksta $validation, bet $matches tam ierakstu neizveido. Masīvi sabīdās par vienu. No šī brīža pieprasījums numur N tiek apstrādāts ar tā maršrutu un atļauju pārbaudi, kas pieder pieprasījumam N+1.
Praktiski tas nozīmē, ka nekaitīgs, publiski pieejams pieprasījums iziet cauri atļauju pārbaudei, un pēc tam nostrādā privileģēta apstrādātāja kods. Drošības firma Hadrian savā tehniskajā aprakstā to sauc par maršruta sajaukšanu — apstrādātājs izpilda operāciju ar svešām tiesībām. Kļūdas klase ir CWE-284, nepareiza piekļuves kontrole. Galapunkts ir daļa no kodola un ieslēgts pēc noklusējuma; to sasniedz gan pa /wp-json/batch/v1, gan pa /?rest_route=/batch/v1. Tāpēc bloķēt vienu adresi ir par maz.
SQL injekcija otrajā posmā
Otra kļūda ir SQL injekcija parametrā author__not_in, ko WordPress padod WP_Query pieprasījumiem. To pieteica cita komanda — TF1T, dtro un haongo. Pati par sevi injekcija ļauj lasīt datubāzi, bet caur batch galapunktu tai vairs nevajag autentifikāciju. Uzbrucējs vispirms izmanto maršruta sajaukšanu, lai tiktu līdz privileģētam apstrādātājam, un tad caur to nostrādā SQL injekciju.
Datubāzē glabājas lietotāju paroļu jaucējvērtības, sesiju un pieteikšanās žetoni. Tiklīdz uzbrucējs var izpildīt patvaļīgus SQL vaicājumus administratora tiesībās, no datu nolasīšanas līdz pilnīgai vietnes pārņemšanai ceļš ir īss. Tieši tāpēc wp2shell CVSS vērtējums sasniedza 9,8.
Vecākajam 6.8 atzarojumam iznāca 6.8.6, kas labo vēl vienu SQL injekciju no tā paša ziņojumu viļņa. Tā ir atsevišķa kļūda, tāpēc atjaunināšana der arī tiem, kas vēl nav pārgājuši uz 6.9 vai 7.0.
Skartās versijas un piespiedu atjaunināšana
Ievainojamas ir versijas no 6.9.0 līdz 6.9.4 un no 7.0.0 līdz 7.0.1. Labojums ir 6.9.5 un 7.0.2. Tā kā cauruma bīstamība ir augsta un publisks PoC exploit jau ir pieejams, WordPress.org ieslēdza piespiedu automātisko atjaunināšanu vietnēm, kas darbojas uz skartajām versijām. Daudzas vietnes tāpēc atjauninājās pašas, bez administratora klikšķa.
Kļūda tika izpausta koordinēti: Adam Kues ziņoja to caur HackerOne, WordPress komanda sagatavoja labojumu klusi, un laidiens iznāca vienlaikus visiem trim atbalstītajiem atzarojumiem. Daudzi hostingi un CDN uzstādīja aizsardzību tīkla līmenī vēl pirms publiskā laidiena, tāpēc daļa vietņu bija nosegtas jau agrāk. Publiskais PoC parādījās dienas pēc laidiena, tāpēc laika logs starp labojumu un plaši pieejamu uzbrukuma kodu bija īss.
WordPress dibinātājs Matt Mullenweg savā oficiālajā paziņojumā lūdza atjaunināt tik un tā un pārskatīt drošības procedūras.
Drošība šogad būs liela tēma, jo tehnoloģiju nozare sagremo milzīgos AI modeļu uzlabojumus.
Piebilde nav tukša. AI rīki paātrina gan aizsardzību, gan uzbrukumus: šī paša mēneša laikā līdzīgus pieteikumus caur HackerOne saņēma curl komanda, kas uz jūliju apturēja ziņojumu pieņemšanu AI radīta trokšņa dēļ.
Ko darīt tagad
Ja tavā pārziņā ir WordPress vietne, pārbaudi versiju administratora panelī un pārliecinies, ka tā ir vismaz 6.9.5, 7.0.2 vai 6.8.6. Piespiedu atjaunināšana nav garantija — daļa hostingu bloķē automātiskos laidienus vai tur vecas versijas iesaldētas. Ja vari, bloķē piekļuvi batch galapunktam ugunsmūra vai tīmekļa servera līmenī. Bloķē abas adreses — gan /wp-json/batch/v1, gan /?rest_route=/batch/v1, jo vienas aizvēršana atstāj otru vaļā.
Ja ir aizdomas par kompromitāciju, servera žurnālos meklē POST pieprasījumus uz /wp-json/batch/v1 vai /?rest_route=/batch/v1, it īpaši ar sabojātu apakšpieprasījumu ķermenī. Uzbrukuma pēdas paliek arī jaunos administratora kontos un mainītos spraudņu failos, tāpēc pēc atjaunināšanas der pārskatīt lietotāju sarakstu un failu izmaiņas.
Pēc tam der pārskatīt, cik daudz REST API ir atvērts neautentificētiem lietotājiem. wp2shell strādāja tāpēc, ka galapunkts bija sasniedzams bez pieteikšanās, un pati sajaukšanās notika parsēšanas kļūdu apstrādē — vietā, ko reti kāds pārbauda. Adam Kues publicēja pārbaudes rīku wp2shell.com, ar ko var noskaidrot, vai konkrēta vietne ir labota.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.