U PostgreSQL-u je otklonjena ranjivost koja je korištena u napadu na BeyondTrust

Ispravljeni su korektivni ažuriranja za sve podržane grane PostgreSQL 17.3, 16.7, 15.11, 14.16 i 13.19, u kojima je ispravljeno više od 70 grešaka i otklonjena ranjivost (CVE-2025-1094), koja je krajem prosinca korištena u napadu na tvrtku BeyondTrust i Ministarstvo financija SAD-a. Problema u PostgreSQL-u otkrivena je tijekom analize daljinske ranjivosti (CVE-2024-12356) u servisima BeyondTrust PRA (Privileged Remote Access) i BeyondTrust RS (Remote Support), tijekom čijeg iskorištavanja je dodatno korištena ranije nepoznata (0-day) ranjivost u libpq.

Kao rezultat napada, zlonamjernici su uspjeli dobiti ključ za pristup API-ju koji se koristi za daljinsko pružanje tehničke podrške korisnicima SaaS usluga BeyondTrust. Ovaj API je korišten za resetiranje lozinki i kompromitaciju infrastrukture Ministarstva financija SAD-a, koje se koristi proizvodima BeyondTrust. Tijekom napada, zlonamjernici su uspjeli preuzeti povjerljive dokumente i dobili pristup radnim stanicama zaposlenika ministarstva.

Ranjivost se manifestira u biblioteci libpq, koja pruža API za interakciju s DBMS-om iz programa napisanih na jeziku C (osim toga, na biblioteci su implementirane obavijesne biblioteke za C++, Perl, PHP i Python). Problem se odnosi na aplikacije koje koriste za ispravljanje specijalnih karaktera i neutralizaciju navodnika funkcije PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() ili PQescapeStringConn().

Napadač može postići umetanje vlastitog SQL koda ako se vanjski tekst pravilno ispravi prije korištenja unutar SQL upita pomoću gore navedenih funkcija libpq. U aplikacijama BeyondTrust, ispravljeni upiti su se prenosili putem komandne linije psql. Ranjivost je uzrokovana nedostatkom provjere ispravnosti korištenih Unicode simbola u funkcijama ispravljenja, što omogućuje zaobilaženje normalizacije navodnika kroz navođenje neispravnih višebajtnih sekvenci UTF-8.

Za iskorištavanje ranjivosti može se koristiti neispravni UTF-8 simbol, koji se sastoji od bajtova 0xC0 i 0x27 («└'»). Bajt 0x27 u ASCII kodiranju odgovara jednostranoj navodnici («‘»), koja se mora eskapirati. U kodiranju, kombinacija bajtova 0xC0 i 0x27 obrađuje se kao jedan Unicode simbol. Prema tome, bajt 0x27 u toj sekvenci ostaje neeskapiran, dok se prilikom obrade SQL upita u alatu psql obrađuje kao navodnik.

Tijekom pokretanju SQL upita uz pomoć alata psql za organizaciju izvršenja proizvoljnog koda može se koristiti zamjena u naredbenoj liniji «\!», koja je namijenjena za pokretanje proizvoljnih programa u psql-u. Na primjer, za pokretanje serveru alata «id» može se proslijediti vrijednost «hax\xC0′; \! id #». U donjem primjeru, za eskapiranje se poziva PHP skripta dbquote, koja koristi PHP funkciju pg_escape_string koja radi iznad funkcije PQescapeString iz 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: nevažeća bajt sekvenca za kodiranje «UTF8»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster