Pochi giorni fa, PostgreSQL ha annunciato il rilascio di aggiornamenti correttivi per tutti i rami supportati di PostgreSQL (versioni 17.3, 16.7, 15.11, 14.16 e 13.19). Questi aggiornamenti, che correggono più di 70 errori e soprattutto eliminano la vulnerabilità identificata come CVE-2025-1094, collegato a un attacco che ha colpito BeyondTrust e il Dipartimento del Tesoro degli Stati Uniti a fine dicembre.
Vulnerabilità è stato rilevato durante l'analisi di un altro guasto remoto (CVE-2024-12356) nei servizi BeyondTrust PRA (Privileged Remote Access) e BeyondTrust RS (Remote Support), ed è stata aggravata dalla presenza di una vulnerabilità precedentemente sconosciuta (0-day) nella libreria libpq.
Sulla vulnerabilità che ha interessato BeyondTrust
Si menziona il fallimento in PostgreSQL originato in libpq, la biblioteca che Fornisce l'API per interagire con PostgreSQL da programmi scritti in C, che costituisce anche la base per i binding in C++, Perl, PHP e Python.
La La vulnerabilità risiede nella gestione impropria della convalida dei caratteri Unicode. nelle funzioni di fuga cruciali. Queste funzioni sono essenziali per neutralizzare i caratteri speciali nelle query SQL e impedire l'iniezione di codice. Tuttavia, la mancanza di una convalida adeguata consente ad alcune sequenze multibyte UTF-8 non valide di eludere la normalizzazione delle virgolette.
metodo di attacco
Questo fallimento consente la sostituzione SQL nelle applicazioni che utilizzano queste funzioni per elaborare le query, soprattutto quando le query vengono inviate tramite l'utilità della riga di comando psql. Ad esempio, questa vulnerabilità può essere sfruttata per eseguire comandi arbitrari sul server tramite la sostituzione della riga di comando "!", come dimostrato da un esempio in cui è stata richiamata l'utilità "id".
L'exploit si basa sull'utilizzo di un carattere UTF-8 non valido composto dai byte 0xC0 e 0x27. Il byte 0x27 corrisponde a un singolo apice in ASCII, che normalmente verrebbe sottoposto a escape per evitare problemi di iniezione SQL. Tuttavia, se combinata con 0xC0, la sequenza viene interpretata come un singolo carattere Unicode, lasciando la virgoletta singola senza caratteri di escape.
Impatto dell'attacco
Come risultato di questa vulnerabilità , l Gli aggressori sono riusciti a ottenere una chiave di accesso all'API utilizzato per fornire supporto remoto tramite i servizi BeyondTrust SaaS. Con questa chiave, è riuscito a reimpostare le password e a compromettere l'infrastruttura del Dipartimento del Tesoro degli Stati Uniti., accedendo a documenti riservati e alle postazioni di lavoro dei dipendenti. L'attacco ha messo in luce gravi falle nella catena di sicurezza, evidenziando l'importanza di disporre di solidi meccanismi di convalida degli input in librerie critiche come libpq.
Aggiornamenti e misure correttive
Davanti a questo panorama, Il team di PostgreSQL ha implementato gli aggiornamentiche correggono questa vulnerabilità e una serie di bug aggiuntivi. La soluzione sta nel migliorare la convalida dei caratteri nelle funzioni di escape, assicurando che qualsiasi sequenza UTF-8 venga elaborata correttamente ed evitando che una singola virgoletta venga interpretata erroneamente.
Oltre a questo, come già accennato, questo aggiornamento corregge più di 70 bug segnalati negli ultimi mesi:
- Risolto il possibile riutilizzo di risultati obsoleti negli aggregati di finestre, che poteva portare a risultati errati.
- Varie correzioni di condizioni di gara per il vuoto che potrebbero, nel caso peggiore, causare il danneggiamento di un catalogo di sistema.
- Varie correzioni per troncare tabelle e indici per prevenire possibili danneggiamenti.
- Soluzione alternativa per scollegare una partizione in cui il vincolo di chiave esterna fa riferimento a una tabella partizionata.
- Corretti i codici di formato FFn (ad esempio FF1) to_timestamp, in cui un codice di formato intero prima di FFn avrebbe consumato tutte le cifre disponibili.
- Correzioni per SQL/JSON e XMLTABLE() per inserire doppie virgolette attorno a voci specifiche quando necessario.
- Includere ldapschemeoption in pg_hba_file_rules().
- Varie correzioni per UNION, tra cui la mancata unione di colonne con regole di confronto non supportate.
- Diverse correzioni che potrebbero influire sulla disponibilità o sulla velocità di avvio di una connessione a PostgreSQL.
- Corregge diverse perdite di memoria nell'output della decodifica logica.
- Corregge diverse perdite di memoria in PL/Python.
- Risolto un problema di perdita di memoria pg_restore con dati compressi zstd.
- Corretto pg_basebackup per gestire correttamente i file pg_wal.tar più grandi di 2 GB su Windows.
- Risolto il crash di pageinspect nei casi in cui la definizione della funzione brin_page_items() non veniva aggiornata all'ultima versione.
- Corregge la condizione di competizione che si verifica quando si tenta di annullare una query postgres_fdw remota.
Infine, se sei interessato a saperne di più, puoi consultare i dettagli nella sezione seguente link