Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Bezpečnost

PostgreSQL Anonymizer 3.3 zavřel osm cest, kterými maskovaný účet viděl původní data

Rozšíření PostgreSQL Anonymizer skrývá osobní údaje v databázi před uživateli, kteří je nemají vidět. Verze 3.3 z 27. října opravuje dvanáct zranitelností: osm z nich dovolovalo maskovanému účtu dostat se k původním hodnotám, devátá vydala tajnou sůl, jedna dovolila zápis a dvě mohou shodit celý databázový cluster. Dalibo radí všem upgradovat a k tomu vyměnit tajnou sůl.

· 20 zhlédnutí

Okno klienta pgaccess se seznamem tabulek a vedle něj výpis řádků testovací tabulky na ploše se zelenou tapetou
Grafický klient pgaccess se seznamem tabulek a výpisem řádků v databázi PostgreSQL. Foto: Nevit Dilmen, Wikimedia Commons (CC BY-SA 3.0)

Rozšíření PostgreSQL Anonymizer má v databázi jediný úkol: schovat osobní a citlivé údaje před uživateli, kteří je nemají vidět. Vývojář dostane přístup do produkční kopie, ale místo jmen a e-mailů uvidí náhražky. Verze 3.3, kterou francouzská firma Dalibo vydala 27. října, opravuje dvanáct zranitelností – a osm z nich je přesně to, čemu má rozšíření bránit. Maskovaný účet se jimi dostal k původním hodnotám.

Co rozšíření dělá

Anonymizer nabízí šest způsobů maskování: dynamické nad živou databází, statické přepsání sloupců, maskovanou logickou replikaci, maskovaný výstup zálohy, maskovací pohledy a maskování přes cizí tabulky. Pravidlo se připisuje ke sloupci a říká, čím se jeho obsah nahradí – náhodnou hodnotou, vymyšleným jménem, pseudonymem, zamícháním řádků nebo zhrubnutím na kategorii.

Instaluje se jako balíček pro Debian a RPM, role pro Ansible nebo obraz Dockeru. Dalibo u něj jmenuje i provozovatele databází jako služby, kde rozšíření běží: Google Cloud SQL, Microsoft Azure Database, IBM Cloud, Crunchy Bridge, Neon, Alibaba Cloud a Yandex. Z odnoží PostgreSQL pak EDB Advanced Postgres, Greenplum a Yugabyte.

Dvanáct záznamů, osm cest k datům

Čísla CVE přidělil projekt PostgreSQL, který je pro své okolí uznanou autoritou pro jejich vydávání, a registr je zveřejnil 28. října. Každý záznam uvádí jako opravenou verzi 3.3.0 a jako dotčené všechno starší.

ZáznamCo dovolovalCVSS 3.1
CVE-2026-110181číst původní data přes funkce se SQL tělem podle normy6,5
CVE-2026-105620obejít maskování poddotazem v pravidle6,5
CVE-2026-105617vidět nemaskovaná data z dříve připraveného plánu5,7
CVE-2026-105618číst data děděné tabulky přes rodiče5,7
CVE-2026-105616přečíst tajnou sůl v systémovém katalogu5,7
CVE-2026-105619obejít pravidla pohledem s právy volajícího4,8
CVE-2026-110183číst staré hodnoty ze statistik po statickém maskování4,3
CVE-2026-110182přečíst krátkou hodnotu celou i přes částečné maskování4,3
CVE-2026-105615číst část dat z histogramů v pg_stats3,5
CVE-2026-105612zapisovat navzdory omezení jen pro čtení3,5
CVE-2026-105614vyčerpat paměť serveru obrázkovou funkcí4,7
CVE-2026-105613vyčerpat paměť serveru rozsahovou funkcí4,7

Osm záznamů z tabulky vede k datům, která měl maskovaný účet vidět nahrazená, a devátý vydá tajnou sůl, se kterou jdou pseudonymy zpětně odkrýt. Jeden záznam dovolil zápis tam, kde měl mít účet jen čtení. Zbylé dva jsou odepření služby: podle popisu stačí u rozmazávací funkce ohlásit obrázek s obrovskými rozměry, server si na něj vyhradí paměť a jádro proces ukončí. S ním jde do obnovy po pádu celý databázový cluster, tedy i ostatní databáze, které v něm běží.

Osm nálezů připisuje seznam změn Ilyovi Staroverovovi, dva Alexandru Kukushkinovi, u zbývajících dvou nálezce neuvádí. Dalibo všech dvanáct vypsalo v oznámení i v poznámkách k vydání, s čísly CVE a s poděkováním oběma.

Dvě chyby stály v dokumentaci

Dva ze záznamů vznikly z postupu, který rozšíření samo doporučovalo. Tajnou sůl pro pseudonymizaci radila dokumentace ukládat přes ALTER DATABASE nebo ALTER ROLE. Příkaz SHOW hodnotu běžnému uživateli nevydá, jenže takhle nastavená zůstala čitelná v katalozích pg_db_role_setting a pg_roles.

Podobně u děděných a rozdělených tabulek: dokumentace radila psát pravidla na jednotlivé oddíly. Přímý dotaz na oddíl maskování respektoval, dotaz přes rodičovskou tabulku ne.

Oznámení mluví o kritických chybách, registr ne

Tisková zpráva Dalibo popisuje opravené chyby jako dvanáct kritických zranitelností a dodává, že za určitých okolností dovolovaly získat práva superuživatele. Záznamy v registru CVE o žádné takové cestě nemluví a jejich známky CVSS 3.1 jdou od 3,5 do 6,5, tedy nanejvýš střední závažnost. Rozdíl mezi oběma popisy Dalibo nevysvětluje; eskalaci práv řešila dvě CVE z vydání 3.2.0 v září.

Upgrade není ALTER EXTENSION

Aktualizace rozšíření stojí víc práce, než by člověk čekal. Dokumentace říká, že příkaz ALTER EXTENSION … UPDATE podporovaný není a rozšíření se po každé nové verzi musí zahodit a vytvořit znovu.

Verze 3.3 k tomu přidává tři omezení, která můžou rozbít dosavadní nasazení. Poddotazy v maskovacích pravidlech byly dřív nezdokumentovaně povolené, teď jsou zakázané; složitější pravidlo se má napsat jako vlastní funkce. Vkládání těla funkce do dotazu je u průhledného dynamického maskování vypnuté, což podle dokumentace zhorší plány, které na něm stojí. A maskované role nesmějí spouštět funkce se SQL tělem podle normy – PostgreSQL takovou funkci rozebírá už při jejím vytvoření, kdežto Anonymizer ji kontroloval až při spuštění, takže mu unikala. Týká se to i funkcí z rozšíření, která se s databází dodávají, třeba citext nebo earthdistance.

Dalibo kromě toho důrazně radí vyměnit hodnotu anon.salt. Kdo se k soli dostal, může podle dokumentace hrubou silou zpětně odkrýt pseudonymy, které s ní vznikly – a ty v databázi zůstávají i po opravě.

Tři značky za dva dny

Oprava má v repozitáři tři značky: 3.3.0 z 27. října a 3.3.1 a 3.3.2, obě z 28. října. Obě novější mění jen jedno – znovu pouštějí sestavení pro ARM, které v CI napoprvé neproběhlo. Zdrojový kód je ve všech třech stejný, ale kdo bere hotové balíčky pro arm64, najde je až u 3.3.2.

Je to čtvrté vydání s bezpečnostní opravou od června. V červnu přišla verze 3.1.2 s opravou hrubé síly na hashovací funkce (CVE-2026-13455), v září 3.2.0 se třemi záznamy a o tři týdny později 3.2.3, která u dynamického maskování začala hledat omezené funkce uvnitř poddotazů. Poddotazy tedy přišly na řadu podruhé a tentokrát v maskovacích pravidlech nesmějí být vůbec.

Zdroje

Bezpečnost

CVE PostgreSQL ochrana osobních údajů

← zpět na výpis