Π’ PostgreSQL Π΅ отстранСна уязвимост, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΏΡ€ΠΈ Π°Ρ‚Π°ΠΊΠ°Ρ‚Π° срСщу BeyondTrust

Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ΠΈ са ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‰ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° всички ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° PostgreSQL 17.3, 16.7, 15.11, 14.16 ΠΈ 13.19, Π² ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ Π½Π°Π΄ 70 Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Π΅ отстранСна уязвимост (CVE-2025-1094), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² края Π½Π° Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ ΠΏΡ€ΠΈ Π°Ρ‚Π°ΠΊΠ° срСщу компанията BeyondTrust ΠΈ ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° финанситС Π½Π° БАЩ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π² PostgreSQL Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½Π° уязвимост (CVE-2024-12356) Π² услугитС Π½Π° BeyondTrust PRA (Privileged Remote Access) ΠΈ BeyondTrust RS (Remote Support), ΠΏΡ€ΠΈ СксплоатиранСто Π½Π° която Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ Π±ΠΈΠ»Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° нСизвСстна (0-day) уязвимост Π² libpq.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π°, Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ‚Π΅ Π»ΠΈΡ†Π° успСли Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΊΠ»ΡŽΡ‡ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ API, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ прСдоставянС Π½Π° тСхничСска ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π½Π° SaaS услуги Π½Π° BeyondTrust. Π’ΠΎΠ·ΠΈ API Π΅ Π±ΠΈΠ» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° ΠΈ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° инфраструктурата Π½Π° ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° финанситС Π½Π° БАЩ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° BeyondTrust. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π°, Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ‚Π΅ Π»ΠΈΡ†Π° успСли Π΄Π° изтСглят ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ станции Π½Π° слуТитСлитС Π½Π° министСрството.

Уязвимостта сС проявява Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libpq, прСдоставяща API Π·Π° взаимодСйствиС с Π‘Π£Π‘Π” ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° C (Π²ΡŠΡ€Ρ…Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΡΡŠΡ‰ΠΎ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° C++, Perl, PHP ΠΈ Python). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ засяга прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() ΠΈΠ»ΠΈ PQescapeStringConn() Π·Π° СскСйпиранС Π½Π° спСциални символи ΠΈ Π½Π΅ΡƒΡ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ.

Атакуващият ΠΌΠΎΠΆΠ΅ Π΄Π° постигнС подмяна Π½Π° своя SQL ΠΊΠΎΠ΄, Π°ΠΊΠΎ получСнният извън тСкст ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² SQL Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ сС СскСйпира с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° спомСнатитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ libpq. Π’ прилоТСнията Π½Π° BeyondTrust Π΅ΡΠΊΠ΅ΠΉΠΏΡŠΡ€Π²Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ запитвания са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π»ΠΈ ΠΏΡ€Π΅Π· командния Ρ€Π΅Π΄ psql. Уязвимостта Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΠΎΡ‚ липса Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° корСктността Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Π² тСкста символи Unicode Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° СскСйпиранС, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° сС Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ нормализацията Π½Π° ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· посочванС Π½Π° Π½Π΅ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΈ послСдоватСлности UTF-8.

Π—Π° Сксплоатация Π½Π° уязвимостта ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ΠΊΠΎΡ€Π΅ΠΊΡ‚Π΅Π½ UTF-8 символ, ΡΡŠΡΡ‚ΠΎΡΡ‰ сС ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅ 0xC0 ΠΈ 0x27 (Β«β””'Β»). Π‘Π°ΠΉΡ‚Π° 0x27 Π² ASCII ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ‚Π° отговаря Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° ΠΊΠ°Π²ΠΈΡ‡ΠΊΠ° (Β«β€˜Β»), която ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈ Π½Π° СскСйпиранС. Π’ ΠΊΠΎΠ΄Π° Π·Π° СскСйпиранС комбинацията ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅ 0xC0 ΠΈ 0x27 сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ Unicode символ. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π±Π°ΠΉΡ‚Π° 0x27 Π² Ρ‚Π°ΠΊΠ°Π²Π° послСдоватСлност остава Π½Π΅ СскСйпирован, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° SQL Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° psql Ρ‚ΠΎΠΉ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΊΠ°Ρ‚ΠΎ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠ°.

ΠŸΡ€ΠΈ изпълнСниС Π½Π° SQL запитвания Ρ‡Ρ€Π΅Π· ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° psql Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° подмяна Π² стринга Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Β«\!Β», ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π² psql Π·Π° стартиранС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. НапримСр, Π·Π° стартиранС Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ инструмСнтитС Β«idΒ» ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ стойността Β«hax\xC0β€²; \! id #Β». Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Π·Π° Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° PHP скрипт dbquote, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° PHP функцията pg_escape_string, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° Π²ΡŠΡ€Ρ…Ρƒ функцията PQescapeString ΠΎΡ‚ 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: Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Π° послСдоватСлност Π·Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Β«UTF8Β»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster