A PostgreSQL frissítéseket adott ki egy biztonsági hibára, amely lehetővé teszi, hogy egy REPLICATION attribútummal rendelkező fiók tetszőleges kódot futtasson azon az operációs rendszerszinten, amelyen az adatbázis szerver fut.
A hibát CVE-2026-6471 azonosítóval tartják nyilván (CVSS pontszám: 7,2), és 2014 óta jelen van, amióta a logikai dekódolás megjelent a PostgreSQL 9.4-ben. A PostgreSQL 18.6, 17.11, 16.15, 15.19 és 14.24 előtti verziók érintettek.
A kihasználáshoz REPLICATION attribútummal rendelkező fiókra és wal_level = logical beállítással futó szerverre van szükség. Biztonsági mentő eszközök, standby szerverek, change data capture (CDC) pipeline-ok és monitorozó rendszerek gyakran rendelkeznek ezzel az attribútummal.
A javítást augusztus 13-án adták ki. Egy új szerverparamétert vezet be, az output_plugin_libraries-t, amely felsorolja, hogy mely library-k tölthetők be logikai dekódolási output plugin-ként. Alapértelmezett értéke: „pgoutput, test_decoding”.
Azok a telepítések, amelyek más output plugin-t használnak – köztük a wal2json-t és a decoderbufs-t – a frissítés után nem tudnak logikai dekódolást használni, amíg egy adminisztrátor fel nem veszi a megfelelő library-t ebbe a listába, és újra nem tölti a szerver konfigurációját.
„Korábban egy replikációs felhasználó bármely betölthető library-t kiválaszthatta logikai dekódoláshoz, ami különféle kihasználási lehetőségeket nyitott meg. Azért, hogy ezt le lehessen korlátozni anélkül, hogy a korábban működő beállításokat tönkretennénk, bevezetünk egy engedélyezett output plugin-eket tartalmazó listát” – közölte a PostgreSQL Global Development Group a 18.6 kiadási megjegyzéseiben.
A PostgreSQL projekt Vladimir Tokarevnek és Yu Kunpengnek tulajdonítja a probléma bejelentését.
Tokarev részletesen ismertette a hibát a Cyera Research adatbiztonsági cég számára írt, szeptember 1-jei elemzésében, amely PostGREShell néven hivatkozik a sebezhetőségre.
A Cyera szerint a CREATE_REPLICATION_SLOT parancsban megadott plugin név közvetlenül ahhoz a függvényhez kerül, amely betölti a library-t.
A PostgreSQL meglévő korlátozása a plugin útvonalakra – amely a nem szuperfelhasználókat egyetlen, adminisztrátor által felügyelt könyvtárra szorítja – a replikációs útvonalon soha nem érvényesül. A replikációs protokoll parszere szinte bármilyen karaktert elfogad a dupla idézőjelek közé tett plugin névben, beleértve az elérési út elválasztókat és a ../ bejárást, így a loader pontosan azt a teljes fájlrendszerbeli elérési utat kapja, amit a támadó megad.
Windows alatt a szerver SMB-n keresztül felold egy hálózati elérési utat, és a támadó által vezérelt gépről tölti le a library-t, anélkül hogy bármit írna a célrendszerre – közölte a Cyera.
Linuxon és macOS-en ugyanezhez NFS automountolást kell engedélyezni. Más környezetekben a támadónak szüksége van valamilyen meglévő lehetőségre, amellyel fájlt írhat a szerver lemezére. Az így betöltött kód az adatbázis backend folyamatán belül fut, a postgres operációs rendszer felhasználó jogosultságaival.
A Cyera teszt pluginje ezután közvetlenül módosította a szerepkatalógust, és a replikációs fiókból PostgreSQL szuperfelhasználót csinált. Emellett három olyan perzisztencia-mechanizmust is beállított, amelyek egy szerver újraindítása után is megmaradnak.
A Cyera a REPLICATION attribútumot alacsony jogosultságú mentési hitelesítő adatnak tekinti, a PostgreSQL viszont a hibát a Privileges Required mezőnél High értékkel pontozta, amit a SUSE saját értékelése is átvett.
A PostgreSQL elutasította, hogy a meglévő LOAD-korlátozást a replikációs útvonalra is kiterjessze.
„A REPLICATION felhasználókra korábban nem vonatkoztak korlátozások az output plugin útvonalakra, ezért a logikai dekódolás során meg tudták kerülni a LOAD idejű védelmeket. Sajnos, ha most vezetnénk be a szokásos LOAD-korlátozásokat, az utólag minden harmadik féltől származó output plugint arra kényszerítene, hogy a $libdir/plugins könyvtár alá telepítsék” – írta Jacob Champion, a javítás szerzője a commit üzenetében.
A sikertelen betöltések a szerver naplójában így jelennek meg: ERROR: library "..." may not be used as an output plugin, a hint pedig megnevezi a vonatkozó beállítást, a paraméter dokumentációja szerint.
Az üzemeltetőknek a következő lépéseket javasolják:
- Futtassák a SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL; lekérdezést frissítés előtt, hogy azonosítsák a használt output plugineket. Itt csak azok a pluginek jelennek meg, amelyeket korábban legalább egyszer sikeresen használtak.
- Frissítsenek 18.6, 17.11, 16.15, 15.19 vagy 14.24 verzióra, vagy a megfelelő disztribúciós csomagra.
- Vegyenek fel minden nem alapértelmezett plugint az output_plugin_libraries beállításba, majd töltsék újra a konfigurációt pg_ctl reload paranccsal vagy a SELECT pg_reload_conf() hívással. Újraindításra nincs szükség.
- Új cluster létrehozásakor állítsák be az új cluster output_plugin_libraries értékét, még a pg_upgrade --check futtatása előtt, ha 17-es vagy újabb verzióról migrálnak, mert az ellenőrzés meghiúsul, ha a lista nem engedélyezi a régi cluster slot plugineit.
A javított csomagok elérhetők az Amazon RDS-en mind az öt ághoz, valamint Debian, a SUSE és Ubuntu tárolóiból is.
A PostgreSQL figyelmeztetése a 14–18-as, támogatott ágakat fedi le, a korábbi verziókkal nem foglalkozik. A PostgreSQL 14 2026. november 12-ig kap javításokat, a projekt release bejelentése szerint.
Az upstream javítás „további konfigurációs módosításokat igényel, ha bizonyos extensionöket használnak” – figyelmeztet a Debian közleménye, név szerint említve a wal2json és a decoderbufs csomagokat.
Ubuntu USN-8653-1 közleménye, amely augusztus 20-án hozta a javítást a 22.04, 24.04 és 26.04 LTS kiadásokhoz, nem említi a paramétert, és csak annyit ír az adminisztrátoroknak, hogy a frissítés után indítsák újra a PostgreSQL-t.
Szeptember 4-én a wal2json projekt már frissítette a dokumentációját, és arra kérte a felhasználókat, hogy vegyék fel a plugint az output_plugin_libraries listába, a CVE-re hivatkozva.
Egy rés még mindig nyitva maradt a javításban. A pg_createsubscriber a pgoutput pluginnal hoz létre replication slotokat anélkül, hogy ellenőrizné az új paramétert, ezért a --dry-run sikerrel lefut, a tényleges átalakítás viszont meghiúsul.
„A pg_createsubscriber parancs a ‘pgoutput’ pluginnal hoz létre replication slotokat anélkül, hogy ellenőrizné a GUC értékét. Ha a plugin neve nincs megadva a paraméterben, a --dry-run mód átmegy, de a tényleges átalakítás megbukik. Ez a felhasználók számára nagyon meglepő, és el kell kerülni” – írta a Fujitsu munkatársa, Hayato Kuroda a pgsql-hackers levelezőlistára küldött üzenetében.
Szeptember 4-én a javítócsomag még felülvizsgálat alatt állt, és nem került be a kódba. A CVE-2026-6471 ekkor még nem szerepelt a CISA Known Exploited Vulnerabilities (KEV) katalógusában.
A The Hacker News ugyanezen a napon nem talált hozzá proof-of-concept kódot nyilvános tárolókban.
Amíg a frissítést nem tudják telepíteni, a Cyera szerint csökkenthető a kitettség, ha elveszik a REPLICATION attribútumot azoktól a fiókoktól, amelyeknek nincs rá szükségük, a pg_hba.conf replikációs bejegyzéseit ismert címekre korlátozzák, tiltják az adatbázis szerverekről kifelé menő SMB (445-ös port) és NFS (2049-es port) forgalmat, valamint letiltják az autofs szolgáltatást, ahol nincs rá szükség.

