V PostgreSQL byla odstraněna zranitelnost, která byla využita při útoku na BeyondTrust

Byly vytvořeny opravy pro všechny podporované větve PostgreSQL 17.3, 16.7, 15.11, 14.16 a 13.19, ve kterých bylo opraveno více než 70 chyb a odstraněna zranitelnost (CVE-2025-1094), která byla na konci prosince využita v útoku na společnost BeyondTrust a Ministerstvo financí USA. Problém v PostgreSQL byl odhalen při analýze vzdálené zranitelnosti (CVE-2024-12356) ve službách BeyondTrust PRA (Privileged Remote Access) a BeyondTrust RS (Remote Support), při jejíž exploitaci byla rovněž využita dříve neznámá (0-day) zranitelnost v libpq.

V důsledku útoku se útočníkům podařilo získat klíč pro přístup k API, které se používá pro poskytování technické podpory zákazníkům SaaS služeb BeyondTrust. Toto API bylo použito k resetování hesla a kompromitaci infrastruktury Ministerstva financí USA, které využívá produkty BeyondTrust. Během útoku útočníci dokázali stáhnout důvěrné dokumenty a získat přístup k pracovním stanicím zaměstnanců ministerstva.

Zranitelnost se projevuje v knihovně libpq, která poskytuje API pro interakci s databázovými systémy z programů v jazyce C (na tuto knihovnu jsou také implementovány obalové knihovny pro C++, Perl, PHP a Python). Problém se týká aplikací, které používají pro escapování speciálních znaků a neutralizaci uvozovek funkce PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() nebo PQescapeStringConn().

Útočník může dosáhnout vložení svého SQL kódu, pokud je text přijatý zvenčí před použitím uvnitř SQL dotazu escapován pomocí výše uvedených funkcí libpq. V aplikacích BeyondTrust byly takto escapované dotazy předávány skrze příkazovou utilitu psql. Zranitelnost je způsobena nedostatkem kontroly správnosti používaných Unicode znaků v textu ve funkcích escapování, což umožňuje obejít normalizaci uvozovek pomocí zadání nesprávných vícibytečných sekvencí UTF-8.

K exploataci zranitelnosti lze využít nesprávný UTF-8 znak skládající se z bytů 0xC0 a 0x27 („└'“). Byte 0x27 v ASCII kódování odpovídá jednoduché úvozovce („‘“), která musí být escapována. V kódu escapování se kombinace bytů 0xC0 a 0x27 zpracovává jako jeden Unicode znak. Tím pádem byte 0x27 v této sekvenci zůstává neescapován, když se zpracovává SQL dotaz v nástroji psql, zpracovává se jako uvozovka.

Při spouštění SQL dotazů pomocí utilit psql pro organizaci provádění libovolného kódu lze použít substituci ve stringu příkazem „\!“, určeným v psql pro spuštění libovolných programů. Například pro spuštění na serveru utilitě „id“ lze předat hodnotu „hax\xC0′; \! id #“. V příkladu níže se pro escapaci volá PHP skript dbquote, který používá PHP funkci pg_escape_string, která funguje nad funkcí 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á bytová sekvence pro kódování „UTF8“: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster