9

Android平台下二维码漏洞攻击杂谈 | WooYun知识库

 6 years ago
source link:
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android平台下二维码漏洞攻击杂谈

0x00 前言


现在Android App几乎都有二维码扫描功能,如果没有考虑到二维码可能存在的安全问题,将会导致扫描二维码就会受到漏洞攻击,严重的可能导致手机被控制,信息泄漏等风险。

0x01 拒绝服务


低版本的zxing这个二维码库在处理畸形二维码时存在数组越界,导致拒绝服务。扫描下面的二维码,可能导致主程序崩溃:

p1

通过程序的崩溃日志可以看出是个数组越界:

11-23 10:39:02.535: E/AndroidRuntime(1888): FATAL EXCEPTION: Thread-14396 
11-23 10:39:02.535: E/AndroidRuntime(1888): Process: com.xxx, PID: 1888 
11-23 10:39:02.535: E/AndroidRuntime(1888): java.lang.ArrayIndexOutOfBoundsException: length=9; index=9 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.common.BitSource.readBits(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.qrcode.decoder.DecodedBitStreamParser.decodeAlphanumericSegment(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.qrcode.decoder.DecodedBitStreamParser.decode(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.qrcode.decoder.Decoder.decode(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.qrcode.QRCodeReader.decode(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.MultiFormatReader.decodeInternal(Unknown Source) 
11-23 10:39:02.535: E/AndroidRuntime(1888):   at com.google.zxing.MultiFormatReader.decodeWithState(Unknown Source) 

0x02 本地文件读取


之前Wooyun上爆了一个利用恶意二维码攻击快拍的漏洞,识别出来的二维码默认以html形式展示(Android+Iphone),可以执行html和js。将下面的js在cli.im网站上生成二维码:

#!js
<script>
x=new XMLHttpRequest(); 
if(x.overrideMimeType) 
x.overrideMimeType('text/xml'); 
x.open("GET", "file://///default.prop", false); 
x.send(null); 
alert(x.responseText); 
</script>

p2

用快拍扫描之后,就能读取本地文件内容:

p3

0x03 UXSS


去年,Android平台上的Webview UXSS漏洞被吵的沸沸扬扬,由于低版本的Android系统自带的Webview组件使用Webkit作为内核,导致Webkit的历史漏洞就存在于Webview里面,其中就包括危害比较大的UXSS漏洞。

Webview组件几乎存在于所有Android App中,用来渲染网页。如果扫描二维码得到的结果是个网址,大部分App会直接用Webview来打开,由于Webview存在UXSS漏洞,很容易导致资金被窃、帐号被盗或者隐私泄露。漏洞介绍可参考TSRC博文:Android Webview UXSS 漏洞攻防

p4

0x04 远程命令执行


大部分Android App扫描二维码之后,如果识别到的二维码内容是个网址时,会直接调用Webview来进行展示。如果Webview导出了js接口,并且targetSDK是在17以下,就会受到远程命令执行漏洞攻击风险。

苏宁易购Android版扫描二维码会用Webview打开网页,由于苏宁易购导出多个js接口,因此扫描二维码即会受到远程命令执行漏洞攻击(最新版本已修复)。

com.suning.mobile.ebuy.host.webview.WebViewActivity导出多个js接口:

#!java
this.b(this.a);
            this.s = this.findViewById(2131494713);
            this.d = this.findViewById(2131494100);
            this.d.a(((BaseFragmentActivity)this));
            this.l = new SNNativeClientJsApi(this);
            this.d.addJavascriptInterface(this.l, "client");
            this.d.addJavascriptInterface(this.l, "SNNativeClient");
            this.d.addJavascriptInterface(new YifubaoJSBridge(this), "YifubaoJSBridge");

由于targetSDKversion为14,因此所有Android系统版本都受影响:

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="14"
>
</uses-sdk>

苏宁易购Android版首页有个扫描二维码的功能:

p5

扫描二维码时,如果二维码是个网页链接,就会调用上面的Webview组件打开恶意网页:

p6

恶意二维码如下:

p7

0x05 总结


二维码可能攻击的点还不止上面列的那些,发散下思维,还有zip目录遍历导致的远程代码执行漏洞,还有sql注入漏洞,说不定还有缓冲区溢出漏洞。思想有多远,攻击面就有多宽!Have Fun!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK