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.

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áznam | Co dovoloval | CVSS 3.1 |
|---|---|---|
| CVE-2026-110181 | číst původní data přes funkce se SQL tělem podle normy | 6,5 |
| CVE-2026-105620 | obejít maskování poddotazem v pravidle | 6,5 |
| CVE-2026-105617 | vidět nemaskovaná data z dříve připraveného plánu | 5,7 |
| CVE-2026-105618 | číst data děděné tabulky přes rodiče | 5,7 |
| CVE-2026-105616 | přečíst tajnou sůl v systémovém katalogu | 5,7 |
| CVE-2026-105619 | obejít pravidla pohledem s právy volajícího | 4,8 |
| CVE-2026-110183 | číst staré hodnoty ze statistik po statickém maskování | 4,3 |
| CVE-2026-110182 | př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_stats | 3,5 |
| CVE-2026-105612 | zapisovat navzdory omezení jen pro čtení | 3,5 |
| CVE-2026-105614 | vyčerpat paměť serveru obrázkovou funkcí | 4,7 |
| CVE-2026-105613 | vyč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
- PostgreSQL Anonymizer 3.3: Major Security Update – oznámení Dalibo, 27. října 2026
- Poznámky k vydání 3.3.0, 3.3.1 a 3.3.2 – repozitář projektu na GitLabu
- Záznamy CVE-2026-105612 až CVE-2026-110183 – registr CVE, vydavatel PostgreSQL, 28. října 2026
- Upgrade to version 3.3 and further versions – dokumentace rozšíření