概述
Aurelia是一个开源的现代JavaScript模块工具箱,用于Web和移动应用程序开发。它也被称为“下一代框架”,自推出以来一直受到广泛认可,已被数百万开发人员和团队使用,每月下载量超过1.17 亿次。但是,仅依靠Aurelia框架中默认的HTML过滤器清除恶意输入,可能会使您容易受到XSS跨站脚本攻击。GoSecure研究人员已将该漏洞报告给Aurelia技术团队。
技术分析
使用Aurelia可以将HTML属性或元素内容数据绑定到JavaScript表达式。例如,用户可以使用以下代码将元素的“innerHTML”绑定到Aurelia的HTML过滤器:
<div innerhtml.bind="htmlProperty | sanitizeHTML">div>
HTML过滤器代码如下所示:
Import { getLogger } from 'aurelia-logging';
const SCRIPT_REGEX = /)<[^<]*)*<\/script>/gi;
let needsToWarn = true;
/**
* Default Html Sanitizer to prevent script injection.
*/
export class HTMLSanitizer {
/**
* Sanitizes the provided input.
* @param input The input to be sanitized.
*/
sanitize(input) {
if (needsToWarn) {
needsToWarn = false;
getLogger('html-sanitizer')
.warn('CAUTION: The default HTMLSanitizer does NOT provide security against a wide variety of sophisticated XSS attacks,
and should not be relied on for sanitizing input from unknown sources.
Please see https://aurelia.io/docs/binding/basics#element-content for instructions on how to use a secure solution like DOMPurify or sanitize-html.');
}
return input.replace(SCRIPT_REGEX, '');
}
}
默认情况下,Aurelia的HTML过滤器仅尝试过滤SCRIPT元素,这使远程攻击者可以更轻松地通过其它元素属性中的JavaScript代码进行XSS攻击。攻击者还可能利用SCRIPT字符串处理方式中的漏洞。
例如,以下这个简单的XSS有效载荷将不会被过滤:
ipt>alert('XSS')</scrscript>ipt>
<img src="x" onerror="alert('XSS')"/>
总结
仅依靠默认过滤器来过滤恶意JavaScript输入的用户容易受到XSS跨站脚本攻击。该漏洞影响Aurelia Framework 1.x存储库的所有发行版本,最终可能造成会话劫持和敏感信息泄漏等后果。