Π’ 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++, 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: invalid byte sequence for encoding «UTF8»: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ