Уязвимост Π² 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 ΠΊΠΎΠ΄, Π°ΠΊΠΎ Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΎΡ‚Π²ΡŠΠ½, сС Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° посочСнитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° libpq, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² SQL заявка. Π’ прилоТСнията Π½Π° 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: invalid byte sequence for encoding Β«UTF8Β»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

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

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