Společnost Truffle Security zveřejnila scénáře útoků na několik typických technik práce s repozitáři na GitHubu, které umožňují extrakci dat z veřejných repozitářů, které mají veřejné forky nebo byly vytvořeny jako forky.
Možnost přístupu k commitům podle hashe ve všech spojených forech repozitáře je způsobena tím, že GitHub pro optimalizaci a odstranění duplicit uchovává všechny objekty z hlavního repozitáře a forků pohromadě, pouze logicky odděluje příslušnost commitů. Takové uchovávání umožňuje prohlížení jakéhokoli commitu z jakéhokoli forku v hlavním repozitáři, když je jasně uveden jeho hash v URL. Například uživatel může vytvořit fork repozitáře "/torvalds/linux" a přidat do něj jakýkoli kód, přičemž tento kód se pak stává dostupným prostřednictvím přímého hash odkazu v repozitáři "/torvalds/linux". V případě smazání repozitáře, pokud existuje alespoň jeden veřejný fork, zůstávají data z odstraněného repozitáře dostupná podle hashe commitu.
Nabízí se tři scénáře, které představují bezpečnostní hrozbu:
- První scénář se týká situací, kdy vývojáři vytvářejí forky veřejných repozitářů, přidávají do nich změny, experimentují a poté je odstraňují. Kromě úniku kódu, který nemá být publikován, představuje nebezpečí situace, kdy jsou během experimentů v kódech souborů s příklady přidávány funkční klíče přístupu k API. V tomto případě může útočník získat přístup k změně podle hashe commitu adresovaného po odstranění forku prostřednictvím hlavního repozitáře. Například tímto navrhovaným způsobem dokázali výzkumníci určit 30 funkčních klíčů přístupu k API studiem tří souvisejících repozitářů strojového učení s velkým počtem forků.
- Druhý scénář se týká možnosti získání přístupu k datům po odstranění primárního repozitáře, pokud byly pro tento repozitář vytvořeny forky. Jako příklad se uvádí případ, kdy v veřejném repozitáři jedné společnosti byly omylem zveřejněny soukromé klíče jednoho z zaměstnanců, které umožňovaly získat plný přístup ke všem repozitářům této společnosti na GitHubu. Společnost odstranila repozitář, přes který došlo k úniku, ale klíče zůstaly stále dostupné pro extrakci prostřednictvím odkazů na hash commitu v repozitářích s forky.

- Třetí scénář je spojen s modelem vývoje projektů, které rozvíjejí základní otevřenou verzi ve veřejném repozitáři a rozšířenou proprietární verzi v privátním. Pokud společnost původně vyvíjela projekt v privátním repozitáři a poté po otevření kódu projektu ho převedla na veřejný, ale i nadále vyvíjela uzavřenou interní nebo rozšířenou verzi v privátním forku, existuje možnost přístupu k přidaným změnám v privátním forku pomocí hashů commitů přes veřejný repozitář. Přičemž přístup je možný pouze ke změnám, které byly přidány do privátního forku před převodem hlavního repozitáře na veřejný (úložiště privátních a veřejných repozitářů jsou oddělená, avšak když byly oba repozitáře privátní, commity byly uloženy společně, a proto zůstaly v repozitáři po jeho převodu na veřejný).

Trik, který umožňuje přístup k commitům ve forkách repozitáře prostřednictvím odkazu na hlavní repozitář, je znám již mnoho let a občas se používá pro různé žerty a uvedení vývojářů do omylu (například vtipálci občas tímto způsobem vytvářejí zdání vložení backdoorů do repozitáře jádra Linux na GitHubu). Jako opatření proti takovým žertům přidal GitHub upozornění, že požadovaný commit se netýká větví v aktuálním repozitáři a může patřit forkům. Přitom sama možnost přístupu k commitům podle hashe v jakýchkoli souvisejících forkách repozitářů byla považována za neškodnou, protože pro přístup k datům v vzdálených a privátních forkách je třeba znát hash commitu.
Najít hash commitu generovaný na základě algoritmu SHA-1, který zahrnuje 32 znaků, není reálné, ale zjistilo se, že to ani není potřeba. GitHub podporuje zkrácenou formu adresování commitů, která umožňuje odkazovat na změny podle několika prvních znaků hashe, pokud neexistují překryvy s jinými commity. Minimální počet znaků pro zkrácené adresování hashe je 4, což odpovídá procházení 65 tisíc kombinací (16^4). Při tom může procházení být vůbec nepotřebné, protože GitHub API umožňuje připojit zpracovatele pro zachycování událostí, které používají externí projekty vedoucí archiv s úplným logem všech operací, v němž informace o hashe commitu zůstávají i po smazání repozitářů.
Zdroj: opennet.ru


