Kompania Truffle Security publikoi skenarë sulmesh ndaj disa teknikave tipike të punës me depozitë në GitHub, të cilat lejojnë nxjerrjen e të dhënave nga depozita të largëta që kanë forka publike ose që janë krijuar si forka.
Mundësi për të aksesuar komitetet sipas hash-it në të gjitha fork përkatëse të depozitave është shkaktuar nga fakti se GitHub, për qëllime optimizimi dhe përjashtimi të kopjimeve, ruan së bashku të gjitha objektet nga depozitari kryesor dhe fork-et, duke i ndarë vetëm logjikisht përkatësinë e komiteteve. Ky ruajtje lejon të shikoni në depozitarin kryesor çdo komitet nga çdo fork, duke e treguar qartë hash-in në URL. Për shembull, përdoruesi mund të krijojë një fork të depozitës "/torvalds/linux" dhe të shtojë në të çdo kod, pas së cilës ky kod do të jetë i aksesueshëm përmes një lidhjeje hash të drejtpërdrejtë në depozitarin "/torvalds/linux". Në rast se depozita fshihet, nëse ka të paktën një fork publik, të dhënat nga depozita e fshirë mbeten të aksesueshme sipas hash-it të komitetit.
Propozohet tri skenarë që paraqesin kërcënim për sigurinë:
- Skema e parë trajton situatat kur zhvilluesit krijojnë forka të repo publik, shtojnë ndryshime në to, eksperimentojnë dhe më pas i fshijnë. Përveç rrjedhjes së kodit që nuk është menduar për publikim, rreziku paraqet situata kur gjatë eksperimenteve në kodin e skedarëve me shembuj shtohen çelësa të punës për akses në API. Në këtë rast, një sulmues mund të fitojë qasje në ndryshimin sipas hash-it të komitit, që adresohet pas fshirjes së forkut përmes repo kryesor. Për shembull, nëpërmjet metodës së propozuar, hulumtuesit arritën të identifikojnë 30 çelësa të punës për akses në API duke studiuar tre repo të lidhura me mësimin e makinerive me një numër të madh forkesh.
- Skenari i dytë ka të bëjë me mundësinë e marrjes së qasjes në të dhëna pas fshirjes së depozitës përkatëse, nëse për këtë depozitë janë krijuar forka. Si një shembull jepet rasti kur në një depozite publike të një kompanie u publikuan aksidentalisht çelësat e mbyllur të një prej punonjësve, duke lejuar qasje të plotë në të gjitha depozitë e kësaj kompanie në GitHub. Kompania e fshiu depozitën përmes së cilës ndodhi rrjedhja, por çelësat ende mbetën të disponueshëm për t'u tërhequr përmes thirrjeve me hash-in e komit në depozitë me forkat.

- Skenari i tretë lidhet me modelin e zhvillimit të projekteve, të cilat zhvillojnë një version bazik të hapur në një depo publike dhe një version të zgjeruar pronar në një depo private. Nëse një kompani fillimisht zhvilloi projektin në një depo private dhe më pas, pas hapjes së kodit të projektit, e kaloi atë në kategorinë e projekteve publike, por vazhdoi zhvillimin e një versioni të mbyllur të brendshëm ose të zgjeruar në një fork privat, atëherë ekziston mundësia e qasjes në ndryshimet e ndërlidhura me fork-un privat përmes hash-eve të komiteteve përmes depozites publike. Në këtë rast, qasja është e mundur vetëm për ndryshimet, që janë shtuar në fork-un privat përpara se depoja kryesore të kalonte në kategorinë e projekteve publike (depozitat e depozitimeve private dhe publike janë të ndara, por, kur dy depozita ishin private, komitetet ruheshin së bashku, prandaj mbetën në depo pas kalimit të saj në kategorinë e projekteve publike).

Një truk që lejon qasje në komitetet në fork-et e një depoje përmes lidhjes me depozitën kryesore është njohur për shumë vite dhe përdoret herë pas here për shaka të ndryshme dhe për të mashtruar zhvilluesit (p.sh., shakatë ndonjëherë krijojnë një dukje të zëvendësimit të backdoor-ve në depozitën me thelb Linux në GitHub). Si një masë për të parandaluar këto shaka, GitHub ka shtuar një paralajmërim që komiteti i kërkuar nuk i përket degëve në depozitën aktuale dhe mund të përkasë një fork. Megjithatë, vetë mundësia për të aksesuar komitetet përmes hash-it në çdo fork të lidhur me depozitën është parë si e padëmshme, pasi kërkohet njohja e hash-it të komitetit për të aksesuar të dhënat në fork-et e largëta dhe private.
Të gjesh hash-in e komitetit, i formuar në bazë të algoritmit SHA-1 dhe që përmban 32 simbole, është e pamundur, por doli se as nuk është e nevojshme. GitHub mbështet një formë të shkurtuar të referimit në komitete, duke lejuar adresimin e ndryshimeve nga disa simbole të para të hash-it, nëse nuk ka pjesë të përbashkëta me komitete të tjera. Numri minimal i simboleve për adresimin e shkurtuar të hash-it është 4, që përkon me një provë të të gjitha 65 mijë kombinacioneve (16^4). Ndërkohë, provimi nuk mund të kërkohet, pasi API GitHub lejon lidhjen e përpunuesve për kapjen e ngjarjeve, që përdoren nga projekte të jashtme, duke mbajtur një arkiv me log-un e plotë të të gjitha operacioneve, në të cilin informacioni mbi hash-et e komiteteve mbetet edhe pas fshirjes së depozitave.
Burimi: opennet.ru


