Түзөтүүчү жаңыртуулар бардык колдоого алынган PostgreSQL 17.3, 16.7, 15.11, 14.16 жана 13.19 бутактары үчүн түзүлүп, 70тен ашык мүчүлүштүктөрдү оңдоп, декабрь айынын аягында TreaTrust жана Beyond департаментине кол салууда колдонулган аялуу жерлерди (CVE-2025-1094) жок кылды. PostgreSQLдеги көйгөй BeyondTrust PRA (Privileged Remote Access) жана BeyondTrust RS (Remote Support) кызматтарындагы алыскы кемчиликти (CVE-2024-12356) талдоо учурунда табылган, анын эксплуатациясына кошумча түрдө мурда белгисиз (0 күндүк) libpq кемчилиги тартылган.
Чабуулдун натыйжасында чабуулчулар BeyondTrust SaaS кардарларына техникалык колдоо кызматтарын алыстан көрсөтүү үчүн колдонулган API'ге кирүү ачкычын алууга жетишкен. Бул API сырсөздөрдү баштапкы абалга келтирүү жана BeyondTrust өнүмдөрүн колдонгон АКШнын Каржы министрлигинин инфраструктурасын бузуу үчүн колдонулган. Чабуул учурунда кол салгандар купуя документтерди жүктөп алып, министрликтин кызматкерлеринин жумуш орундарына кире алышкан.
Алсыздык libpq китепканасында пайда болот, ал C программаларынын DBMS менен иштешүү үчүн API камсыз кылат (C++, Perl, PHP жана Python үчүн милдеттүү китепканалар да китепкананын үстүндө ишке ашырылат). Маселе өзгөчө белгилерден качуу жана тырмакчаларды нейтралдаштыруу үчүн PQescapeLiteral(), PQescapeIdentifier(), PQescapeString() же PQescapeStringConn() функцияларын колдонгон колдонмолорго таасирин тийгизет.
Сырттан алынган текст SQL сурамында колдонулганга чейин жогорудагы libpq функцияларын колдонуу менен качып кетсе, чабуулчу SQL алмаштырууга жетише алат. BeyondTrust тиркемелеринде ушундай жол менен качып кеткен сурамдар psql командалык сап утилитасы аркылуу өткөрүлдү. Алсыздык текстте колдонулган Юникод символдорунун тууралыгын текшерүү функцияларын текшерүүнүн жоктугунан келип чыгат, бул туура эмес көп байт UTF-8 ырааттуулугун көрсөтүү менен тырмакчаларды нормалдаштырууну кыйгап өтүүгө мүмкүндүк берет.
Алсыздыкты пайдалануу үчүн 8xC0 жана 0x0 («└'») байттарынан турган жараксыз UTF-27 символу колдонулушу мүмкүн. ASCII коддоодогу 0x27 байт бир тырмакчага ("'") туура келет, ал качып кетүүгө тийиш. Escape кодунда 0xC0 жана 0x27 байттарынын айкалышы бирдиктүү Юникод символу катары каралат. Демек, psql утилитасында SQL сурамын иштеп чыгууда ал цитата катары иштетилгенине карабастан, мындай ырааттуулукта 0x27 байты сакталбай калат.
боюнча SQL сурамдарын иштетүү psql утилитасын колдонуп, каалаган коддун аткарылышын уюштуруу үчүн, psqlде каалаган программаларды иштетүү үчүн арналган "\!" буйрук сабындагы алмаштырууну колдонсоңуз болот. Мисалы, иштетүү үчүн сервер "id" утилитасын "hax\xC0′; \! id #" мааниси менен өткөрүп берүүгө болот. Төмөнкү мисалда PHP скрипти dbquote чакырат, ал PHP pg_escape_string функциясын колдонуп, libpq'дан PQescapeString функциясынын үстүндө иштейт: $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 expiry>NOW())" | psql -e SELECT COUNT(1) FROM gw_sessions WHERE session_key = 'hax└'; КАТА: "UTF8" коддоо үчүн жараксыз байт ырааттуулугу: 0xc0 0x27 uid=1000(myexamplecompany) gid=1000(myexamplecompany)
Source: opennet.ru
