IPBUF安全漏洞报告
English
CVE-2025-13083 CVSS 3.7 低危

CVE-2025-13083 Drupal核心Web浏览器缓存敏感信息泄露漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-13083
漏洞类型
敏感信息泄露
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Drupal Core

相关标签

敏感信息泄露Web缓存Drupal Core访问控制会话劫持CVE-2025-13083

漏洞概述

CVE-2025-13083是Drupal核心中的一个中危安全漏洞,源于Web浏览器缓存机制包含敏感信息。该漏洞允许攻击者利用配置错误的访问控制安全级别,通过访问用户浏览器缓存获取存储在其中的敏感数据。Drupal是一个流行的开源内容管理系统(CMS),被全球数百万网站使用。此漏洞影响多个版本的Drupal核心,包括7.x、8.x、10.x和11.x系列。攻击者无需认证即可利用此漏洞,但需要诱导用户访问恶意链接或利用中间人攻击来获取缓存数据。虽然CVSS评分仅为3.7(低危),但如果用户访问敏感管理页面后未正确退出登录,攻击者可能通过缓存数据获取会话令牌或其他敏感信息,从而可能导致会话劫持或权限提升攻击。

技术细节

该漏洞的根本原因在于Drupal核心在处理包含敏感信息的页面时,未正确配置HTTP缓存控制头。当用户访问Drupal站点的敏感页面(如用户资料、管理面板或包含个人数据的页面)后,浏览器会将这些页面内容缓存到本地。攻击者可以通过以下方式利用此漏洞:1) 诱导用户访问恶意链接,该链接指向包含敏感信息的Drupal页面;2) 利用中间人攻击拦截用户流量;3) 访问用户设备的攻击者直接读取浏览器缓存。Drupal核心在受影响版本中未对敏感页面设置适当的Cache-Control、Pragma或Expires头,导致浏览器错误地缓存了包含会话标识符、用户偏好设置或其他敏感数据的内容。攻击者获取缓存数据后,可能提取其中的会话令牌或敏感信息,用于后续的会话劫持攻击。漏洞的利用复杂度较低(AC:H表示高攻击复杂度),因为攻击者需要等待用户访问特定页面并依赖浏览器的缓存行为。

攻击链分析

STEP 1
步骤1
攻击者识别目标Drupal站点并确认其版本是否在受影响范围内(7.0-7.103, 8.0.0-10.4.8, 10.5.0-10.5.5, 11.0.0-11.1.8, 11.2.0-11.2.7)
STEP 2
步骤2
攻击者诱导已登录用户访问Drupal站点中的敏感页面(如用户资料页、管理面板等)
STEP 3
步骤3
用户浏览器错误地缓存了包含会话标识符和敏感信息的页面内容
STEP 4
步骤4
攻击者通过中间人攻击、恶意链接或物理访问用户设备等方式获取浏览器缓存数据
STEP 5
步骤5
攻击者从缓存数据中提取会话令牌、用户凭证或其他敏感信息
STEP 6
步骤6
攻击者利用窃取的会话信息劫持用户会话,执行未授权操作或获取更高权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-13083 PoC - Drupal Core Web Browser Cache Information Disclosure # This PoC demonstrates checking if a Drupal site is vulnerable to cache-related information disclosure def check_drupal_cache_headers(url): """ Check if Drupal site properly configures cache headers for sensitive pages """ vulnerable_endpoints = [ '/user/', '/user/1', '/admin/', '/node/add', '/admin/config/people/accounts' ] results = [] for endpoint in vulnerable_endpoints: target_url = url.rstrip('/') + endpoint try: response = requests.get(target_url, timeout=10) # Check for insecure cache headers cache_control = response.headers.get('Cache-Control', '') pragma = response.headers.get('Pragma', '') is_vulnerable = False reasons = [] # If no Cache-Control header or contains 'public', might be vulnerable if not cache_control or 'public' in cache_control.lower(): is_vulnerable = True reasons.append('Missing or insecure Cache-Control header') # If Pragma: no-cache is missing if 'no-cache' not in pragma.lower() and 'no-store' not in cache_control.lower(): is_vulnerable = True reasons.append('Missing Pragma: no-cache or Cache-Control: no-store') results.append({ 'endpoint': endpoint, 'status_code': response.status_code, 'vulnerable': is_vulnerable, 'cache_control': cache_control, 'pragma': pragma, 'reasons': reasons }) except requests.RequestException as e: results.append({ 'endpoint': endpoint, 'error': str(e), 'vulnerable': None }) return results def main(): target = input('Enter Drupal site URL (e.g., https://example.com): ') results = check_drupal_cache_headers(target) print('\n=== CVE-2025-13083 Cache Headers Check Results ===\n') for result in results: print(f"Endpoint: {result['endpoint']}") if 'error' in result: print(f" Error: {result['error']}") else: print(f" Status: {result['status_code']}") print(f" Vulnerable: {result['vulnerable']}") print(f" Cache-Control: {result.get('cache_control', 'N/A')}") print(f" Pragma: {result.get('pragma', 'N/A')}") if result.get('reasons'): print(f" Issues: {', '.join(result['reasons'])}") print() if __name__ == '__main__': main()

影响范围

Drupal Core 8.0.0 - 10.4.8
Drupal Core 10.5.0 - 10.5.5
Drupal Core 11.0.0 - 11.1.8
Drupal Core 11.2.0 - 11.2.7
Drupal Core 7.0 - 7.102

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器(如Nginx/Apache)配置中为Drupal敏感路径添加严格的缓存控制头;2) 禁用Drupal核心的页面缓存功能;3) 强制用户会话使用安全cookie设置(HttpOnly、Secure、SameSite);4) 定期清除用户浏览器缓存和会话数据;5) 监控和限制可疑的缓存访问请求。

参考链接

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