基于Safari浏览器漏洞的XSS攻击
字数 1167 2025-08-27 12:33:42
基于Safari浏览器漏洞的XSS攻击分析与防御
漏洞概述
本漏洞利用Safari浏览器对URL协议处理的异常行为,通过构造特殊URL绕过黑名单过滤,实现跨站脚本攻击(XSS)。该漏洞最初发现于2018年,涉及Safari浏览器对空协议和换行符的特殊处理方式。
漏洞发现背景
研究人员在分析某公司资产时发现一个用于移动应用重定向的HTML文件,其中包含以下关键代码:
var parseQueryString = function parse(queryString) {
// 解析逻辑
return params;
}
var search = window.location.search;
var query = parseQueryString(search);
var redirect = query.redirect;
redirect = decodeURIComponent(redirect);
var parser = document.createElement('a');
parser.href = redirect;
var protocol = parser.protocol.toLowerCase();
if (['javascript:', 'vbscript:', 'http:', 'https:', 'data:'].indexOf(protocol) < 0) {
window.top.location = redirect;
}
漏洞原理分析
原始漏洞利用
-
黑名单缺陷:代码使用协议黑名单而非白名单,仅过滤了
javascript:,vbscript:,http:,https:,data:等协议 -
Safari特殊行为:Safari对以下URL处理异常:
javascript://%0aalert(document.domain)//在JavaScript中是单行注释符%0a是URL编码的换行符- Safari错误地将此URL解析为具有空协议(
:),从而绕过黑名单检查
-
执行流程:
- 当协议不在黑名单中时,执行
window.top.location = redirect - Safari错误地将看似注释的JavaScript代码作为有效代码执行
- 当协议不在黑名单中时,执行
漏洞演变过程
-
初始修复:供应商修复了原始漏洞,但破坏了部分功能
-
新漏洞引入:修复后转为服务器端处理,但仍存在类似的XSS漏洞
-
最终修复:扩展黑名单包含空协议
:和空格:if ([ 'javascript:', 'vbscript:', 'http:', 'https:', 'data:', 'ftp:', ':', ' ' ].indexOf(protocol) < 0) { window.top.location = validate("[injection]"); }
漏洞利用步骤
-
构造恶意URL:
example.com/redirect.html?redirect=javascript://%0aalert(document.domain) -
受害者访问该URL时:
- Safari错误解析URL协议
- 绕过黑名单检查
- 执行任意JavaScript代码
防御建议
-
使用白名单而非黑名单:
- 明确允许的协议列表比禁止的协议列表更安全
- 例如只允许
http:,https:和特定的应用协议
-
严格验证重定向URL:
// 白名单示例 const ALLOWED_PROTOCOLS = ['http:', 'https:', 'customapp:']; if (ALLOWED_PROTOCOLS.includes(parser.protocol.toLowerCase())) { // 允许重定向 } -
编码输出:
- 对重定向URL进行HTML编码后再使用
-
使用Content Security Policy (CSP):
- 设置适当的CSP头限制脚本执行
-
避免直接使用location重定向:
- 使用更安全的API或进行额外验证
经验教训
-
黑名单的局限性:
- 黑名单容易被绕过,特别是依赖浏览器特定行为时
- 让某物看起来不像某物(黑名单)比让某物看起来像某物(白名单)更难
-
浏览器差异:
- 不同浏览器对URL和协议解析存在差异
- 需在所有目标浏览器中测试安全控制
-
补丁验证:
- 修复漏洞后需全面测试,避免引入新问题
- 监控补丁可能暴露的新攻击面
-
安全记录:
- 保持详细的研究记录有助于后续分析
- 过去失败的尝试可能在未来成为突破口
结论
此案例展示了即使是简单的重定向功能,如果实现不当也可能导致严重的安全问题。关键在于:
- 避免使用黑名单
- 理解浏览器特定行为
- 全面验证用户输入
- 采用深度防御策略
Safari的协议解析异常行为虽然已被部分修复,但类似的浏览器特性差异仍是Web安全领域需要持续关注的问题。