IPBUF安全漏洞报告
English
CVE-2026-7814 CVSS 4.8 中危

CVE-2026-7814 pgAdmin4存储型XSS漏洞

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

漏洞信息

漏洞编号
CVE-2026-7814
漏洞类型
存储型XSS
CVSS评分
4.8 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
pgAdmin 4

相关标签

XSS存储型XSSpgAdminPostgreSQLCWE-79

漏洞概述

pgAdmin 4在9.15版本之前的Browser Tree和Explain Visualizer模块中存在存储型XSS漏洞。由于使用innerHTML直接渲染用户可控的PostgreSQL对象名称,攻击者可利用包含恶意脚本的表名等对象,在查看该对象的用户浏览器中执行任意JavaScript代码。官方已将该渲染方式替换为textContent进行修复。

技术细节

该漏洞的根源在于pgAdmin 4前端在处理数据库元数据时使用了不安全的DOM操作方法。具体而言,Browser Tree和Explain Visualizer模块在展示数据库、模式、表或列等对象名称时,使用了innerHTML属性将数据插入页面。innerHTML会将字符串解析为HTML,攻击者若具有创建对象的权限,可构造形如`<img src=x onerror=alert(1)>`的对象名称。当高权限用户(如管理员)导航至该对象或对其执行EXPLAIN命令时,前端会读取该名称并通过innerHTML渲染,从而触发XSS。这允许攻击者窃取敏感信息或执行未授权操作。修复方案是将innerHTML替换为textContent,确保数据作为纯文本处理。

攻击链分析

STEP 1
1. 构造恶意对象
攻击者创建包含恶意HTML/JavaScript代码的PostgreSQL对象(如表名、列名)。
STEP 2
2. 持久化存储
带有恶意载荷的对象名称被存储在PostgreSQL数据库中。
STEP 3
3. 诱导访问
受害者(通常是具有高权限的pgAdmin用户)在界面中浏览对象树或对恶意对象执行EXPLAIN分析。
STEP 4
4. 触发漏洞
pgAdmin前端使用innerHTML渲染对象名称,导致浏览器解析并执行恶意脚本。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
-- Step 1: Attacker executes SQL to create a malicious table -- The table name contains the XSS payload. CREATE TABLE "<script>alert('XSS by CVE-2026-7814');</script>" ( id INT ); -- Step 2: Wait for an Administrator or another user to browse the database -- tree or run 'EXPLAIN' on this table in pgAdmin. -- The payload will execute in their browser context due to innerHTML usage.

影响范围

pgAdmin 4 < 9.15

防御指南

临时缓解措施
建议立即将pgAdmin 4升级至9.15或更高版本。若暂无法升级,应限制低权限用户创建包含特殊字符的数据库对象,并加强管理员对异常对象名称的审查,避免在pgAdmin中直接访问来源不明的数据库对象。

参考链接