tom@home.htb:~$

Blog o HTB

27 October 2020

Otevřený .git, zálohy a vývojové artefakty jako první foothold

Úvod a kontext

Spousta útoků nezačíná exploitem, ale čtením. Veřejně dostupný .git, archiv zdrojáků, starý backup webu nebo testovací soubor ponechaný ve webrootu často prozradí víc než samotná aplikace. Ne proto, že by šlo o “zranitelnost vyšší úrovně”, ale proto, že v těchto artefaktech bývají přesně ty vztahy mezi službami, účty a tajemstvími, které veřejné rozhraní skrývá.

To je důležité i redakčně a výukově. Čtenář si často pod prvním footholdem představí RCE. V praxi ale bývá častější jiný vzorec: nejdřív unikne kontext, potom přístupové údaje nebo interní logika a teprve z toho vznikne skutečný shell. Právě na tenhle pattern se článek zaměřuje.

Proč jsou tyto artefakty tak cenné

Živá aplikace obvykle ukazuje jen to, co chce ukázat. Zdroják, záloha nebo repozitář naopak často odhalí:

Jinými slovy: artefakt útočníkovi zkracuje cestu od “vidím login formulář” k “chápu, jak systém opravdu funguje”.

Co všechno sem patří

Když se řekne otevřený .git, většina lidí si představí jen jeden konkrétní problém. Ve skutečnosti jde o širší rodinu artefaktů:

Společný jmenovatel je jednoduchý: systém zveřejní něco, co nevzniklo pro veřejný provoz, ale přesto zůstalo dosažitelné.

Co v takových artefaktech hledat

Nejhorší strategie je stáhnout archiv a bezcílně v něm listovat. Prakticky se vyplatí hledat několik konkrétních tříd informací.

1. Tajemství a klíče

Nejde jen o hesla v plaintextu. Hledejte i:

Právě tady se často láme rozdíl mezi “jen jsem stáhl zdroják” a “mám přímý přístup do další vrstvy”.

2. Neveřejné endpointy a hostname

Zdrojáky a konfigurace často obsahují:

To bývá klíčové hlavně ve chvíli, kdy veřejný web sám vypadá chudě nebo vrací jen 403, zatímco uniklá konfigurace prozradí další směr útoku.

3. Historii a smazané stopy

Obzvlášť u .git je důležité neomezit se na aktuální stav. Starý commit může obsahovat:

Tohle je častý zdroj omylu na straně obrany: secret se smaže z hlavní větve a tým má pocit, že problém je vyřešený. Není.

4. Vazby mezi účty a službami

Při hledání footholdu je mimořádně cenné pochopit, jak jsou propojené:

Jeden izolovaný credential leak ještě nemusí stačit. Jakmile ale artefakt prozradí i to, kde credential použít, stane se z něj přímý vstup.

Typický řetězec od artefaktu k footholdu

Praktický postup často vypadá takto:

  1. veřejný web neukáže nic zásadního,
  2. vedlejší soubor nebo .git odhalí zdroják,
  3. zdroják prozradí secret, interní hostname nebo backup cestu,
  4. další vrstva otevře platný účet, administraci nebo server-side primitivum,
  5. teprve pak vznikne shell.

To je přesně důvod, proč je chyba hodnotit tyto artefakty jen jako informační leak. Informace totiž často nejsou konečný dopad, ale mezikrok k plnému kompromisu.

Proč staré a “už nepoužívané” soubory pořád bolí

Obrana často spoléhá na dvě mylné domněnky:

V praxi to nefunguje z několika důvodů:

Tajemství se často nerevokují

Smazat secret z kódu není totéž jako secret změnit. Pokud heslo nebo token zůstal platný i po smazání ze zdrojáku, starý commit je pořád aktuální kompromis.

Stará konfigurace vysvětluje novou logiku

I když staré tajemství nefunguje, může starý commit vysvětlit:

Starý artefakt tak může pomoci zneužít zcela současnou chybu.

Backup často obsahuje víc než produkce

Archiv aplikace občas neobsahuje jen to, co běží venku, ale i:

Záloha proto může mít vyšší informační hodnotu než běžící instance.

Jak s nálezem pracovat disciplinovaně

Jakmile se k takovému artefaktu dostanete, je dobré nezkoušet hned všechno na všechno. Větší hodnotu má mapování:

Právě to odděluje náhodné střílení credentialů od smysluplné analýzy. Dobrý foothold často vznikne ne z množství nálezů, ale ze správného propojení dvou nebo tří z nich.

Jak tomu předcházet

Obrana musí řešit víc než jen “zakázat listing adresářů”.

1. Zabránit publikaci artefaktů

Web server a reverse proxy musí explicitně blokovat:

To je první vrstva, ale ne jediná.

2. Oddělit build a runtime

Do webrootu nebo image nemá proudit celý repozitář se vším všudy. Čím čistší artefakt se nasazuje, tím menší šance, že se ven dostane .git, test data nebo vývojové utility.

3. Po úniku rotovat, ne jen mazat

Jakmile se secret objevil v repozitáři, commitu nebo záloze, musí se považovat za kompromitovaný. Smazání souboru nestačí.

4. Auditovat historii i exporty

Týmy často kontrolují jen produkční konfiguraci. Prakticky stejně důležité je ale:

5. Omezit reuse mezi vrstvami

I když nějaký artefakt unikne, dopad výrazně roste až tehdy, když stejné tajemství funguje v SSH, databázi, aplikaci i deploy nástroji. Segmentace credentialů proto zůstává klíčová.

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: web - git - backups - sourcecode