CVE-2026-111439: pg_read_binary_file_blocks 缺少初始用户权限校验,普通用户可读取 relation 文件块
在 openGauss-server的 src/common/backend/utils/adt/genfile.cpp 模块中,内置函数 pgreadbinaryfileblocks() 存在权限校验逻辑缺陷。该函数在入口处仅校验了起始块号(startBlockNum)和块数量(blockCount)的范围,随后直接调用底层文件读取例程 ReadBinaryFileBlocksFirstCall()。该底层例程仅执行了路径规范化检查以及针对 .. 路径遍历和数据目录边界的基本检查,缺失了对调用者数据库权限(如 SELECT 权限)的校验。此外,辅助函数 isrowdatafile() 也仅用于识别文件形态,未包含权限检查。因此,任何拥有普通数据库连接权限的用户,只要能够通过 pgrelationfilepath() 等函数获取到目标表的底层关系文件路径(例如压缩数据的 compress 文件路径),即可无需具备该表的 SELECT 权限,直接读取表数据的二进制块。 此漏洞影响此前3.0.0到6.0.0间的所有版本及补丁版,并在7.0.0-LTS版本修复。修复patch详见:https://gitcode.com/opengauss/openGauss-server/pull/9374。
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
openGauss-serverto a version that resolves this vulnerability.Fixed in 7.0.0-LTSPatch 9374
Event History
Frequently Asked Questions
Who can exploit this issue?
A user with ordinary database connection access can exploit it if they can obtain the underlying relation-file path for a target table, such as via pg_relation_filepath(). The user does not need SELECT permission on that table.
What data can an attacker access?
The attacker can read binary blocks from relation files, including files associated with compressed data such as paths ending in _compress. The issue exposes table data through file-block reads rather than normal SQL permission checks.
Which versions are affected and which version contains the fix?
All releases and patch releases from 3.0.0 through 6.0.0 are affected. The issue is fixed in 7.0.0-LTS.
How can I determine whether a user may have exploited the issue?
Review use of pg_read_binary_file_blocks() by non-privileged users, especially calls targeting relation-file paths obtained through pg_relation_filepath() or compressed-table _compress paths. The provided information does not identify a specific audit-log event or indicator of compromise.