WordPress 22. septembrī izlaida versiju 7.1.2, kurā ir tikai viens labojums. Tas aizver kļūdu CVE-2026-87902 ar CVSS novērtējumu 9,2: neautentificēts uzbrucējs var likt lapu veidņu izvēles kodam iekļaut lasāmu PHP failu ārpus aktīvās tēmas mapes. Kļūda ir visās versijās no 4.7.0 līdz 7.1.1. Tātad kļūda koda bāzē ir gandrīz desmit gadus.
Izstrādātāji ielāpu pārnesa uz 25 zariem, no 7.1.2 līdz pat 4.7.37. Vietnes ar ieslēgtiem automātiskajiem fona atjauninājumiem labojumu saņem pašas. Pārējām tas jāuzstāda ar roku caur administrācijas paneli vai no WordPress.org.
Kur kods izlaiž pārbaudi
Problēma ir funkcijā get_page_template(). Tā izlemj, kuru tēmas failu rādīt konkrētai lapai. Pēc Patchstack analīzes funkcijā ir divi koda ceļi. Pirmais pārbauda vaicājuma mainīgo pagename ar validate_file(). Otrais to pašu vērtību pēc URL dekodēšanas ieliek faila nosaukumā bez šīs pārbaudes. Faila nosaukums veidojas pēc šablona page-{$pagename}.php, tāpēc vērtībā var ielikt arī ../ segmentus.
Ar to vien nepietiek. Linux ceļu atrisina pa komponentēm, tāpēc mapei pirms pirmā ../ ir jāeksistē. Aktīvajai tēmai vajag augšējā līmeņa mapi, kuras nosaukums sākas ar page-. GitHub drošības paziņojumā kā piemēri nosauktas vecās noklusējuma tēmas Twenty Twelve un Twenty Fourteen. Tur pašā sarakstā ir arī Neve, Hestia un Sydney. Šīs trīs ir populāras bezmaksas tēmas no WordPress.org kataloga ar lielu instalāciju skaitu.
No faila iekļaušanas līdz koda izpildei
Faila iekļaušana pati par sevi vēl nav koda izpilde. Uzbrucējam serverī jāatrod PHP fails, kas pēc iekļaušanas izdara kaut ko noderīgu. Paziņojumā kā zināmu ceļu min PEAR rīka skriptu pearcmd.php. Tas lasa komandrindas argumentus no $_SERVER['argv']. Tīmekļa pieprasījumā šis masīvs tiek aizpildīts no vaicājuma virknes, ja PHP konfigurācijā ieslēgts register_argc_argv. Tad PEAR komandas var palaist caur URL. Viena no tām ieraksta diskā failu ar uzbrucēja izvēlētu saturu. Pēc tam serverī jau ir tīmekļa čaula.
Iestatījums register_argc_argv pēc noklusējuma ir ieslēgts oficiālajos PHP Docker attēlos. Tāpat tas ir cPanel serveros ar PHP versijām pirms 8.5. Abās vidēs PEAR bieži ir instalēts jau no sākuma. Tieši šī kombinācija padara kļūdu bīstamu kopīgajā hostingā.
“Neautentificēts uzbrucējs noteiktos apstākļos var likt lapas veidnes izvēlei iekļaut izvēlētu lasāmu lokālu PHP failu ārpus aktīvās tēmas direktorijām.” (WordPress 7.1.2 laidiena paziņojums)
Kam jāpārbauda vispirms
Ne katra WordPress vietne ir ievainojama. Risks pieaug, ja sakrīt vairāki apstākļi:
- aktīvā tēma ir Twenty Twelve, Twenty Fourteen, Neve, Hestia vai Sydney, vai arī tai ir cita mape ar nosaukumu
page-*; - serverī ir instalēts PEAR un
register_argc_argvir ieslēgts; - vietne darbojas konteinerā no oficiālā
phpattēla vai cPanel hostingā ar PHP 8.4 vai vecāku; - vietne izmanto ClassicPress. Šis WordPress atzarojums manto to pašu kodu.
Tēmas mapi var pārbaudīt ar ls -d wp-content/themes/*/page-*/. PHP iestatījumu parāda php -i | grep register_argc_argv, bet jāņem vērā, ka tīmekļa servera PHP var lietot citu php.ini nekā komandrinda. Drošāk ir apskatīt phpinfo() izvadi pašā vietnē un pēc tam šo lapu izdzēst.
Kļūda neprasa pieteikšanos. Cybersecurity News raksta, ka tas padara neatjauninātas vietnes par mērķi automātiskai interneta skenēšanai. Ziņu par aktīvu izmantošanu līdz 24. septembrim nav.
Kā pārbaudīt versiju un žurnālus
Drošības laidieni mazajās versijās WordPress kodolā tiek uzstādīti automātiski kopš versijas 3.7. Šo mehānismu var izslēgt ar konstanti WP_AUTO_UPDATE_CORE vai ar spraudni, tāpēc pieņemt to nevajag. Serverī ar WP-CLI versiju parāda komanda wp core version. Ja izvadā ir 7.1.2 vai sava zara labotais numurs, ielāps ir vietā.
Ja vietne kādu laiku bija neatjaunināta un atbilst augstāk minētajiem apstākļiem, ir vērts izskatīt piekļuves žurnālus. Aizdomīgi ir pieprasījumi, kuros parametrā pagename parādās .. vai tā URL kodējums %2e%2e. Tāpat jāmeklē vārds pearcmd. Pēc tam der pārbaudīt, vai tīmekļa saknē vai mapē /tmp nav parādījušies jauni PHP faili ar nesenu izmaiņu laiku.
Ko darīt, ja atjaunināt uzreiz nevar
Pilnu labojumu dod tikai atjaunināšana uz 7.1.2 vai sava zara jaunāko laidienu. Piemēram, 6.8 zaram tas ir 6.8.10. Pagaidu risinājums ir php.ini ierakstīt register_argc_argv = Off. Tas aizver zināmo ceļu uz koda izpildi, taču pati faila iekļaušana paliek. Patchstack saviem klientiem jau ieslēdza virtuālo ielāpu RapidMitigate, kas bloķē šādus pieprasījumus, pirms tie sasniedz WordPress.
Kļūdu atrada un atbildīgi ziņoja pētnieks Robert Ressl. Laidienu vadīja John Blackbourn. Tajā piedalījās vairāk nekā 32 WordPress izstrādātāji. ClassicPress uz LWN ziņas publicēšanas brīdi 23. septembrī savu drošības laidienu vēl nebija izdevis.
Avoti
- WordPress 7.1.2 Release (WordPress News)
- GHSA-7hp8-65ch-5whp (GitHub)
- WordPress 7.1.2 Security Release: Unauthenticated LFI to RCE (Patchstack)
- Critical WordPress RCE vulnerability announced (LWN.net)
- Critical WordPress Core Vulnerability Lets Attackers Execute Code Without Logging In (Cybersecurity News)
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.