AngularJS陷阱:Piwik PRO中隐藏的CSP绕过漏洞
任何网站组件都可能危及整个站点的安全,分析平台也不例外。为确保在portswigger.net上安全部署Piwik PRO,我们对其进行了快速审计。我重点检查了DOM XSS等客户端问题,因为引入新脚本资源最可能带来此类漏洞。
漏洞发现过程
-
初始探测
启用DOM Invader工具注入测试标记未获结果,但将标记值设为空白后,成功观测到包括document.write()
和多个innerHTML
赋值在内的全部接收器。 -
调试接口暴露
通过堆栈跟踪发现调试标志,添加该参数后出现分析调试器界面。检查发现该界面使用AngularJS框架(通过ng-app
事件识别)。 -
CSP绕过机制
AngularJS存在已知的脚本小工具可绕过内容安全策略:- 利用
ng-focus
非标准事件绕过CSP限制 - 通过
composedPath()
获取窗口对象数组 orderBy
过滤器遍历数组最终触发Array.from()
间接执行alert
- 利用
漏洞验证代码
|
|
修复方案
Piwik PRO采取以下措施:
- 收紧CSP策略,从允许整个域改为仅允许特定JS文件
- 对关键脚本使用nonce值,防止攻击者注入AngularJS资源
时间线
- 2023年3月2日 10:51 报告漏洞
- 2023年3月3日 13:09 漏洞确认
- 2023年3月7日 12:24 更新CSP部署指南
- 2023年4月28日 13:00 发布技术分析