Vulnerabilitatea din PostgreSQL utilizată în atacul asupra BeyondTrust a fost eliminată

Au fost formate actualizări corective pentru toate ramurile suportate PostgreSQL 17.3, 16.7, 15.11, 14.16 și 13.19, în care au fost corectate peste 70 de erori și a fost eliminată o vulnerabilitate (CVE-2025-1094), activată la sfârșitul lunii decembrie în atacul asupra companiei BeyondTrust și a Ministerului Finanțelor din SUA. Problema în PostgreSQL a fost identificată în urma analizei unei vulnerabilități la distanță (CVE-2024-12356) în serviciile BeyondTrust PRA (Acces Remote Privilegiat) și BeyondTrust RS (Suport Remote), exploatarea căreia a implicat, de asemenea, o vulnerabilitate necunoscută anterior (0-day) în libpq.

Ca rezultat al atacului, atacatorii au reușit să obțină o cheie pentru accesul la API-ul utilizat pentru furnizarea de servicii de suport tehnic clienților serviciilor SaaS BeyondTrust. Acest API a fost folosit pentru resetarea parolei și compromiterea infrastructurii Ministerului Finanțelor din SUA, care folosește produsele BeyondTrust. În timpul atacului, atacatorii au reușit să încarce documente confidențiale și au obținut acces la stațiile de lucru ale angajaților ministerului.

Vulnerabilitatea se manifestă în biblioteca libpq, care oferă un API pentru interacțiunea cu SGBD-uri din programe scrise în limbajul C (deasupra bibliotecii sunt implementate și biblioteci wrapper pentru C++, Perl, PHP și Python). Problema afectează aplicațiile care utilizează funcțiile PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() sau PQescapeStringConn() pentru a scăpa caractere speciale și a neutraliza ghilimelele.

Atacatorul poate obține substituția propriului cod SQL dacă textul primit din exterior este scăpat folosind funcțiile de mai sus ale libpq înainte de utilizarea în interiorul unei interogări SQL. În aplicațiile BeyondTrust, interogările scăpate în acest mod au fost transmise prin utilitarul de linie de comandă psql. Vulnerabilitatea este cauzată de lipsa verificării validității caracterelor Unicode utilizate în text în funcțiile de scăpare, ceea ce permite ocolirea normalizării ghilimelelor prin specificarea unor secvențe UTF-8 incorecte.

Pentru exploatarea vulnerabilității se poate folosi un simbol UTF-8 incorect, constând din byte-urile 0xC0 și 0x27 («└'»). Byte-ul 0x27 în codificarea ASCII corespunde ghilimelei simple («‘»), care trebuie să fie escpată. În codul de escapare, combinația de byte-uri 0xC0 și 0x27 este procesată ca un singur simbol Unicode. Astfel, byte-ul 0x27 în această secvență rămâne neescapat, având în vedere că, în timpul procesării unei interogări SQL în utilitarul psql, este tratat ca o ghilimele.

Upon execuția interogărilor SQL prin intermediul utilitarului psql pentru organizarea executării unui cod arbitrar se poate folosi substituția în linia de comandă «\!», destinată în psql pentru a lansa programe arbitrare. De exemplu, pentru a lansa pe server utilitarul «id» se poate transmite valoarea «hax\xC0′; \! id #». În exemplul de mai jos, pentru escapare se apelează un script PHP dbquote, care utilizează funcția PHP pg_escape_string, care funcționează deasupra funcției PQescapeString din libpq: $ echo -e «hello \xC0’world'» | .\/dbquote ‘hello └’world»’ $ quoted=$(echo -e «hax\xC0′; \! id # » | .\/dbquote) $ echo «SELECT COUNT(1) FROM gw_sessions WHERE session_key = $quoted AND session_type = ‘sdcust’ AND (expiration IS NULL OR expiration>NOW())» | psql -e SELECT COUNT(1) FROM gw_sessions WHERE session_key = ‘hax└’; ERROR: secvență de byte invalidă pentru codificarea «UTF8»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster