Immagine illustrativa generata con AI
PostgreSQL, falla nel logical decoding permette di eseguire codice come utente `postgres`
CVE-2026-6471 PostGREShell permette RCE come postgres via logical decoding. Versioni colpite, attacco con dlopen e patch whitelist spiegate.
Testo generato da intelligenza artificiale, pubblicato senza revisione umana. Trasparenza IA
PostgreSQL ha corretto CVE-2026-6471, una vulnerabilità nel sistema di logical decoding che consente di caricare librerie condivise arbitrarie sul server database.
Per sfruttarla non serve essere superuser. L’attaccante deve però disporre di un account PostgreSQL con attributo REPLICATION, mentre il server deve essere configurato con wal_level = logical.
Una volta caricata la libreria, il codice viene eseguito all’interno del processo backend con l’identità dell’account di sistema che gestisce PostgreSQL, normalmente postgres. Le conseguenze possono quindi comprendere furto o alterazione dei dati, indisponibilità del servizio, escalation dei privilegi e persistenza sul sistema.
La vulnerabilità, denominata PostGREShell dai ricercatori di Cyera, ha un punteggio CVSS 3.1 di 7,2 ed è classificata come assenza di un controllo di autorizzazione (CWE-862). Vladimir Tokarev e Yu Kunpeng sono stati accreditati dal PostgreSQL Global Development Group per la segnalazione. Tokarev ha pubblicato un’analisi tecnica il 1° settembre.
Quali versioni di PostgreSQL devono essere aggiornate
Le release upstream che correggono CVE-2026-6471, distribuite il 13 agosto, sono:
- PostgreSQL 18.6
- PostgreSQL 17.11
- PostgreSQL 16.15
- PostgreSQL 15.19
- PostgreSQL 14.24
Sono vulnerabili le versioni precedenti di ciascuno di questi cinque rami. L’advisory del progetto riguarda infatti le serie ancora supportate, dalla 14 alla 18.
Il difetto risale però all’introduzione del logical decoding in PostgreSQL 9.4, nel 2014. Le serie anteriori alla 14 non sono trattate dall’avviso upstream corrente: chi le utilizza dovrebbe quindi pianificare la migrazione verso una versione supportata, anziché considerare l’assenza dall’elenco come prova di sicurezza.
Pacchetti corretti sono disponibili anche per Amazon RDS, Debian, SUSE e Ubuntu. L’avviso Ubuntu USN-8653-1, pubblicato il 20 agosto 2026, distribuisce queste versioni:
| Ubuntu | Pacchetto corretto |
|---|---|
| 26.04 LTS | postgresql-18 18.6-0ubuntu0.26.04.1 |
| 24.04 LTS | postgresql-16 16.15-0ubuntu0.24.04.1 |
| 22.04 LTS | postgresql-14 14.24-0ubuntu0.22.04.1 |
Ubuntu richiede il riavvio di PostgreSQL dopo il normale aggiornamento di sicurezza. Il pacchetto risolve anche numerose altre vulnerabilità, non soltanto quella nel logical decoding.
PostgreSQL 14, inoltre, terminerà la ricezione delle correzioni il 12 novembre 2026. Le organizzazioni ancora su questo ramo dovrebbero includere nel piano operativo anche il passaggio a una release successiva.
Dal nome del plugin a dlopen(): come avviene l’attacco
Il logical decoding traduce le modifiche registrate nel write-ahead log in un formato utilizzabile da sistemi esterni. Viene impiegato, per esempio, nelle pipeline di change data capture e da strumenti che trasferiscono le modifiche verso altre piattaforme.
Durante la creazione di uno slot di replicazione, anche mediante CREATE_REPLICATION_SLOT, il client può indicare il plugin di output da utilizzare. Prima della correzione, PostgreSQL non verificava adeguatamente che un utente con REPLICATION fosse autorizzato a caricare la libreria richiesta.
Il nome del plugin arrivava così alla funzione di caricamento dinamico. Il parser del protocollo di replicazione accettava nei nomi racchiusi tra virgolette separatori di directory, percorsi assoluti e sequenze di attraversamento come ../.
Il risultato era un’invocazione di dlopen() su un file scelto dall’attaccante, purché accessibile all’account del sistema operativo che esegue PostgreSQL. La libreria veniva caricata nello spazio del processo backend e il suo codice acquisiva i privilegi dell’utente postgres.
Le normali restrizioni applicate dal comando SQL LOAD agli utenti non superuser non coprivano questo percorso. Era dunque possibile aggirare una protezione già esistente passando dal protocollo di replicazione.
La disponibilità della libreria malevola dipende dalla piattaforma:
- su Windows, il percorso può puntare a una condivisione SMB controllata dall’attaccante, senza prima copiare il file sul server;
- su Linux e macOS, un caricamento analogo dalla rete richiede che sia attivo l’automount NFS;
- negli altri scenari, l’attaccante deve già disporre di un modo per scrivere la libreria sul disco del server.
Nei test di Cyera, il codice caricato ha modificato direttamente il catalogo dei ruoli, trasformando l’account di replicazione in un superuser PostgreSQL. I ricercatori hanno anche realizzato tre forme di persistenza capaci di sopravvivere al riavvio.
Il privilegio richiesto non è superuser, ma resta sensibile
Il vettore completo assegnato alla falla è CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H. Indica un attacco eseguibile da remoto, di bassa complessità e senza interazione dell’utente, ma subordinato a privilegi elevati.
La classificazione PR:H può sembrare in contrasto con il fatto che l’account non debba essere amministratore. In realtà descrive un prerequisito specifico: l’attributo REPLICATION deve essere già stato concesso.
Questo privilegio viene spesso assegnato ad account tecnici usati da server standby, soluzioni di backup, piattaforme CDC e sistemi di monitoraggio. La compromissione di una di queste credenziali può quindi trasformarsi in esecuzione di codice sul sistema operativo.
Non risultano proof-of-concept pubblici nei repository esaminati al 4 settembre. Alla stessa data, CVE-2026-6471 non compariva nel catalogo CISA Known Exploited Vulnerabilities e non aveva una scadenza KEV associata.
Non vi sono dunque elementi pubblici che attestino uno sfruttamento attivo. L’impatto resta comunque rilevante, soprattutto dove gli account di servizio sono condivisi, poco monitorati o autorizzati a collegarsi da reti estese.
La patch introduce una whitelist per i plugin di output
La correzione aggiunge il parametro server:
output_plugin_libraries
Il valore predefinito autorizza due librerie:
pgoutput, test_decoding
Dopo l’aggiornamento, plugin di terze parti come wal2json e decoderbufs devono essere inseriti esplicitamente nella whitelist. In caso contrario, gli slot che li utilizzano non potranno avviare correttamente il logical decoding.
Prima di installare la patch, gli amministratori possono individuare i plugin già associati agli slot con:
SELECT DISTINCT plugin
FROM pg_replication_slots
WHERE plugin IS NOT NULL;
La query restituisce i plugin utilizzati con successo almeno una volta. Non intercetta necessariamente tutte le integrazioni configurate ma non ancora attivate.
Dopo aver aggiornato PostgreSQL, ogni plugin legittimo non compreso nel valore predefinito deve essere aggiunto a output_plugin_libraries. La configurazione può quindi essere ricaricata con:
pg_ctl reload
oppure:
SELECT pg_reload_conf();
La sola modifica del parametro non richiede un riavvio. Restano valide eventuali istruzioni più restrittive della distribuzione, come il riavvio previsto dall’aggiornamento Ubuntu.
PostgreSQL ha preferito una whitelist alla semplice estensione delle regole di LOAD. Quest’ultima soluzione avrebbe obbligato a installare tutti i plugin esterni sotto $libdir/plugins, interrompendo numerose configurazioni esistenti.
Esiste anche un limite operativo ancora aperto. pg_createsubscriber crea slot con pgoutput senza controllare il nuovo parametro: --dry-run può riuscire, mentre l’operazione reale può fallire se la whitelist esclude il plugin. Al 4 settembre, una patch segnalata da Hayato Kuroda di Fujitsu risultava ancora in revisione.
Nelle migrazioni da PostgreSQL 17 o release successive, la whitelist del nuovo cluster deve inoltre essere configurata prima di eseguire:
pg_upgrade --check
In caso contrario, il controllo può fallire quando gli slot esistenti dipendono da plugin non autorizzati.
Controlli immediati, mitigazioni e segnali da cercare
Se la patch non può essere applicata subito, gli amministratori dovrebbero revocare REPLICATION agli account privi di una necessità documentata e restringere in pg_hba.conf gli indirizzi autorizzati alle connessioni di replicazione.
È inoltre opportuno bloccare dai server database il traffico SMB in uscita sulla porta 445 e quello NFS sulla porta 2049, quando non necessari. autofs dovrebbe essere disabilitato sui sistemi che non ne fanno uso.
Dopo l’aggiornamento, i tentativi di caricare plugin esclusi dalla whitelist producono nei log un errore contenente:
may not be used as an output plugin
La presenza del messaggio può indicare una configurazione legittima non ancora adeguata, ma anche un tentativo di caricare una libreria non autorizzata. Va quindi correlata con account, indirizzo sorgente e nome del file richiesto.
L’analisi dovrebbe comprendere anche:
- account dotati dell’attributo
REPLICATION; - slot elencati in
pg_replication_slots; - plugin associati agli slot;
- modifiche inattese al catalogo dei ruoli;
- nuove forme di persistenza create dall’utente operativo del database;
- connessioni SMB o NFS anomale originate dal server PostgreSQL.
La priorità resta installare una release corretta. La whitelist riduce l’esposizione senza imporre una riorganizzazione completa dei plugin, ma richiede un inventario accurato per evitare interruzioni nelle pipeline di replica e change data capture.
Fonti
Questo articolo è una rielaborazione originale basata sulle fonti seguenti.
CVE trattate in questo articolo
- CVE-2026-14662HIGH8.8Integer wraparound in PostgreSQL tsvector and tsquery data type functions allows an unprivileged database user to cause the server to undersize an allocation and write out-of-bounds, via crafted large inputs. This may execute arbitrary code as the operating system user running the database. These
- CVE-2026-14664HIGH8.8Heap buffer overflow in PostgreSQL regexp allows the query author to execute arbitrary code as the operating system user running the database, via text that would not pass encoding validation. This shares heritage with CVE-2026-2006, but this case involved unanticipated data growth when round-tripp
- CVE-2026-6464HIGH8.1Untrusted data inclusion in PostgreSQL psql COPY may allow a server administrator to elicit execution of data lines as psql commands, via error injection. If the "COPY FROM STDIN" or "\copy FROM STDIN" command fails before the server indicates that it awaits input rows, psql processes the in-line d
- CVE-2026-6471HIGH7.2Missing authorization in PostgreSQL logical decoding allows a non-superuser holding REPLICATION privilege to dlopen any file visible to the operating system account running the server, via the choice of logical decoding plugin. This in turn runs arbitrary code as that account. Versions before Post
- CVE-2026-14663MEDIUM6.5Cleartext storage in PostgreSQL pgcrypto disabled ciphers allows a user to recover cleartext, via direct observation of the faulty ciphertext. The OpenSSL version and OpenSSL configuration determine the disabled ciphers. If the application accepts encrypted data as input, decryption will succeed e
- CVE-2026-6470MEDIUM4.3Missing authorization in PostgreSQL DDL commands allows an object creator to achieve denial of service against ALTER and DROP of the type, via creating a dependency on the type. Many DDL operations did check the privilege, but assigning a range subtype and referencing the type from an SQL expressio
- CVE-2026-14666MEDIUM4.2Incomplete tracking in PostgreSQL of changes to role membership, role attributes, and database ownership allows a query to continue using cached row-level security policies after those changes require a different policy, via plan reuse. Stale policies continue until some other event invalidates the
- CVE-2026-6469LOW3.8Incorrect ownership assignment in PostgreSQL ALTER TABLE ALTER TYPE command reassigns ownership of dependent statistics objects to the current user. This wrongly allows the table owner to run DROP STATISTICS and ALTER STATISTICS via this improper ownership. It wrongly denies those commands to the
