PostGREShell 🛢️
一个针对 CVE-2026-6471 的防御性、非破坏性漏洞检测工具
CVE-2026-6471 是一个涉及 逻辑解码(logical decoding) 子系统的 PostgreSQL 授权漏洞。
该漏洞可能允许拥有 REPLICATION 权限但缺乏超级用户权限的 PostgreSQL 角色,诱使 PostgreSQL 服务器加载 PostgreSQL 操作系统账户可访问的攻击者控制的库。
成功利用可能导致 以 PostgreSQL 服务器进程的权限执行任意代码。
本仓库提供了一个 安全检测 PoC,专为授权的安全评估而设计。
⚠️ 检测工具不会加载任何恶意共享库,也不会执行任何操作系统命令。
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
在易受攻击的条件下,已经拥有具备所需复制能力的 PostgreSQL 账户的攻击者,可能跨越数据库到操作系统之间的权限边界。
┌──────────────────────┐
│ PostgreSQL 用户 │
│ REPLICATION = YES │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 逻辑解码(Logical │
│ Decoding) │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 缺少授权验证 │
│ (Missing Authorization)│
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 库加载(Library │
│ Loading) │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ PostgreSQL 操作系统用户│
└──────────────────────┘
实际影响在很大程度上取决于 PostgreSQL 操作系统账户的权限和文件系统权限。
PostgreSQL 项目的安全公告确定了以下受影响的分支:
升级到您的 PostgreSQL 分支可用的最新安全版本。
本项目有意仅执行 非破坏性检查。
检测工具应验证:
REPLICATION 权限SELECT
version() AS postgres_version,
current_user AS current_user,
rolsuper AS is_superuser,
rolreplication AS has_replication
FROM pg_roles
WHERE rolname = current_user;
示例输出:
postgres_version : PostgreSQL 17.x
current_user : security_audit
is_superuser : f
has_replication : t
易受攻击的版本加上 REPLICATION 权限应被视为需要修复。
PoC 遵循以下工作流程:
┌───────────────┐
│ PostgreSQL │
│ 连接 │
└───────┬───────┘
│
▼
┌─────────────────┐
│ 获取服务器版本 │
│ (Get Server │
│ Version) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 检查当前角色 │
│ (Check Current │
│ Role) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 检查 REPLICATION │
│ 权限 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 与已修复版本比较 │
│ (Compare Against │
│ Fixed Releases) │
└────────┬────────┘
│
┌───────┴────────┐
▼ ▼
可能易受攻击 不受影响
(Potentially (Not
Vulnerable) Affected)
❌ 加载攻击者控制的 .so 文件
❌ 执行任意 SQL 载荷
❌ 执行操作系统命令
❌ 生成反向 Shell
❌ 修改 PostgreSQL 配置
❌ 修改文件系统内容
❌ 创建持久化
❌ 利用生产系统
这使得该检测工具适用于受控的漏洞评估和资产清点工作流程。
克隆仓库:
git clone https://github.com/<YOUR-USERNAME>/CVE-2026-6471.git
cd CVE-2026-6471
安装所需的 Python 依赖:
python3 -m pip install psycopg2-binary
运行检测工具:
python3 CVE-2026-6471.py
示例:
╔════════════════════════════════════════════════════╗
║ CVE-2026-6471 SAFE CHECK ║
║ PostgreSQL Logical Decoding Audit ║
╚════════════════════════════════════════════════════╝
[+] 正在连接 PostgreSQL...
[+] 服务器版本 : PostgreSQL 17.x
[+] 当前角色 : security_audit
[+] 超级用户 : False
[+] 复制权限 : True
[!] PostgreSQL 版本需要安全更新
[!] 检测到 REPLICATION 权限
[!] 可能易受攻击
[!] 请将 PostgreSQL 升级到已修复版本。
管理员可以使用以下命令检查具有复制权限的角色:
SELECT
rolname,
rolsuper,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
审查返回的每个账户。
如果某个账户不需要复制权限,请根据您的运维需求移除不必要的权限。
安装相应的已修复版本:
14.24+
15.19+
16.15+
17.11+
18.6+
建议优先使用最新的 PostgreSQL 安全版本,而不是停留在最低修复版本。
识别具有复制能力的账户:
SELECT
rolname,
rolreplication
FROM pg_roles
WHERE rolreplication = true;
移除不必要的复制权限:
ALTER ROLE <role_name> NOREPLICATION;
仅在确认该角色不用于合法的复制基础设施后,才执行权限变更。
特别关注:
SUPERUSER
REPLICATION
LOGIN
CREATEDB
CREATEROLE
尽可能使用最小权限原则。
一个简化的概念实现:
if postgres_version_is_affected:
if role_has_replication:
if not role_is_superuser:
report("POTENTIALLY VULNERABLE")
else:
report("AFFECTED VERSION - SUPERUSER CONTEXT")
else:
report("AFFECTED VERSION - REPLICATION NOT PRESENT")
else:
report("NOT AFFECTED")
检测工具的目的是 暴露面识别,而非漏洞利用。
REPLICATION 角色。 INTERNET
│
▼
┌─────────────┐
│ 防火墙 │
└──────┬──────┘
│
▼
┌─────────────┐
│ PostgreSQL │
│ 服务器 │
└──────┬──────┘
│
┌─────────┴─────────┐
▼ ▼
最小权限原则 监控告警
(Least Privilege) (Monitoring)
│ │
▼ ▼
角色控制 SIEM / 告警
(Role Controls) (SIEM / Alerts)
限制 PostgreSQL 的网络暴露面,避免将数据库服务直接暴露给不受信任的网络。
推荐的测试设置:
┌───────────────────────────────────┐
│ 隔离实验室网络 │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ 扫描器 │──▶│ PostgreSQL │ │
│ │ 机器 │ │ 测试主机 │ │
│ └────────────┘ └────────────┘ │
│ │
│ 不包含生产系统 │
└───────────────────────────────────┘
在验证安全工具时,请使用一次性的 PostgreSQL 安装或专用的实验室环境。
本项目 严格 用于防御性安全研究、漏洞评估和授权测试。
所包含的方法论旨在识别可能易受攻击的 PostgreSQL 安装,而不会将漏洞武器化。
请勿将本项目用于您不拥有或未经明确授权评估的系统。
作者不对因使用本项目而导致的滥用、损害、数据丢失、服务中断或未经授权的访问负责。
网络安全研究 • 漏洞分析 • 防御性工具开发
研究 → 验证 → 记录 → 修复
欢迎贡献。
提交改进时:
如果本项目对您的安全研究有所帮助,请考虑给它一个 ⭐
| 属性 | 值 |
|---|
| CVE | CVE-2026-6471 |
| 产品 | PostgreSQL |
| 组件 | 逻辑解码(Logical Decoding) |
| CWE | CWE-862 — 缺少授权(Missing Authorization) |
| CVSS v3.1 | 7.2 高危(High) |
| 攻击向量 | 网络(Network) |
| 攻击复杂度 | 低(Low) |
| 所需权限 | 高(High) |
| 用户交互 | 无(None) |
| 机密性影响 | 高(High) |
| 完整性影响 | 高(High) |
| 可用性影响 | 高(High) |
| 分支 | 受影响 | 已修复 |
|---|
| PostgreSQL 14 | < 14.24 | 14.24 |
| PostgreSQL 15 | < 15.19 | 15.19 |
| PostgreSQL 16 | < 16.15 | 16.15 |
| PostgreSQL 17 | < 17.11 | 17.11 |
| PostgreSQL 18 | < 18.6 | 18.6 |
| 结果 | 含义 |
|---|
| 🟢 不受影响(NOT AFFECTED) | PostgreSQL 正在运行已修复版本 |
| 🟡 需要更新(UPDATE REQUIRED) | 版本位于受影响分支内 |
| 🟠 检测到复制权限(REPLICATION DETECTED) | 当前角色具有复制能力 |
| 🔴 可能易受攻击(POTENTIALLY VULNERABLE) | 受影响版本 + 相关权限 |
| ⚪ 访问权限不足(INSUFFICIENT ACCESS) | 扫描器无法检查所需的角色信息 |