Janë formuar azhurnime korrigjuese për të gjitha degët e mbështetura të PostgreSQL 17.3, 16.7, 15.11, 14.16 dhe 13.19, në të cilat janë korrigjuar më shumë se 70 defekte dhe është eliminuar një vunerabilitet (CVE-2025-1094), i angazhuar në fund të dhjetorit në sulmin ndaj kompanisë BeyondTrust dhe Ministrisë së Financave të SHBA. Problemi në PostgreSQL u zbulua gjatë analizës së vunerabilitetit të largët (CVE-2024-12356) në shërbimet BeyondTrust PRA (Privileged Remote Access) dhe BeyondTrust RS (Remote Support), gjatë shfrytëzimit të të cilit u angazhua një vunerabilitet i panjohur më parë (0-day) në libpq.
Si rezultat i sulmit, të dhënat e sulmuesve arritën të fitonin një çelës për akses në API-në e aplikuar për ofrimin e shërbimeve të mbështetjes teknike për klientët e shërbimeve SaaS të BeyondTrust. Ky API u përdor për të rivendosur fjalëkalimin dhe për të komprometuar infrastrukturën e Ministrisë së Financave të SHBA që përdor produktet e BeyondTrust. Gjatë sulmit, sulmuesit arritën të ngarkonin dokumente konfidenciale dhe morën akses në stacionet e punës së punonjësve të ministrisë.
Vulnerabiliteti shfaqet në bibliotekën libpq, e cila ofron API për ndërveprimin me DBMS nga programet në gjuhën C (përveç bibliotekës, janë implementuar gjithashtu bibliotekat-ndërlidhëse për C++, Perl, PHP dhe Python). Problemi preku aplikacionet që përdorin funksionet PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() ose PQescapeStringConn() për të ndaluar simbolet speciale dhe për të neutralizuar citatet.
Sulmuesi mund të arrijë të fusë kodin e tij SQL, nëse teksti i marrë nga jashtë paraqitet në përdorim brenda një kërkese SQL, duke u ekranuar me funksionet e sipërpërmendura të libpq. Në aplikacionet BeyondTrust, kërkesat e tilla të ekranizuara u kaluan përmes utilitarit të linjës së komandave psql. Vulnerabiliteti shkaktohet nga mungesa e kontrollit të saktësisë së simboleve Unicode të përdorura në tekstin e ekranizuar, duke lejuar kalimin e normalizimit të citateve përmes specifikimit të sekuencave të shumtë byte UTF-8 të pavlefshme.
PĂ«r eksploatimin e dobĂ«sisĂ«, mund tĂ« pĂ«rdoret njĂ« karakter i papĂ«rshtatshĂ«m UTF-8, i pĂ«rbĂ«rĂ« nga bajtĂ«t 0xC0 dhe 0x27 («â'»). Bajte 0x27 nĂ« kodimin ASCII korrespondon me thonjĂ«zĂ«n e vetme («â»), qĂ« duhet tĂ« ekranohet. NĂ« kodin e ekranimit, kombinimi i bajtĂ«ve 0xC0 dhe 0x27 trajtohet si njĂ« karakter Unicode. Si rezultat, bajti 0x27 nĂ« njĂ« renditje tĂ« tillĂ« mbetet i paekranuar, ndĂ«rsa gjatĂ« pĂ«rpunimit tĂ« pyetjeve SQL nĂ« utilitarin psql, ai trajtohet si thonjĂ«z.
NĂ« fillimin e pyetjeve SQL pĂ«rmes utilitarit psql, pĂ«r tĂ« organizuar ekzekutimin e kodit tĂ« rastĂ«sishĂ«m, mund tĂ« pĂ«rdoret zĂ«vendĂ«simi nĂ« stringun e komandĂ«s «\!», e cila Ă«shtĂ« e destinuar nĂ« psql pĂ«r tĂ« filluar programe tĂ« rastĂ«sishme. PĂ«r shembull, pĂ«r tĂ« filluar nĂ« serveri Mund tĂ« kaloni vlerĂ«n "hax\xC0âČ; \! id #" nĂ« utilitarin "id". NĂ« shembullin mĂ« poshtĂ«, duke pĂ«rdorur njĂ« skritp PHP dbquote, i cili pĂ«rdor funksionin PHP pg_escape_string qĂ« punon mbi funksionin PQescapeString nga 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: byte sequence e pavlefshme pĂ«r kodimin "UTF8": 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)
Burimi: opennet.ru
