由饿了么密码学误用致防御绕过浅谈Android密码学漏洞

漏洞概要

缺陷编号:WooYun-2015-0130444

漏洞标题:由饿了么密码学误用致防御绕过浅谈Android密码学漏洞

相关厂商:饿了么

漏洞作者:小飞

提交时间:2015-07-30 15:26

公开时间:2015-09-13 15:46

漏洞类型:未授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

Tags标签:

漏洞详情

披露状态:

2015-07-30: 细节已通知厂商并且等待厂商处理中
2015-07-30: 厂商已经确认,细节仅向厂商公开
2015-08-09: 细节向核心白帽子及相关领域专家公开
2015-08-19: 细节向普通白帽子公开
2015-08-29: 细节向实习白帽子公开
2015-09-13: 细节向公众公开

简要描述:

密码学误用在app中是个很大的问题,几乎所有apk的校验算法都能被模拟
饿了么的算法鲁棒性和隐蔽性算是不错的,提出来讲是为了证明签名校验机制的脆弱
虽然提交给饿了么 但是说的是一大类问题
瘦蛟舞大牛就提出过这个问题
http://www.wooyun.org/drops/tips-6049
很多应用采用的加密算法更是不堪抛砖引玉,希望大家把这个也当做一个新的方向去挖掘发现漏洞饿了么客户端先前在wooyun上被人挖出各种洞,
撞库,电话资源争夺等
后来加入签名验证算法,统一防护,防止被人篡改提交的数据。
那么如果算法能被破解呢?

详细说明:

我们用burp抓包发现

饿了么每一个客户端的数据包都会附加一个签名sig如果你篡改POST或者GET过去的任意一个参数都会返回一个

猜测他的机制应该是数据本地加上签名校验然后发送到server端用相同的算法进行签名验证 如果传过去的sig不等于数据在server端加密后的期望值,返回一个签名错误。所以我们现在想破解用户数据( WooYun: 饿了么客户端设计缺陷可影响用户帐号安全 )也不能狂打人家电话了( WooYun: 饿了么手机验证可做电话轰炸(呼死你) )更不能免费吃喝( WooYun: 饿了么逻辑漏洞之免费吃喝不是梦 )那么这个算法是否具有弱点呢?我们打开jeb逆向看看搜索sig" 很快定位到关键点

跟入

发现sig字段是由s.a处理的继续跟过去

可以看到这里它load System.loadLibrary("signer");也就是使用了.so文件报装他的算法private static native String sign(s this, String arg1, Context arg2) {}然后传入签名我们解包看看这个so库apktool d -d eleme.apk在/lib/armeabi下找到那个库libsigner.soIDA Pro分析下 发现是可以反汇编的

图中我们可以看到decode2String 跟踪过去

所以decode是主要流程 //其实这里挺奇怪的,按理说签名算法应该是encode,为何这里是decode肯定有鬼,我们跟踪过去看看

首先可以看出的是作者煞费苦心地利用java反射机制 调用JNI使用了一系列java原有的方法进行混淆然后问题在这

这段数据是硬编码到so文件里面的,然后它调用各种JNI方法的作用无非就是想混淆,增加破解难度不过这个算法由于密码学误用,依然的是可以破解的逆向之后我得到了一个key其中key就是调用一大堆冗杂的jni生成的一段hash有了key 我们就能用来加密,构造服务器所信任的恶意请求那到底是怎样加密我们的请求的呢我们先用某神器插桩监控下这个调用

可以看到其实就是MD5(getUrl+key)

可以看到我们构造任意链接都不再抛出签名错误

看看发动电话攻击

可以看到在拨打电话之前是有验证注册与否的但是我们现在可以伪造号码,加上后端没有拨打限制次数所以我们可以直接伪造了

这时候我们终于可以撞库:

至于免费领取早餐午餐晚餐活动,相信只要活动出现,自然可以篡改数据施展攻击

漏洞证明:

撞库脚本

可以看到我们构造任意链接都不再抛出签名错误

看看发动电话攻击

可以看到在拨打电话之前是有验证注册与否的但是我们现在可以伪造号码,加上后端没有拨打限制次数所以我们可以直接伪造了

这时候我们终于可以撞库:

至于免费领取早餐午餐晚餐活动,相信只要活动一出现,自然是可以篡改数据完成

修复方案:

密码学误用在app中是个很大的问题,几乎所有apk的校验算法都能被模拟饿了么的算法鲁棒性和隐蔽性算是不错的,提出来讲是为了证明当今签名校验机制的脆弱瘦蛟舞大牛就提出过这个问题http://www.wooyun.org/drops/tips-6049很多应用采用的加密算法更是不堪抛砖引玉,希望大家把这个也当做一个新的方向去挖掘发现漏洞

漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-07-3015:44

厂商回复:

经确认,该漏洞存在,我们将尽快修复。感谢你们对饿了么的关注!

最新状态:

暂无

评价

  1. 2010-01-01 00:00 随风的风 白帽子 | Rank:9 漏洞数:4)

    一楼出售广告

  2. 2010-01-01 00:00 小飞 白帽子 | Rank:38 漏洞数:4)

    不打个雷么。。

  3. 2010-01-01 00:00 瘦蛟舞 白帽子 | Rank:634 漏洞数:67)

    哎哟,不错哦

  4. 2010-01-01 00:00 小飞 白帽子 | Rank:38 漏洞数:4)

    @瘦蛟舞 嘻嘻

  5. 2010-01-01 00:00 prolog 白帽子 | Rank:518 漏洞数:59)

    据说手握肥皂就能打雷

  6. 2010-01-01 00:00 ‮ 白帽子 | Rank:10 漏洞数:1)

    天下没有不破的墙
    补一个,破一个

  7. 2010-01-01 00:00 小飞 白帽子 | Rank:38 漏洞数:4)

    @饿了么 差三个rank升级,简直了。。。

  8. 2010-01-01 00:00 qhwlpg 白帽子 | Rank:141 漏洞数:13)

    这广告打的不错呦

  9. 2010-01-01 00:00 lc4t 白帽子 | Rank:0 漏洞数:0)

    来晚了

  10. 2010-01-01 00:00 Nicky 白帽子 | Rank:400 漏洞数:47)

    围观~

  11. 2010-01-01 00:00 qhwlpg 白帽子 | Rank:141 漏洞数:13)

    居然没有雷

  12. 2010-01-01 00:00 sOnsec 白帽子 | Rank:61 漏洞数:7)

    新方向啊,又学习了

  13. 2010-01-01 00:00 小荷才露尖尖角 白帽子 | Rank:65 漏洞数:8)

    很给力,赞潜心分析

  14. 2010-01-01 00:00 Moonight 白帽子 | Rank:48 漏洞数:5)

    长姿势了,原来这种也算漏洞,普天之下无安全应用了

  15. 2010-01-01 00:00 小胖胖要减肥 白帽子 | Rank:492 漏洞数:66)

    这种加密纸老虎,黑产肯定早玩的不要玩了,不做风控早晚出大事

  16. 2010-01-01 00:00 Hckmaple 白帽子 | Rank:0 漏洞数:0)

    NB

  17. 2010-01-01 00:00 Drizzle.Risk 白帽子 | Rank:220 漏洞数:19)

    洞主很细致啊