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
