Kompania Truffle Security publikoi skenarët e sulmeve mbi disa metoda standard të punës me repositorët në GitHub, të cilat lejojnë nxjerrjen e të dhënave nga repositorët e largët, të cilët kanë forka publike ose janë krijuar si forka.
Mundësia për të aksesuar komitetet përmes hash-it në të gjitha forkat e lidhura të repositorëve është shkaktuar nga fakti që GitHub për qëllime optimizimi dhe për të eliminuar kopjet, ruan së bashku të gjitha objektet nga repositori kryesor dhe forka, duke e ndarë vetëm logjikisht përkatësinë e komiteteve. Kjo ruajtje lejon shikimin në repositorin kryesor të çdo komiteti nga çdo fork, duke treguar qartë hash-in e tij në URL. Për shembull, një përdorues mund të krijojë një fork të repositorit "\/torvalds\/linux" dhe të shtojë në të çdo kod, pas së cilës ky kod do të jetë i acessueshëm përmes një lidhjeje hash në repositorin "\/torvalds\/linux". Në rast se repoja fshihet, nëse ka të paktën një fork publik, të dhënat nga repositori i largët mbeten të aksesueshme përmes hash-it të komitetit.
Ofrohen tre skenarë që paraqesin rrezik për sigurinë:
- Skenari i parë prek situatat kur zhvilluesit krijojnë forka të repositorëve publikë, shtojnë ndryshime në to, eksperimentojnë dhe më pas i fshijnë. Përveç rrjedhjes së kodit që nuk është menduar për publikim, rreziku paraqitet nga situata kur në eksperimente në kodin e skedarëve me shembuj shtohen çelësa të punës për aksesin në API. Në këtë rast, sulmuesi mund të aksesojë ndryshimin përmes hash-it të komitetit, duke iu drejtuar pas fshirjes së forkut përmes repositorit kryesor. Për shembull, me metodën e sugjeruar, studiuesit ishin në gjendje të identifikonin 30 çelësa të punës për aksesin në API, duke studiuar tre repositorë të lidhur me mësimin e makinerive me një numër të madh forkas.
- Skenari i dytë lidhet me mundësinë e aksesit në të dhëna pas fshirjes së depozitës kryesore, nëse për këtë depozitë janë krijuar fork-e. Një shembull është rasti kur në një depo publike të një kompanie janë publikuar aksidentalisht çelësat e mbyllur të njërit prej punonjësve, duke lejuar akses 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ë aksesueshëm për ekstraktim përmes kërkesave me hash-in e commit-it në depo me fork-e.

- Skenari i tretë lidhet me modelin e zhvillimit të projekteve, të cilat zhvillojnë një version bazë të hapur në një depo publike dhe një version të zgjeruar pronar në një depo private. Nëse kompania fillimisht e zhvilloi projektin në një depo private dhe më pas, pas hapjes së kodit të projektit, e transferoi atë në statusin publik, por vazhdoi zhvillimin e një versioni të mbyllur të brendshëm ose të zgjeruar në një fork private, ka mundësi të aksesoni ndryshimet e shtuar në fork-un privat përmes hash-ave të commit-eve në depo publike. Në këtë rast, aksesimi është i mundur vetëm për ndryshimet e shtuara në fork-un privat para se depoja kryesore të kalonte në statusin publik (depozitat e depozitave private dhe publike janë të ndara, por, kur dy depo ishin private, commit-et janë ruajtur së bashku, ndaj mbetën në depo pasi ajo kaloi në statusin publik).

Truku që lejon aksesin në commit-et në fork-e të depozitës përmes lidhjes me depozitën kryesore është i njohur prej shumë vjetësh dhe përdoret periodikisht për shaka të ndryshme dhe për të mashtruar zhvilluesit (për shembull, shakatë herë pas here krijojnë një dukje të zëvendësimit të backdoor-eve në depozitën e bërthamës Linux në GitHub). Si masë për të kundërshtuar këto shaka, GitHub ka shtuar një paralajmërim që tregon se commit-i i kërkuar nuk i përket degëve në depozitën aktuale dhe mund të përkasë një fork. Ndërkohë, mundësia për të aksesuar commit-et përmes hash-it në çdo depo të lidhur me fork-e është konsideruar si e pafajshme, pasi për kërkesat ndaj të dhënave në fork-e të largëta dhe private është e nevojshme të dihet hash-i i commit-it.
Gjetja e një commit hash-i, i cili formohet në bazë të algoritmit SHA-1 dhe përfshin 32 karaktere, është e pamundur, por rezulton se nuk është e nevojshme. GitHub mbështet një formë të shkurtuar të referencës për commit-et, e cila lejon adresimin e ndryshimeve sipas disa karaktereve të para të hash-it, nëse nuk ekzistojnë mbivendosje me commit-et e tjera. Numri minimal i karaktereve për adresimin e shkurtruar të hash-it është 4, çka është e barabartë me përllogaritjen e rreth 65 mijë kombinacioneve (16^4). Në këtë rast, ndoshta nuk është e nevojshme të bëhet përllogaritje, pasi API-ja e GitHub-it lejon lidhjen e trajtuesve për kapjen e ngjarjeve, të cilat përdoren nga projekte të tjera të jashtme që mbajnë një arkiv me të gjithë log-ët e operacioneve, në të cilin informacioni mbi hash-et e commit-eve mbetet dhe pas fshirjes së repozitorive.
Burimi: opennet.ru


