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

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

缺陷编号:wooyun-2015-0140449

漏洞标题:智能硬件安全之九阳豆浆机设备认证与控制设计缺陷(控制任意女神豆浆机)

相关厂商:joyoung.com

漏洞作者: 只抽红梅

提交时间:2015-09-11 14:04

修复时间:2015-12-10 16:12

公开时间:2015-12-10 16:12

漏洞类型:权限控制绕过

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

女神竟然喜欢喝豆浆,喝豆浆,喝豆浆。我要悄悄帮她做。

详细说明:

按照以往的路数,我把九阳豆浆机组成下图所示的网络环境,用来分析九阳豆浆机的安全性。

lan.png


分析思路是:
1. 通过 burp suite 抓取 app 和九阳云端通讯的数据,用于检测接口是否存在漏洞;
2. 通过 openwrt 上 tcpdump 抓取豆浆机和云端通讯数据,用于检测豆浆机和云端是否存在漏洞;
经过枯燥而又漫长的过程之后,我们有了些许收获。
第一部分先让我们来说说豆浆机的事情,下面是部分抓包截图:

p1.png


p2.png


p3.png


通过分析数据包我们能够知道九阳云端一共有两个对外的 IP

42.121.254.96(api.joyoung.com)
121.41.20.214


其中 42.121.254.96 开放 8089 端口,在 http 上搭建了WebLogic
而 121.41.20.214 开放 9000 端口和设备通信,9001 端口与手机 app 通信。后端为运行在 Play!framework 的 java程序。
用户通过app绑定设备以及之后开启app时,会通过api.joyoung.com:8089提供的接口依次获取以下信息。
mobile_id –> session_key -> dev_id
在得到设备dev_id号后,app 会发送指令到九阳控制服务器 9001 端口,其中包含要控制设备的dev_id 号。同时九阳控制服务器会通过9000端口和各个智能设备之间保持长连接,智能设备会每分钟发送心跳包保持在线状态。当服务器从9001端口收到控制命令后,会转发命令到对应控制设备所保持的长连接中,这样实现了跨网络的控制。
在观察 9001 端口的通讯数据后,经过简单的测试,其中和设备相关的数据为一个16字节长度的did。查看设备是否在线的包结构大致如下:

"bb00000100"+did+ "0037010002eea0003000000000000000000000000000000000000000000000000000000000000


在测试中发现,只要获取到 dev_id 值,无需用户正常的认证过程,仍然可以通过 9001 端口直接控制智能设备。8089 端口的认证只是 dev_id 信息获取过程,而没有将验证体现后续的控制过程中。在已知 dev_id 的情况,不管用户是否更改 app 上的用户密码,只要设备在线,都可以直接通过和九阳控制服务器9001端口通讯来控制设备。
那么问题来了,我们怎么获取设备的 dev_id,方法有多种,弱水三千我只取一瓢饮 -- 云端。
这就到了第二部分,说说云端,经过前期工作后,我们收集到云端信息如下:

42.121.254.96(api.joyoung.com)
42.120.19.38(apitest.joyoung.com)
121.41.20.214


对其分析后能够得到云端的控制权限,过程略,只给结果
42.120.19.38(apitest.joyoung.com) 存在如下漏洞,可以获取这台服务器的控制权限
1. https://apitest.joyoung.com/jypms/www/user-login-L2p5cG1zL3d3dy8=.html 运行禅道项目管理软件,存在高危漏洞可以直接获取服务器权限,漏洞详情请参考: WooYun: 禅道项目管理软件多个漏洞
2. https://apitest.joyoung.com/phpmyadmin/ 弱口令,能够获取数据库数据,并且可以读取服务器文件等;
经过观察,这台服务器是测试服务器,但是服务器上代码和 42.121.254.96(api.joyoung.com) 大致相同,分析了下 api 接口相关代码,发现上传地方存在漏洞,通过下面数据包可以上传任意文件到 web 目录下

POST /ia/appapi/upload HTTP/1.1
Host: api.joyoung.com:8089
Content-Type: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY
Accept: */*
Connection: keep-alive
Cookie: SERVERID=e7a1873b592e0bf26933f9d533fb8b95|1441529356|1441529354
Accept-Language: zh-Hans, en-us
Content-Length: 439
Accept-Encoding: deflate
User-Agent: jy_ai/1.1.2 CFNetwork/711.5.6 Darwin/14.0.0
--0xKhTmLbOuNdArY
Content-Disposition: form-data; name="param"
{"sessionkey":"*************","api_version":"1","op_action":"uploadBbsfile","u_type":"NFSVISYDLIBB"}
--0xKhTmLbOuNdArY
Content-Disposition: form-data; name="a.jsp"; filename="file"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
<%= new String("Hello!") %>
--0xKhTmLbOuNdArY--


ps:这里走了不少弯路,但是只提一句就是,上传参数中原本有 u_msg 是校验字段,如果这个字段为空就会跳过整个校验过程
所以通过构造上面的数据包可以获取 42.121.254.96(api.joyoung.com) 服务器的权限(webshell)

http://api.joyoung.com:8089/ia/appfiles/bbs/2015/09/09/531166ef4b0c46a6ab901d2cc8426c24.jsp


webshell.png


进而我们可以获取数据库中所有设备的 dev_id,如果设备在线后,就可以发送控制命令了。写python脚本来验证一下:

py.png


py1.png


然后呢?
然后我去给女神做爱心豆浆去。

漏洞证明:

漏洞证明

py.png


py1.png

修复方案:

先总结下问题:
1. 九阳豆浆机在设计控制的地方存在缺陷,只要知道 dev_id 就能够对其进行控制;
2. 云端的安全问题会造成能够控制所有设备
再说修复建议:
1. 在对设备进行控制时,除了 dev_id 外,还需要验证用户身份;
2. 云端的问题很多,需要全部修复;

版权声明:转载请注明来源 只抽红梅@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-09-11 16:10

厂商回复:

感谢白帽子发现我们系统设计的不足,将尽快安排整改。

最新状态:

暂无