
Lab Docker autonomo per esercitarsi nello sfruttamento di CVE-2026-2005, un heap buffer overflow nell'estensione pgcrypto di PostgreSQL, che consente l'escalation dei privilegi e l'esecuzione di codice nel container.
Un lab Docker autonomo per esercitarsi nello sfruttamento di CVE-2026-2005, un heap buffer overflow nell'estensione pgcrypto di PostgreSQL che consente l'esecuzione remota di codice senza privilegi di superutente.
Versioni interessate: PostgreSQL ≤ 17.7 / 16.11 / 15.15 / 14.20 / 18.1
Corretta in: 18.2, 17.8, 16.12, 15.16, 14.21 (rilasciata il 2026-02-12)
Requisiti: Docker, Docker Compose
git clone <questo-repo>
cd CVE-2026-2005
docker compose up -d
PostgreSQL sarà in ascolto su 127.0.0.1:5433.
Hai ottenuto le credenziali del database da un file di configurazione di un'applicazione:
| Parametro | Valore |
|---|
| Host | 127.0.0.1 |
| Porta | 5433 |
| Database | targetdb |
| Utente | pentester |
| Password | pentester123 |
Connettiti per confermare l'accesso:
psql -h 127.0.0.1 -p 5433 -U pentester -d targetdb
L'account ha il privilegio CREATE sullo schema public. Non è un superutente.
Cattura entrambe le flag per completare il lab.
Flag 1 — Escalation dei privilegi del database
SELECT * FROM flag_db;
-- Leggibile solo dopo l'escalation a superutente all'interno della sessione del DB
Flag 2 — Esecuzione di codice nel container
/var/lib/postgresql/flag.txt
-- Leggibile solo dopo l'esecuzione di comandi come utente OS postgres all'interno del container
Nota sull'ambito:
COPY TO PROGRAMviene eseguito all'interno del container Docker, non sull'host. L'impatto principale nel mondo reale è l'accesso completo in lettura al database (tutte le tabelle, tutti i database). Raggiungere l'host Docker richiede una tecnica separata di container escape.
Il difetto si trova in pgp_parse_pubenc_sesskey() all'interno di pgcrypto/pgp-pubenc.c.
Quando decrittografa un pacchetto di chiave di sessione crittografato con chiave pubblica, la funzione deriva
la lunghezza della chiave di sessione come msglen - 3 da un payload RSA/ElGamal controllato dall'attaccante
e lo copia in un buffer fisso di 32 byte (PGP_MAX_KEY) senza
validazione dei limiti. Un attaccante può scrivere centinaia di byte oltre il confine
del buffer.
L'exploit procede in tre fasi:
dst per sovrascrivere CurrentUserId in .data con 10 (BOOTSTRAP_SUPERUSERID)COPY (SELECT '') TO PROGRAM '<cmd>' esegue comandi OS come utente postgres all'interno del container. In una distribuzione reale senza Docker, ciò significa accesso a livello OS sull'host del database.Poiché il layout ASLR è identico in tutte le connessioni allo stesso processo postmaster, gli indirizzi divulgati su una connessione rimangono validi su quella successiva.
pgcrypto/pgp-pubenc.cobjdump -t $(which postgres) | grep CurrentUserIddocker compose down -v
Questo lab è destinato esclusivamente a ricerca sulla sicurezza autorizzata e formazione. Eseguilo solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione al test.