En sÄrbarhet som ble utnyttet i et angrep pÄ BeyondTrust er eliminiert i PostgreSQL

Korrigerende oppdateringer er utgitt for alle stÞttede versjoner av PostgreSQL 17.3, 16.7, 15.11, 14.16 og 13.19, som retter over 70 feil og eliminerer en sÄrbarhet (CVE-2025-1094), som ble utnyttet i slutten av desember i et angrep mot selskapet BeyondTrust og det amerikanske finansdepartementet. Problemet i PostgreSQL ble avdekket ved analyse av en ekstern sÄrbarhet (CVE-2024-12356) i BeyondTrusts PRA (Privileged Remote Access) og RS (Remote Support), hvor utnyttelsen ogsÄ involverte en tidligere ukjent (0-day) sÄrbarhet i libpq.

Som et resultat av angrepet klarte angriperne Ä fÄ tilgang til API-nÞkkelen som brukes for fjern-teknisk stÞtte til kunder av BeyondTrusts SaaS-tjenester. Dette API-et ble brukt til Ä tilbakestille passordet og kompromittere infrastrukturen til det amerikanske finansdepartementet, som bruker produkter fra BeyondTrust. Under angrepet klarte angriperne Ä laste opp konfidensielle dokumenter og fikk tilgang til arbeidsstasjonene til departementets ansatte.

SÄrbarheten oppstÄr i biblioteken libpq, som gir et API for interaksjon med databasen fra programmer skrevet i C (det er ogsÄ utviklet bindinger for C++, Perl, PHP og Python over biblioteket). Problemet berÞrer applikasjoner som bruker funksjonene PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() eller PQescapeStringConn() for Ä skanne spesialtegn og nÞytralisere anfÞrselstegn.

Angriperen kan oppnÄ innsetting av sin egen SQL-kode dersom teksten som mottas fra utsiden, blir skannet med de nevnte libpq-funksjonene fÞr den brukes i SQL-spÞrringer. I BeyondTrust-applikasjoner ble slike skannede spÞrringer sendt gjennom kommandolinjeverktÞyet psql. SÄrbarheten skyldes mangel pÄ validering av gyldige Unicode-tegn i skannefunksjonene, noe som tillater omgÄelse av normaliseringen av anfÞrselstegn ved Ä spesifisere ugyldige multibyte-sekvenser i UTF-8.

For exploitation, the vulnerability can be utilized with an incorrect UTF-8 character consisting of bytes 0xC0 and 0x27 («└'»). The byte 0x27 in ASCII corresponds to a single quote («‘») that requires escaping. In the escape code, the byte combination 0xC0 and 0x27 is processed as one Unicode character. Consequently, the byte 0x27 in this sequence remains unescaped, while it is processed as a quotation mark when handling an SQL query in the psql utility.

Ved executing SQL queries using the psql utility to organize the execution of arbitrary code can employ substitution in the command string «\!», which is intended in psql for launching arbitrary programs. For instance, to run on serveren the ‘id’ utility, one can pass the value «hax\xC0â€Č; \! id #». In the example below, PHP script dbquote is called for escaping, which uses the PHP function pg_escape_string, working on top of the PQescapeString function from 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: invalid byte sequence for encoding «UTF8»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Kilde: opennet.ru

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster