Fa pocs dies, PostgreSQL va donar a conèixer el llançament de les actualitzacions correctives per a totes les branques compatibles de PostgreSQL (versions 17.3, 16.7, 15.11, 14.16 i 13.19). Aquestes actualitzacions, que corregeixen més de 70 errors i sobretot eliminen la vulnerabilitat identificada com a CVE-2025-1094, vinculada a un atac que va afectar BeyondTrust i el Departament del Tresor dels EUA a finals de desembre.
la vulnerabilitat va ser detectada durant l'anàlisi d'una altra falla remota (CVE-2024-12356) als serveis BeyondTrust PRA (Privileged Remote Access) i BeyondTrust RS (Remote Support), i es va veure agreujada per la presència d'una vulnerabilitat prèviament desconeguda (0-day) a la biblioteca libpq.
Sobre la vulnerabilitat que afecte BeyondTrust
S'esmenta que la fallada a PostgreSQL es va originar a libpq, la biblioteca que proporciona l'API per interactuar amb PostgreSQL des de programes escrits a C, i que també és la base per als enllaços a C++, Perl, PHP i Python.
La vulnerabilitat resideix en el maneig inadequat de la validació de caràcters Unicode en funcions crucials d'escapament. Aquestes funcions són fonamentals per neutralitzar caràcters especials a les consultes SQL i evitar injeccions de codi. Tot i això, la manca de validació adequada permet que certes seqüències multibyte UTF-8 no vàlides eludeixin la normalització de les cometes.
Mètode d'atac
aquesta fallada permet la substitució de SQL en aplicacions que utilitzen aquestes funcions per processar consultes, especialment quan les consultes s'envien a través de la utilitat de línia d'ordres psql. Per exemple, es pot aprofitar aquesta vulnerabilitat per executar ordres arbitràries al servidor mitjançant la substitució a la línia d'ordres «!», com es va demostrar amb un exemple en què es va invocar la utilitat «id».
L‟explotació es basa en la utilització d‟un caràcter UTF-8 no vàlid, format pels bytes 0xC0 i 0x27. El byte 0x27 correspon a una cometa simple a ASCII, que normalment s'escaparia per evitar problemes d'injecció SQL. Però en combinar-se amb 0xC0, la seqüència s'interpreta com un únic caràcter Unicode, deixant la cometa simple sense fugir.
Impacte de l'atac
Com a resultat d'aquesta vulnerabilitat, els atacants van aconseguir obtenir una clau d'accés a l'API que sutilitza per oferir suport remot a través dels serveis BeyondTrust SaaS. Amb aquesta clau, es va poder restablir contrasenyes i comprometre la infraestructura del Departament del Tresor dels EUA., accedint a documents confidencials ia estacions de treball d'empleats. L'atac va exposar seriosos errors a la cadena de seguretat, destacant la importància de comptar amb mecanismes robustos de validació d'entrada a biblioteques tan crítiques com libpq.
Actualitzacions i mesures correctives
Davant aquest panorama, l'equip de PostgreSQL ha implementat actualitzacióque corregeixen aquesta vulnerabilitat i una sèrie d'errors addicionals. La solució és millorar la validació de caràcters en les funcions d'escapament, garantint que qualsevol seqüència UTF-8 es processi correctament i evitant que s'interpreti de manera errònia una cometa simple.
A més d'això, com ja es va esmentar, aquesta actualització corregeix més de 70 errors que es van informar els últims mesos:
- Se soluciona la possible reutilització de resultats obsolets en agregats de finestres, cosa que podria generar resultats incorrectes.
- Diverses correccions de condicions de carrera per al buit que, en el pitjor dels casos, podrien provocar danys en un catàleg del sistema.
- Diverses correccions per truncar taules i índexs que eviten possibles danys.
- Solució per separar una partició on la vostra pròpia restricció de clau externa fa referència a una taula particionada.
- Correcció dels codis de format FFn (per exemple, FF1) to_timestamp, on un codi de format sencer abans de FFn consumiria tots els dígits disponibles.
- Correccions per a SQL/JSON i XMLTABLE()per posar cometes dobles en entrades específiques quan sigui necessari.
- Incloeu la ldapschemeopció a pg_hba_file_rules().
- Diverses correccions per a UNION, inclosa la de no fusionar columnes amb intercalacions no compatibles.
- Diverses correccions que podrien afectar la disponibilitat o velocitat d'inici d'una connexió a PostgreSQL.
- Corregeix múltiples fuites de memòria a la sortida de descodificació lògica.
- Corregeix diverses pèrdues de memòria a PL/Python.
- Correcció d'una pèrdua de memòria pg_restore amb dades comprimides a zstd.
- Correcció pg_basebackup per manejar correctament fitxers pg_wal.tar que superin els 2 GB a Windows.
- Se soluciona la fallada en pageinspect en instàncies on la brin_page_items()definició de la funció no està actualitzada a la darrera versió.
- Corregeix la condició de carrera en intentar cancel·lar una postgres_fdw consulta remota.
Finalment si estàs interessat a poder conèixer més sobre això, pots consultar els detalls al següent enllaç.