V PostgreSQL bola odstránená zraniteľnosť využitá pri útoku na BeyondTrust

Boli vytvorené opravy pre všetky podporované vetvy PostgreSQL 17.3, 16.7, 15.11, 14.16 a 13.19, v ktorých bolo opravených viac ako 70 chýb a odstránená zraniteľnosť (CVE-2025-1094), využitá koncom decembra pri útoku na spoločnosť BeyondTrust a Ministerstvo financií USA. Problém v PostgreSQL bol identifikovaný pri analýze vzdialenej zraniteľnosti (CVE-2024-12356) v službách BeyondTrust PRA (Privileged Remote Access) a BeyondTrust RS (Remote Support), pričom pred exploatáciou bola navyše využitá predtým neznáma (0-day) zraniteľnosť v libpq.

V dôsledku útoku sa útočníkom podarilo získať kľúč na prístup k API, ktoré sa používalo na diaľkovú technickú podporu pre klientov SaaS služieb BeyondTrust. Toto API bolo využité na resetovanie hesla a kompromitáciu infraštruktúry Ministerstva financií USA, ktoré využíva produkty BeyondTrust. Počas útoku sa útočníci podarilo načítať dôverné dokumenty a získať prístup k pracovným staniam zamestnancov ministerstva.

Zraniteľnosť sa prejavuje v knižnici libpq, ktorá poskytuje API pre interakciu s DBMS z programov v jazyku C (na vrchu knižnice sú implementované aj obalové knižnice pre C++, Perl, PHP a Python). Problém sa týka aplikácií, ktoré na eskaláciu špeciálnych znakov a neutralizáciu úvodzoviek používajú funkcie PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() alebo PQescapeStringConn().

Útočník môže dosiahnuť substitúciu vlastného SQL kódu, ak sa text získaný zvonka pred použitím v SQL dopyte eskaluje pomocou vyššie uvedených funkcií libpq. V aplikáciách BeyondTrust sa takto eskalované dopyty odosielali prostredníctvom príkazového riadku psql. Zraniteľnosť je spôsobená absenciou kontroly správnosti použitých Unicode znakov v textových reťazcoch vo funkciách eskalácie, čo umožňuje obísť normalizáciu úvodzoviek prostredníctvom neplatných viacbajtových sekvencií UTF-8.

Na využívanie zraniteľnosti je možné použiť nesprávny UTF-8 znak, pozostávajúci z bajtov 0xC0 a 0x27 ("└'"). Bajt 0x27 v ASCII kódovaní zodpovedá jednoduchému úvodzovaku ("‘"), ktorý je potrebné escapovať. V kóde escapovania sa kombinácia bajtov 0xC0 a 0x27 spracováva ako jeden Unicode znak. Tým pádom bajt 0x27 v takejto sekvencii zostáva neescapovaný, pričom pri spracovaní SQL dotazu v utilite psql sa spracováva ako úvodzovka.

Pri spúšťaní SQL dotazov pomocou utility psql na organizovanie vykonávania ľubovoľného kódu je možné použiť substitúciu v príkaze "\!", určenému v psql na spúšťanie ľubovoľných programov. Napríklad na spustenie na serveri utilite „id“ je možné poslať hodnotu „hax\xC0′; \! id #“. V nasledujúcom príklade na escapovanie sa volá PHP skript dbquote, ktorý používa PHP funkciu pg_escape_string, pracujúcu na vrchu funkcie PQescapeString z 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: neplatná bajtová sekvencia pre kódovanie „UTF8“: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster