Преди няколко дни, PostgreSQL обяви пускането на коригиращи актуализации за всички поддържани клонове на PostgreSQL (версии 17.3, 16.7, 15.11, 14.16 и 13.19). Тези актуализации, които коригират повече от 70 грешки и преди всичко елиминират уязвимостта, идентифицирана като CVE-2025-1094, свързано с атака, която засегна BeyondTrust и Министерството на финансите на САЩ в края на декември.
Уязвимост е открита по време на анализа на друга отдалечена повреда (CVE-2024-12356) в услугите BeyondTrust PRA (Привилегирован отдалечен достъп) и BeyondTrust RS (Отдалечена поддръжка) и беше влошено от наличието на неизвестна преди това уязвимост (0-ден) в библиотеката libpq.
За уязвимостта, която засегна BeyondTrust
Споменава се, че грешката в PostgreSQL произхожда от libpq, библиотеката, която Предоставя API за взаимодействие с PostgreSQL от програми, написани на C, което е и основата за обвързвания в C++, Perl, PHP и Python.
La Уязвимостта се крие в неправилното боравене с валидирането на Unicode знаци. в решаващи функции за бягство. Тези функции са от съществено значение за неутрализиране на специални знаци в SQL заявки и предотвратяване на инжектиране на код. Въпреки това, липсата на правилно валидиране позволява на някои невалидни UTF-8 многобайтови последователности да заобиколят нормализацията на котировките.
Метод на атака
Този провал позволява замяна на SQL в приложенията които използват тези функции за обработка на заявки, особено когато заявките са изпратени чрез помощната програма от командния ред psql. Например, тази уязвимост може да бъде използвана за изпълнение на произволни команди на сървъра чрез заместване на командния ред "!", както е показано с пример, при който е извикана помощната програма "id".
Експлойтът разчита на използването на невалиден знак UTF-8, състоящ се от байтове 0xC0 и 0x27. Байт 0x27 съответства на единична кавичка в ASCII, която обикновено се екранира, за да се избегнат проблеми с SQL инжектиране. Но когато се комбинира с 0xC0, последователността се интерпретира като единичен Unicode знак, оставяйки единичните кавички неекранирани.
Въздействие на атаката
В резултат на тази уязвимост, Нападателите успяха да получат ключ за достъп до API използвани за предоставяне на дистанционна поддръжка чрез услугите BeyondTrust SaaS. С този ключ, успя да нулира пароли и да компрометира инфраструктурата на Министерството на финансите на САЩ., достъп до поверителни документи и работни станции на служителите. Атаката разкри сериозни пропуски във веригата за сигурност, подчертавайки важността на наличието на стабилни механизми за валидиране на въвеждане в критични библиотеки като libpq.
Актуализации и коригиращи мерки
Предвид тази панорама, Екипът на PostgreSQL внедри актуализацииs, които коригират тази уязвимост и редица допълнителни грешки. Решението се крие в подобряването на валидирането на знаци във функциите за избягване, гарантирайки, че всяка UTF-8 последователност се обработва правилно и предотвратява неправилното тълкуване на единични кавички.
В допълнение към това, както вече беше споменато, тази актуализация поправя повече от 70 грешки, докладвани през последните няколко месеца:
- Коригирано възможно повторно използване на остарели резултати в агрегати на прозорци, което може да доведе до неправилни резултати.
- Различни корекции на условия на състезание за вакуум, които в най-лошия случай биха могли да причинят повреда на системния каталог.
- Различни поправки за съкращаване на таблици и индекси за предотвратяване на възможна повреда.
- Заобиколно решение за отделяне на дял, където собственото ограничение на външния ключ препраща към разделена таблица.
- Коригирани кодове за формат на FFn (напр. FF1) to_timestamp, където кодът на целочислен формат преди FFn би консумирал всички налични цифри.
- Поправки за SQL/JSON и XMLTABLE() за поставяне на двойни кавички около конкретни записи, когато е необходимо.
- Включете опцията ldapscheme в pg_hba_file_rules().
- Различни поправки за UNION, включително несливане на колони с неподдържани съпоставки.
- Няколко корекции, които биха могли да повлияят на наличността или скоростта на стартиране на връзка към PostgreSQL.
- Коригира множество изтичания на памет в изхода за логическо декодиране.
- Коригира няколко изтичания на памет в PL/Python.
- Коригирано е изтичане на памет на pg_restore с zstd компресирани данни.
- Поправено е pg_basebackup за правилно обработване на файлове pg_wal.tar, по-големи от 2 GB в Windows.
- Коригиран срив в pageinspect в случаи, когато дефиницията на функцията brin_page_items() не е актуализирана до най-новата версия.
- Коригира условието за състезание при опит за отмяна на отдалечена заявка postgres_fdw.
И накрая, ако се интересувате да можете да научите повече за това, можете да се консултирате с подробностите в следваща връзка.