Milijonų dolerių vertės įmonės gynyba dažnai žlunga dėl paprasčiausių klaidų. Dalį vakarykščio vakaro praleidau savo namų laboratorijoje, atkurdamas sąlygas naujam pažeidžiamumui, dėl kurio „Ruby on Rails“ bendruomenė paskelbė aukšto lygio pavojų. Sąranka yra standartinė „Rails 8.0“ programa, naudojanti numatytąją „Active Storage“ konfigūraciją. Mažiau nei per dešimt minučių panaudojau suklastotą vaizdo failą, kad gaučiau programos duomenų bazės prisijungimo duomenis ir nuskaityčiau serverio aplinkos kintamuosius. Šis eksperimentas nebuvo sudėtingos kriptografijos ar rafinuotos socialinės inžinerijos pratybos. Tai buvo demonstracija, kaip patikimas, integruotas komponentas gali tapti skaitmeniniu Trojos arkliu, kai jis per daug pasitiki naudotojo įvestimi.
Pažeidžiamumas yra CVE-2026-66066, kritinis „Ruby on Rails“ karkaso „Active Storage“ komponento trūkumas. Paskelbtas liepos 30 d., jis turi 9.5 CVSS balą. Šis balas rodo aukštą pavojingumo lygį, nes ataka yra neautentifikuota. Užpuolikui nereikia slaptažodžio ar aktyvios sesijos, kad juo pasinaudotų. Jiems tereikia maršruto, kuris priima failų įkėlimą. Atsižvelgiant į tai, kiek daug šiuolaikinių programų priklauso nuo naudotojų pateiktų profilio nuotraukų, dokumentų įkėlimų ar bendrinamos medijos, atakos paviršius yra paplitęs visame internete.
„Active Storage“ yra „Rails“ posistemė, kuri valdo failų įkėlimus ir susieja juos su duomenų bazės įrašais. Ji tvarko viską – nuo integravimo su debesijos saugyklomis iki vaizdų transformacijų. Užkulisiuose „Active Storage“ atlieka eilę operacijų, kad identifikuotų, patvirtintų ir išsaugotų šiuos failus. Pažeidžiamumas, pramintas „KindaRails2Shell“, slypi tame, kaip karkasas apdoroja šiuos procesus nereikalaudamas išankstinio autentifikavimo patikrinimo. Žvelgiant iš rizikos perspektyvos, tai yra blogiausias scenarijus. Anoniminis lankytojas gali nusiųsti užklausą serveriui, kurią serveris tada apdoroja su padidintomis teisėmis.
Išnaudojimas sutelkiamas į neatitikimą tarp to, kuo failas dedasi esąs, ir to, kaip serveris jį interpretuoja. Užpuolikas įkelia failą su vaizdo plėtiniu, pvz., .jpg arba .png. Tačiau vidinis failo turinys nėra pikselių duomenys. Tai yra naudingasis krovinys, sukurtas sąveikauti su serverio pusės apdorojimo logika. Kai „Active Storage“ bando apdoroti šį failą, jis netyčia įvykdo įterptas instrukcijas. Tai sukelia situaciją, kai užpuolikas nuskaito jautrius vietinius failus arba įgyja nuotolinį kodo vykdymą. Šio tipo trūkumas yra tiesioginis smūgis sistemos konfidencialumui ir vientisumui.
Žvelgdami į grėsmių aplinką, matome dėsningumą, kai programuotojai daro prielaidą, kad integruotos karkaso funkcijos pagal numatytuosius nustatymus yra saugios. Tai architektūrinis paradoksas. Statome aukštas sienas aplink savo tinklus ir reikalaujame daugiapakopio autentifikavimo kiekvienam darbuotojui. Elgiamės kaip VIP klubo apsauginis prie kiekvienų vidinių durų, bet paliekame atvirą prekių pristatymo įėjimą, nes pasitikime pristatymo tarnyba. „Active Storage“ buvo ta pristatymo tarnyba. Kadangi tai yra pagrindinė „Rails“ ekosistemos dalis, daugelis programuotojų jai netaikė tų pačių griežtų „nulinio pasitikėjimo“ principų, kaip savo pačių parašytam kodui.
Kalbėjausi su šaltiniu per PGP šifruotą paštą, kuris specializuojasi karkasų saugume. Jie pažymėjo, kad trūkumas egzistuoja dėl to, kad failų priedų apdorojimo logika pagal projektą buvo prieinama neautentifikuotiems maršrutams. Šis prieinamumas buvo skirtas tam, kad failų valdymas būtų sklandus, tačiau tai sukūrė didžiulę skylę. Įsilaužimo atveju užpuolikas naudoja šią skylę, kad iš viešojo žiniatinklio serverio pereitų į vidinę duomenų bazę. Štai kaip paprastas vaizdo įkėlimas tampa pagrindinėmis durimis į įmonės paslaptis.
Kai pažeidžiamumas leidžia neautentifikuotą failų skaitymą, pagrindinis susirūpinimas yra paslapčių atskleidimas. Įprastoje „Rails“ aplinkoje šios paslaptys saugomos faile, vadinamame credentials.yml.enc, arba aplinkos kintamuosiuose. Šiuose failuose yra raktai į „karalystę“: duomenų bazių slaptažodžiai, trečiųjų šalių paslaugų API raktai ir pagrindinis raktas, naudojamas naudotojų sesijoms šifruoti. Jei užpuolikas gauna pagrindinį raktą, jis gali suklastoti sesijos slapukus ir apsimesti bet kuriuo naudotoju, įskaitant administratorius. Proaktyviai kalbant, tai yra visiškas programos perėmimas.
Davidas Shipley iš „Beauceron Security“ apibūdino šį išnaudojimą kaip „chef’s kiss“ užpuolikams. Jis teisus. Galimybė įkelti kodą, užmaskuotą kaip vaizdą, ir tada priversti serverį įvykdyti tą kodą yra galutinis piktavalių tikslas. Tai visiškai apeina tinklo perimetrą. Tradicinės ugniasienės ir antivirusinė programinė įranga dažnai sunkiai aptinka šiuos krovinius, nes srautas atrodo kaip standartinis „multipart form“ įkėlimas. Štai kodėl šis pažeidžiamumas yra toks nepastebimas.
„Rails“ pagrindinė komanda išleido pataisymus trims pagrindinėms karkaso versijoms. Įmonės privalo nedelsdami atnaujinti savo programas. Ištaisytos versijos yra 7.2.3.2, 8.0.5.1 ir 8.1.3.1. Be pataisymo, komandos turėtų patikrinti savo atnaujinimą peržiūrėdamos Gemfile.lock, kad įsitikintų, jog „Active Storage“ biblioteka atspindi naująją versiją. Tai vienintelis būdas išspręsti sisteminę problemą karkaso logikoje.
| „Rails“ versija | Pažeidžiamos versijos | Ištaisyta 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 |
Duomenų vientisumo požiūriu pataisymas yra pirmas žingsnis. Antrasis žingsnis yra teismo ekspertizės programos žurnalų peržiūra. Organizacijos turėtų ieškoti neįprastų POST užklausų į „Active Storage“ galinius taškus, ypač tų, kurios kyla iš nežinomų IP adresų. Jos taip pat turėtų ieškoti užklausų, kuriose yra netikėtų failų antraščių arba neįprastai mažų vaizdo failų, kuriuose yra tekstinių eilučių. Ši reaktyvi priemonė padeda nustatyti, ar pažeidžiamumu buvo pasinaudota prieš pritaikant pataisymą.
Šis incidentas rodo, kad negalime pasikliauti karkasu kaip vieninteliu saugumo užtikrintoju. Atspari architektūra reikalauja kelių apsaugos sluoksnių. Viena iš priešpriešinių priemonių yra perkelti vaizdų apdorojimą į izoliuotą paslaugą arba funkciją be serverio. Jei vaizdų apdorojimas vyksta „smėlio dėžėje“, kuri neturi prieigos prie pagrindinės programos duomenų bazės ar paslapčių, toks išnaudojimas kaip CVE-2026-66066 tampa kur kas mažiau pavojingas. Tai yra granuliuotos izoliacijos koncepcija.
Kitas požiūris – įdiegti griežtą įvesties patvirtinimą pakraštyje. Užuot leidus „Active Storage“ nustatyti, kas yra failas, specialus saugumo sluoksnis turėtų patikrinti failą. Šis sluoksnis patikrina failo „stebuklingus baitus“, kad įsitikintų, jog tai tikrai vaizdas. Jis taip pat pašalina metaduomenis, tokius kaip EXIF duomenys, kurie dažnai yra piktavališkų krovinių slėptuvė. Taip programa gerokai sumažina savo atakos paviršių.
Techniniai pataisymai yra būtini, tačiau žmogiškoji ugniasienė išlieka svarbiausia gynybos linija. Programuotojai turi suprasti, kad kiekviena išorinė įvestis yra potenciali grėsmė. Per savo etiško įsilaužėlio darbo metus mačiau, kad svarbiausios sistemos dažnai sugenda dėl nedidelės prielaidos, kurią programuotojas padarė prieš trejus metus. Privalome puoselėti kultūrą, kurioje kvestionuojame net patikimiausių įrankių saugumą. „Iš dėžės“ „Rails“ yra saugus, bet jis nėra nenugalimas.
Saugumo komandos turėtų atlikti visų programų, kurios tvarko naudotojų įkėlimus, rizikos vertinimą. Tai liečia ne tik „Rails“. Bet kuris karkasas, apdorojantis failus, turi panašią riziką. „KindaRails2Shell“ pažeidžiamumas yra priminimas, kad tinklo perimetras yra pasenęs pilies griovys. Tikrasis mūšis vyksta programos logikos viduje. Proaktyvus šių komponentų auditas yra būtinas šiuolaikinėms verslo operacijoms.
CVE-2026-66066 atradimas yra aiškus signalas, kad atvirojo kodo priklausomybių saugumas yra kritinės svarbos klausimas. Neturėtumėte laukti, kol įvyks įsilaužimas, kad atliktumėte programinės įrangos tiekimo grandinės auditą. Naudokite pažeidžiamumų skaitytuvą, kuris konkrečiai ieško pasenusių bibliotekų. Įsitikinkite, kad jūsų reagavimo į incidentus plane yra konkretus veiksmų planas karkaso lygio pažeidžiamumams. Tai užtikrins, kad kai naujienose pasirodys 9.5 CVSS balas, jūsų komanda tiksliai žinos, kaip reaguoti.
Šiandien atlikite išsamų savo „Ruby on Rails“ programų auditą. Identifikuokite kiekvieną „Active Storage“ egzempliorių ir patvirtinkite versijos numerį. Jei negalite nedelsdami pritaikyti pataisymo, apsvarstykite galimybę išjungti failų įkėlimą arba apriboti jį tik autentifikuotiems naudotojams kaip laikiną priemonę. Neautentifikuoto failų skaitymo rizika yra per didelė, kad ją būtų galima ignoruoti.
Šaltiniai: NIST National Vulnerability Database, Ruby on Rails Official Security Releases, MITRE ATT&CK Framework for Exploit Public-Facing Application (T1190).
Atsakomybės apribojimas: Šis straipsnis yra skirtas tik informaciniams ir švietimo tikslams ir nepakeičia profesionalaus kibernetinio saugumo audito ar reagavimo į incidentus paslaugų.



Pašto ir debesies saugojimo sprendimas suteikia galingiausias saugaus keitimosi duomenimis priemones, užtikrinančias jūsų duomenų saugumą ir privatumą.
/ Sukurti nemokamą paskyrą