
# Checker non distruttivo delle vulnerabilità PostgreSQL per CVE-2026-6471 Audit della versione del server e dei privilegi REPLICATION per identificare l'esposizione al difetto di autorizzazione del logical decoding, con indicazioni di rimedio.
Uno strumento di verifica difensivo e non distruttivo per CVE-2026-6471
CVE-2026-6471 è una vulnerabilità di autorizzazione di PostgreSQL che coinvolge il sottosistema di decodifica logica (logical decoding).
La vulnerabilità può consentire a un ruolo PostgreSQL in possesso del privilegio REPLICATION, ma privo dei privilegi di superutente, di indurre il server PostgreSQL a caricare una libreria controllata dall'attaccante accessibile all'account del sistema operativo di PostgreSQL.
Lo sfruttamento riuscito può comportare l'esecuzione di codice arbitrario con i privilegi del processo del server PostgreSQL.
Questo repository fornisce un PoC di rilevamento sicuro progettato per valutazioni di sicurezza autorizzate.
⚠️ Nessuna libreria condivisa dannosa viene caricata e nessun comando del sistema operativo viene eseguito dal verificatore.
| Proprietà | Valore |
|---|---|
| CVE | CVE-2026-6471 |
| Prodotto | PostgreSQL |
| Componente | Decodifica Logica |
| CWE | CWE-862 — Autorizzazione Mancante |
| CVSS v3.1 | 7.2 Alto |
| Vettore di Attacco | Rete |
| Complessità di Attacco | Bassa |
| Privilegi Richiesti | Alti |
| Interazione Utente | Nessuna |
| Riservatezza | Alta |
| Integrità | Alta |
| Disponibilità | Alta |
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
Nelle condizioni vulnerabili, un attaccante che possiede già un account PostgreSQL con la capacità di replica richiesta potrebbe potenzialmente superare il confine di privilegi database-sistema operativo.
┌──────────────────────┐
│ PostgreSQL User │
│ REPLICATION = YES │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Logical Decoding │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Missing Authorization│
│ Validation │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Library Loading │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ PostgreSQL OS User │
└──────────────────────┘
L'impatto effettivo dipende fortemente dai privilegi e dai permessi del filesystem dell'account del sistema operativo di PostgreSQL.
L'avviso di sicurezza del progetto PostgreSQL identifica i seguenti rami interessati:
| Ramo | Interessato | Corretto |
|---|---|---|
| PostgreSQL 14 | < 14.24 | 14.24 |
| PostgreSQL 15 | < 15.19 | 15.19 |
| PostgreSQL 16 | < 16.15 | 16.15 |
| PostgreSQL 17 | < 17.11 | 17.11 |
| PostgreSQL 18 | < 18.6 | 18.6 |
Aggiornare all'ultima release di sicurezza disponibile per il proprio ramo PostgreSQL.
Questo progetto esegue intenzionalmente solo controlli non distruttivi.
Il verificatore dovrebbe controllare:
REPLICATIONSELECT
version() AS postgres_version,
current_user AS current_user,
rolsuper AS is_superuser,
rolreplication AS has_replication
FROM pg_roles
WHERE rolname = current_user;
Output di esempio:
postgres_version : PostgreSQL 17.x
current_user : security_audit
is_superuser : f
has_replication : t
Una versione vulnerabile combinata con privilegi REPLICATION dovrebbe essere trattata come bisognosa di rimedio.
Il PoC segue questo flusso di lavoro:
┌───────────────┐
│ PostgreSQL │
│ Connection │
└───────┬───────┘
│
▼
┌─────────────────┐
│ Get Server │
│ Version │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Check Current │
│ Role │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Check │
│ REPLICATION │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Compare Against │
│ Fixed Releases │
└────────┬────────┘
│
┌───────┴────────┐
▼ ▼
Potentially Not
Vulnerable Affected
❌ Caricare una .so controllata dall'attaccante
❌ Eseguire payload SQL arbitrari
❌ Eseguire comandi del sistema operativo
❌ Aprire una reverse shell
❌ Modificare la configurazione di PostgreSQL
❌ Modificare il contenuto del filesystem
❌ Creare persistenza
❌ Sfruttare sistemi di produzione
Questo rende il verificatore adatto a valutazioni di vulnerabilità controllate e a flussi di lavoro di inventario.
Clonare il repository:
git clone https://github.com/<YOUR-USERNAME>/CVE-2026-6471.git
cd CVE-2026-6471
Installare la dipendenza Python richiesta:
python3 -m pip install psycopg2-binary
Eseguire il verificatore:
python3 CVE-2026-6471.py
Esempio:
╔════════════════════════════════════════════════════╗
║ CVE-2026-6471 SAFE CHECK ║
║ PostgreSQL Logical Decoding Audit ║
╚════════════════════════════════════════════════════╝
[+] Connecting to PostgreSQL...
[+] Server version : PostgreSQL 17.x
[+] Current role : security_audit
[+] Superuser : False
[+] Replication : True
[!] PostgreSQL version requires security update
[!] REPLICATION privilege detected
[!] POTENTIALLY VULNERABLE
[!] Upgrade PostgreSQL to a fixed release.

Gli amministratori possono ispezionare i ruoli con replica abilitata con:
SELECT
rolname,
rolsuper,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
Esaminare ogni account restituito.
Se un account non richiede privilegi di replica, rimuovere i privilegi non necessari secondo i propri requisiti operativi.
Installare la release corretta appropriata:
14.24+
15.19+
16.15+
17.11+
18.6+
Preferire l'ultima release di sicurezza PostgreSQL disponibile piuttosto che fermarsi alla versione corretta minima.
Identificare gli account con capacità di replica:
SELECT
rolname,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
Rimuovere i privilegi di replica non necessari:
ALTER ROLE <role_name> NOREPLICATION;
Eseguire modifiche ai privilegi solo dopo aver confermato che il ruolo non è richiesto per un'infrastruttura di replica legittima.
Prestare particolare attenzione a:
SUPERUSER
REPLICATION
LOGIN
CREATEDB
CREATEROLE
Utilizzare il principio del privilegio minimo ove possibile.
Un'implementazione concettuale semplificata:
if postgres_version_is_affected:
if role_has_replication:
if not role_is_superuser:
report("POTENTIALLY VULNERABLE")
else:
report("AFFECTED VERSION - SUPERUSER CONTEXT")
else:
report("AFFECTED VERSION - REPLICATION NOT PRESENT")
else:
report("NOT AFFECTED")
Lo scopo del verificatore è l'identificazione dell'esposizione, non lo sfruttamento.
| Risultato | Significato |
|---|---|
| 🟢 NON INTERESSATO | PostgreSQL esegue una versione corretta |
| 🟡 AGGIORNAMENTO RICHIESTO | La versione rientra in un ramo interessato |
| 🟠 REPLICATION RILEVATA | Il ruolo corrente ha capacità di replica |
| 🔴 POTENZIALMENTE VULNERABILE | Versione interessata + privilegio rilevante |
| ⚪ ACCESSO INSUFFICIENTE | Lo scanner non può ispezionare le informazioni sul ruolo richieste |
REPLICATION. INTERNET
│
▼
┌─────────────┐
│ Firewall │
└──────┬──────┘
│
▼
┌─────────────┐
│ PostgreSQL │
│ Server │
└──────┬──────┘
│
┌─────────┴─────────┐
▼ ▼
Least Privilege Monitoring
│ │
▼ ▼
Role Controls SIEM / Alerts
Limitare l'esposizione di rete di PostgreSQL ed evitare di esporre i servizi di database direttamente a reti non affidabili.
Configurazione di test consigliata:
┌───────────────────────────────────┐
│ Isolated Lab Network │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Scanner │──▶│ PostgreSQL │ │
│ │ Machine │ │ Test Host │ │
│ └────────────┘ └────────────┘ │
│ │
│ No Production Systems │
└───────────────────────────────────┘
Utilizzare un'installazione PostgreSQL usa e getta o un ambiente di laboratorio dedicato quando si convalidano strumenti di sicurezza.
Questo progetto è destinato esclusivamente a ricerca di sicurezza difensiva, valutazione delle vulnerabilità e test autorizzati.
La metodologia inclusa è progettata per identificare installazioni PostgreSQL potenzialmente vulnerabili senza armare la vulnerabilità.
Non utilizzare questo progetto contro sistemi che non si possiedono o per i quali non si dispone di autorizzazione esplicita alla valutazione.
L'autore non è responsabile per uso improprio, danni, perdita di dati, interruzione del servizio o accesso non autorizzato derivanti da questo progetto.
Ricerca sulla Cybersecurity • Analisi delle Vulnerabilità • Strumentazione Difensiva
Research → Verify → Document → Remediate
I contributi sono benvenuti.
Quando si inviano miglioramenti:
Se questo progetto ha aiutato la tua ricerca sulla sicurezza, considera di assegnargli una ⭐