PostgreSQL-iga on eemaldatud haavatavus, mida kasutati rünnakul BeyondTrusti vastu

On korrektsed uuendused kõikidele toetatud PostgreSQL harudele 17.3, 16.7, 15.11, 14.16 ja 13.19, milles on parandatud üle 70 vea ja kõrvaldatud haavatavus (CVE-2025-1094), mis aktiveeriti detsembri lõpus rünnakus BeyondTrusti ja USA rahandusministeeriumi vastu. PostgreSQL'i probleem tuvastati BeyondTrust PRA (Privileged Remote Access) ja BeyondTrust RS (Remote Support) teenuste kaugel avatud haavatavuse (CVE-2024-12356) analüüsi käigus, mille ärakasutamise korral rakendati lisaks seni teadmata (0-day) haavatavust libpq-s.

Rünnaku tulemusena suudeti kurjategijatel saada võtme API ligipääsuks, mida kasutatakse BeyondTrusti SaaS-teenuste klientide kaugtugiteenuste osutamiseks. Seda API-d kasutati parooli lähtestamiseks ja USA rahandusministeeriumi infrastruktuuri kompromiteerimiseks, kes kasutab BeyondTrusti tooteid. Rünnaku käigus suutsid kurjategijad üles laadida konfidentsiaalseid dokumente ja pääseda ligi ministeeriumi töötajate arvutitele.

Haavatavus ilmneb libpq teegis, mis pakub API-de ühendamiseks andmebaasiga C keeles kirjutatud programmide kaudu (teegile on ka rakendatud mähiste teegid C++, Perl, PHP ja Python jaoks). Probleem mõjutab rakendusi, mis kasutavad spetsiaalsete sümbolite genereerimisfunktsioone nagu PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() või PQescapeStringConn().

Ründaja võib saavutada oma SQL-koodi sisestamise, kui väljastpoolt saadud tekst, enne kui see kasutatakse SQL-päringus, genereeritakse ülalmainitud libpq funktsioonide abil. BeyondTrusti rakendustes edastati selliselt genereeritud päringud käsurea utiliidi psql kaudu. Haavatavus on tingitud faktist, et genereerimisfunktsioonides ei kontrollita kasutatud Unicode-sümbolite õigsust, mis võimaldab ümbersõitu jutumärkide normaliseerimisest vale UTF-8 mitme baitiga järjestuste esitamiste kaudu.

Tõrke kasutamiseks saab kasutada vale UTF-8 sümbolit, mis koosneb baitidest 0xC0 ja 0x27 ("└'"). Bait 0x27 ASCII kodeeringus vastab ühele jutumärgile ('‘'), mis vajab edasi- või tagasiviimist. Koodi edastamise korral töödeldakse baitide kombinatsiooni 0xC0 ja 0x27 ühe Unicode-sümbolina. Seega jääb bait 0x27 sellises järjestuses ekraanituks, samas kui SQL-päringu töötlemisel utiliidis psql töödeldakse seda kui jutumärki.

Kaugjuhtimisega SQL-päringute käivitamine utiliidi psql abil saab juhusliku koodi täitmiseks kasutada käsu „\!“ asendamist, mis on psql-is mõeldud juhuslike programmide käivitamiseks. Näiteks käivitamiseks serveris utiliidi „id“ puhul võib edastada väärtuse „hax\xC0′; \! id #“. Allpool olevas näites kutsutakse ekraanile PHP-skript dbquote, mis kasutab PHP funktsiooni pg_escape_string, mis töötab libpq funktsiooni PQescapeString peal: $ 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└’; VIGA: vigane baitide järjestus kodeeringule „UTF8”: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster