PostgreSQL-is on kõrvaldatud haavatavus, mida kasutati BeyondTrusti ründamisel.

Korrektsioone tehti kõigile toetatud PostgreSQL harudele 17.3, 16.7, 15.11, 14.16 ja 13.19, milles on parandatud üle 70 vea ning kõrvaldatud turvaauk (CVE-2025-1094), mis lõi välja detsembris rünnakus ettevõttele BeyondTrust ja Ameerika Ühendriikide rahandusministeeriumile. PostgreSQL-i probleem tuvastati, kui analüüsiti kaugjuurdepääsu haavatavust (CVE-2024-12356) BeyondTrust PRA (Privileged Remote Access) ja BeyondTrust RS (Remote Support) teenustes, mille ekspluateerimise käigus kasutati lisaks varem tundmatut (0-day) haavatavust libpq-s.

Rünnaku tulemusena õnnestus kurjategijatel saada API juurdepääsuvõti, mida kasutatakse kaugteenuste osutamiseks BeyondTrust'i SaaS-teenuste klientidele. Seda API-t kasutati parooli lähtestamiseks ja Ameerika Ühendriikide rahandusministeeriumi infrastruktuuri kompromiteerimiseks, kes kasutas BeyondTrust'i tooteid. Rünnaku käigus suudeti kurjategijatel alla laadida konfidentsiaalseid dokumente ja pääseda ministeeriumi töötajate tööjaamadele.

Haavatavus ilmneb libpq teegis, mis pakub API-d andmebaasidega suhtlemiseks C keeles (teegi peal on rakendatud ka C++, Perl, PHP ja Pythoni raamatukogud). Probleem puudutab rakendusi, mis kasutavad spetsiaalsete märkide ja jutumärkide neutraliseerimiseks funktsioone PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() või PQescapeStringConn().

Ründaja võib saavutada oma SQL-koodi sisestamise, kui väljast saadud tekst ekraanil nagu eespool mainitud libpq funktsioonide kaudu enne SQL-päringus kasutamist. BeyondTrusti rakendustes edastati niimoodi ekraaniga päringud käsurea utiliidi psql kaudu. Haavatavus tuleneb ekraani funktsioonides UTF-8 mitmemärgiliste järjestuste kontrollimise puudumisest, mis võimaldab vahetada jutumärkide normaliseerimist vigaste järjestuste määramisega.

Selle haavatavuse kasutamiseks võib kasutada vale UTF-8 sümbolit, mis koosneb baitidest 0xC0 ja 0x27 («└'»). Bait 0x27 ASCII kodeeringus vastab üksikule jutumärgile («‘»), mis peab olema põgenenud. Põgenemise koodis töödeldakse baitide kombinatsiooni 0xC0 ja 0x27 ühe Unicode sümbolina. Seega jääb bait 0x27, olevat sellises järjestuses, põgenemata, samas kui SQL-päringu töötlemisel utiliidis psql töödeldakse seda kui jutumärki.

Koormuse analüüsi korral SQL-päringute käitamisel utiliidi psql abil juhuslike koodide täitmiseks võib kasutada käskluses „\!” asendust, mis on mõeldud psql-is juhuslike programmide käitamiseks. Näiteks selle käivitamiseks. serveril «id» utiliidi saab edastada väärtuse «hax\xC0′; \! id #». Allpool on näide, kus PHP-skripti dbquote kutsutakse välja, 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└’; ERROR: kehtetu baitjärjestus kodeeringuks «UTF8»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster