Daudzu miljonu dolāru vērta uzņēmuma aizsardzība bieži vien neizdodas vienkāršākās neuzmanības dēļ. Daļu vakardienas pavadīju savā mājas laboratorijā, replicējot apstākļus jaunai ievainojamībai, kas ir izraisījusi augstu trauksmi Ruby on Rails kopienā. Uzstādījums ir standarta Rails 8.0 lietojumprogramma, izmantojot noklusējuma Active Storage konfigurāciju. Mazāk nekā desmit minūšu laikā es izmantoju speciāli izveidotu attēla failu, lai iegūtu lietojumprogrammas datubāzes akreditācijas datus un nolasītu servera vides mainīgos. Šis eksperiments nebija sarežģītas kriptogrāfijas vai izsmalcinātas sociālās inženierijas vingrinājums. Tas bija demonstrējums tam, kā uzticams, iebūvēts komponents var kļūt par digitālo Trojas zirgu, ja tas pārāk uzticas lietotāja ievadei.
Ievainojamība ir CVE-2026-66066, kritisks trūkums Ruby on Rails ietvara Active Storage komponentē. Tā tika publiskota 30. jūlijā, un tās CVSS rādītājs ir 9,5. Šis rādītājs norāda uz augstu bīstamības līmeni, jo uzbrukums ir neautentificēts. Uzbrucējam nav nepieciešama parole vai aktīva sesija, lai to izmantotu. Viņiem ir nepieciešams tikai maršruts, kas pieņem failu augšupielādi. Ņemot vērā, cik daudzas mūsdienu lietojumprogrammas paļaujas uz lietotāju sniegtajiem profila attēliem, dokumentu augšupielādi vai koplietotiem medijiem, uzbrukuma virsma ir plaši izplatīta visā internetā.
Active Storage ir Rails apakšsistēma, kas pārvalda failu augšupielādi un savieno tos ar datubāzes ierakstiem. Tā nodrošina visu, sākot no mākoņkrātuves integrācijas līdz attēlu transformācijām. Aizkulisēs Active Storage veic virkni operāciju, lai identificētu, apstiprinātu un uzglabātu šos failus. Ievainojamība, kas nodēvēta par KindaRails2Shell, slēpjas tajā, kā ietvars apstrādā šos procesus, nepieprasot iepriekšēju autentifikācijas pārbaudi. No riska viedokļa tas ir sliktākais iespējamais scenārijs. Anonīms apmeklētājs var nosūtīt pieprasījumu serverim, kuru serveris pēc tam apstrādā ar paaugstinātām atļaujām.
Ekspluats koncentrējas uz neatbilstību starp to, par ko fails uzdodas, un to, kā serveris to interpretē. Uzbrucējs augšupielādē failu, kuram ir attēla paplašinājums, piemēram, .jpg vai .png. Tomēr faila iekšējais saturs nav pikseļu dati. Tā ir lietderīgā slodze (payload), kas paredzēta mijiedarbībai ar servera puses apstrādes loģiku. Kad Active Storage mēģina apstrādāt šo failu, tas netīši izpilda iegultās instrukcijas. Tas noved pie situācijas, kad uzbrucējs nolasa sensitīvus lokālos failus vai iegūst attālinātu koda izpildi (RCE). Šāda veida trūkums ir tiešs trieciens sistēmas konfidencialitātei un integritātei.
Aplūkojot draudu ainavu, mēs redzam modeli, kurā izstrādātāji pieņem, ka iebūvētās ietvara funkcijas pēc noklusējuma ir drošas. Tas ir arhitektūras paradokss. Mēs būvējam augstas sienas ap mūsu tīkliem un ieviešam daudzfaktoru autentifikāciju katram darbiniekam. Mēs rīkojamies kā VIP kluba apsargs pie katrām iekšējām durvīm, bet atstājam piegādes ieeju atvērtu, jo uzticamies piegādes dienestam. Active Storage bija šis piegādes dienests. Tā kā tā ir galvenā Rails ekosistēmas sastāvdaļa, daudzi izstrādātāji nepiemēroja tai tos pašus stingros nulles uzticēšanās (zero-trust) principus, ko viņi piemēroja savam pielāgotajam kodam.
Es runāju ar avotu, izmantojot PGP šifrētu pastu, kurš specializējas ietvaru drošībā. Viņi atzīmēja, ka trūkums pastāv tāpēc, ka failu pielikumu apstrādes loģika pēc konstrukcijas bija pieejama neautentificētiem maršrutiem. Šī pieejamība bija paredzēta, lai padarītu failu apstrādi nevainojamu, taču tā radīja milzīgu caurumu. Ielaušanās gadījumā uzbrucējs izmanto šo caurumu, lai no publiskā tīmekļa servera piekļūtu iekšējai datubāzei. Šādi vienkārša attēla augšupielāde kļūst par galvenajām durvīm uz uzņēmuma noslēpumiem.
Ja ievainojamība pieļauj neautentificētu failu nolasīšanu, galvenā problēma ir noslēpumu atklāšana. Tipiskā Rails vidē šie noslēpumi tiek glabāti failā ar nosaukumu credentials.yml.enc vai vides mainīgajos. Šie faili satur "atslēgas uz valstību": datubāzes paroles, API atslēgas trešo pušu pakalpojumiem un galveno atslēgu (master key), ko izmanto lietotāju sesiju šifrēšanai. Ja uzbrucējs iegūst galveno atslēgu, viņš var viltot sesijas sīkfailus un uzdoties par jebkuru lietotāju, ieskaitot administratorus. Proaktīvi runājot, tā ir pilnīga lietojumprogrammas pārņemšana.
Deivids Šiplijs (David Shipley) no Beauceron Security raksturoja šo eksploatu kā "pavāra skūpstu" uzbrucējiem. Viņam ir taisnība. Spēja augšupielādēt kodu, kas maskēts kā attēls, un pēc tam panākt, lai serveris izpilda šo kodu, ir ļaundara galvenais mērķis. Tas pilnībā apej tīkla perimetru. Tradicionālie ugunsmūri un pretvīrusu programmatūra bieži vien nespēj atpazīt šīs lietderīgās slodzes, jo trafiks izskatās pēc standarta daudzdaļu formas (multipart form) augšupielādes. Tāpēc šī ievainojamība ir tik nemanāma.
Rails kodola komanda ir izlaidusi ielāpus trim galvenajām ietvara versijām. Uzņēmumiem nekavējoties jāatjaunina savas lietojumprogrammas. Fiksētās versijas ir 7.2.3.2, 8.0.5.1 un 8.1.3.1. Neatkarīgi no ielāpu instalēšanas, komandām būtu jāpārbauda atjauninājums, apskatot savu Gemfile.lock failu, lai pārliecinātos, ka Active Storage bibliotēka atbilst jaunajai versijai. Tas ir vienīgais veids, kā atrisināt sistēmisko problēmu ietvara loģikā.
| Rails versija | Ievainojamās versijas | Ielāpētā versija |
|---|---|---|
| Rails 7.2.x | < 7.2.3.2 | 7.2.3.2 |
| Rails 8.0.x | < 8.0.5.1 | 8.0.5.1 |
| Rails 8.1.x | < 8.1.3.1 | 8.1.3.1 |
Runājot par datu integritāti, ielāps ir pirmais solis. Otrais solis ir lietojumprogrammu žurnālu (logs) tiesu medicīnas ekspertīze. Organizācijām jāmeklē neparasti POST pieprasījumi Active Storage galapunktiem, īpaši tie, kas nāk no nezināmām IP adresēm. Tāpat jāmeklē pieprasījumi, kas satur negaidītas failu galvenes vai neparasti mazus attēlu failus, kuros ir teksta virknes. Šis reaktīvais pasākums palīdz noteikt, vai ievainojamība tika izmantota pirms ielāpa uzstādīšanas.
Šis incidents rāda, ka mēs nevaram paļauties uz to, ka ietvars būs vienīgais drošības nodrošinātājs. Elastīgai arhitektūrai ir nepieciešami vairāki aizsardzības slāņi. Viens no pretpasākumiem ir pārcelt attēlu apstrādi uz izolētu pakalpojumu vai bezservera (serverless) funkciju. Ja attēlu apstrāde notiek smilškastē (sandbox), kurai nav piekļuves galvenajai lietojumprogrammas datubāzei vai noslēpumiem, tāds eksploats kā CVE-2026-66066 kļūst daudz mazāk bīstams. Tas ir granulētās izolācijas koncepts.
Cita pieeja ir ieviest stingru ievades validāciju perimetrā. Tā vietā, lai ļautu Active Storage noteikt, kas ir fails, tam paredzētam drošības slānim būtu jāpārbauda fails. Šis slānis pārbauda faila maģiskos baitus (magic bytes), lai pārliecinātos, ka tas patiešām ir attēls. Tas arī iztīra metadatus, piemēram, EXIF datus, kas bieži vien ir slēptuve ļaundabīgām lietderīgajām slodzēm. Šādi rīkojoties, lietojumprogramma ievērojami samazina savu uzbrukuma virsmu.
Tehniskie labojumi ir nepieciešami, taču cilvēka ugunsmūris joprojām ir vissvarīgākā aizsardzības līnija. Izstrādātājiem jāsaprot, ka katra ārējā ievade ir potenciāls drauds. Savos ētiskā hakerera darba gados esmu redzējis, ka vissvarīgākās sistēmas bieži vien neizdodas viena neliela pieņēmuma dēļ, ko izstrādātājs izdarījis pirms trim gadiem. Mums ir jāveicina kultūra, kurā mēs apšaubām pat visuzticamāko rīku drošību. Rails "no kastes" ir drošs, taču tas nav neievainojams.
Drošības komandām būtu jāveic riska novērtējums visām lietojumprogrammām, kas apstrādā lietotāju augšupielādes. Tas neattiecas tikai uz Rails. Jebkuram ietvaram, kas apstrādā failus, ir līdzīgi riski. KindaRails2Shell ievainojamība ir atgādinājums, ka tīkla perimetrs ir novecojis pils grāvis. Īstā cīņa notiek lietojumprogrammas loģikas iekšienē. Proaktīva šo komponentu auditēšana ir prasība mūsdienu biznesa darbībai.
CVE-2026-66066 atklāšana ir skaidrs signāls, ka atvērtā pirmkoda atkarību drošība ir kritiski svarīga problēma. Jums nevajadzētu gaidīt, kamēr notiek ielaušanās, pirms auditējat savu programmatūras piegādes ķēdi. Izmantojiet ievainojamību skeneri, kas īpaši meklē novecojušas bibliotēkas (gems). Pārliecinieties, ka jūsu incidentu novēršanas plānā ir iekļauts specifisks rīcības plāns ietvara līmeņa ievainojamībām. Tas nodrošinās, ka tad, kad ziņās parādīsies 9,5 CVSS rādītājs, jūsu komanda precīzi zinās, kā rīkoties.
Veiciet pilnu savu Ruby on Rails lietojumprogrammu auditu šodien. Identificējiet katru Active Storage instanci un apstipriniet versijas numuru. Ja nevarat nekavējoties uzstādīt ielāpu, apsveriet iespēju atspējot failu augšupielādi vai ierobežot to tikai autentificētiem lietotājiem kā pagaidu risinājumu. Neautentificētas failu nolasīšanas risks ir pārāk augsts, lai to ignorētu.
Avoti: NIST National Vulnerability Database, Ruby on Rails Official Security Releases, MITRE ATT&CK Framework for Exploit Public-Facing Application (T1190).
Atruna: Šis raksts ir paredzēts tikai informatīviem un izglītojošiem mērķiem un neaizstāj profesionālu kiberdrošības auditu vai incidentu novēršanas pakalpojumu.



Mūsu end-to-end šifrētais e-pasta un mākoņdatu glabāšanas risinājums nodrošina visefektīvākos līdzekļus drošai datu apmaiņai, garantējot jūsu datu drošību un konfidencialitāti.
/ Izveidot bezmaksas kontu