是什么让 Android 应用程序容易受到跨站点脚本 (XSS) 的攻击?

信息安全 开发 xss 移动的 安卓 爪哇
2021-09-07 14:37:35

XSS的定义

如果您在网络上搜索,有许多不同的方法来定义跨站点脚本攻击。简而言之,当恶意攻击者被允许将客户端脚本注入到成为攻击受害者的其他人查看的网站时,就会发生 XSS 漏洞。

Android 操作系统中的 XSS 错误示例

漏洞详情

通过向 Chrome for Android 发送精心设计的意图,恶意 Android 应用可以将 JavaScript: URI 注入到 Chrome 中加载的任意网页中。注入的 JavaScript 在目标网页域的上下文中工作,而不是空白域。所以它可以用于 Cookie 盗窃等。此类漏洞通常称为跨应用程序脚本。

版本

Chrome 版本:Chrome for Android v18.0.1025123 操作系统:在 Android 4.0.4(Samsung Galaxy Nexus)上确认

复制案例

附上恶意安卓应用的示例代码。

笔记

此问题最初于 2012 年 7 月 7 日报告给 security@google.com,但最近我从 Google 安全团队获悉,该问题可能未在 Chromium 错误数据库中归档。所以现在我在这里重新提交问题,这应该是报告 Chrome 错误的合法地方。

我的问题

虽然我了解什么是跨站点脚本以及跨站点脚本是如何发生的我不知道是什么因素使选择的 Android 代码容易受到这种攻击。

3个回答

具体示例不是跨站点脚本,而是跨应用脚本。借助特制的意图,Android 应用程序可以强制另一个应用程序(本例中为 Chrome)在其(Chrome 的)上下文中执行某些脚本。

这可能会滥用某些隐私和身份验证机制。如果我没有遗漏什么,这个漏洞(很久以前在 Chrome 中修复)允许恶意应用劫持与用户银行打开的网络会话并批准汇款。

这有点夸张,正常的银行网站都受到保护,不会受到此类攻击:它们需要用户确认(即重新输入密码)才能完成任何敏感操作。

Chrome 的问题在于它允许第 3 方应用程序通过 Intent Extra 模拟自己,并且没有执行足够的验证。这不是 Android 操作系统中的安全漏洞,也不是可以在统计上对您设备上的随机应用程序使用的漏洞利用,以找到未受保护的应用程序。

在大多数情况下,这是由于webview. 例如,setJavaScriptEnabled(true)WebView 的 WebSettings 上的方法应触发跨站点脚本。它取决于逻辑层,如果输入被存储,因此是持久的 XSS 或它反映。

在此处输入图像描述

早于 4.2 的 Webview 当您为其启用 javascript 时,将始终容易受到 XSS 的攻击,除非开发人员将JavascriptInterface注释添加到开发人员希望 JavaScript 可用的任何方法。对于运行 Android 4.2 的应用程序 - 所有使用 JavascriptInterface 注释的公共方法都可以从 JavaScript 访问。

的其他变体Webview可能是这样的:

this.webView.loadUrl("javascript:setContent(" + JSONObject.quote(this.content) + "," + i + ")");

如您所见,代码使用相同的方法 (webView.loadUrl) 将数据发送到应用程序的 HTML 部分。这也会触发 XSS。Webview 主要负责 Android 上的 XSS。

你是对的,一般来说,XSS 攻击更像是服务器级别的攻击。有人填写表格或将数据发布到服务器,服务器接受该数据但未能对其进行清理。数据被破坏,可能使用嵌入的 javascript 或重定向或链接到带有恶意负载的远程对象。其他人访问该站点并检索蜜蜂发布的数据,浏览器解释文字数据,运行 javascript,检索带有恶意负载的链接对象等。

那么,当您的 android 通常不是服务器时,这如何适用于 android?一般来说,这可能是一个问题,因为许多应用程序使用相同的技术来呈现内容 - 本质上是 html、javascript 等。所以,如果你有一个消息应用程序并且它只接受传入的消息而不对数据进行任何清理,任何javascript 或带有恶意负载的嵌入对象的链接将像在浏览器中一样被处理,本质上是 XSS 攻击。