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).
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 rau 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 daquesta vulnerabilitat, els atacants van aconseguir obtenir una clau daccĂ©s a lAPI 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 d'aquest panorama, l'equip de PostgreSQL ha implementat actualitzacions 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ç.