漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0156409
漏洞标题:ES文件浏览器未授权远程命令执行
相关厂商:www.estrongs.com
漏洞作者: 小荷才露尖尖角
提交时间:2015-11-27 19:46
修复时间:2015-12-17 14:48
公开时间:2015-12-17 14:48
漏洞类型:设计错误/逻辑缺陷
危害等级:高
自评Rank:15
漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-11-27: 细节已通知厂商并且等待厂商处理中
2015-12-01: 厂商已经确认,细节仅向厂商公开
2015-12-04: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航)
2016-01-25: 细节向核心白帽子及相关领域专家公开
2016-02-04: 细节向普通白帽子公开
2016-02-14: 细节向实习白帽子公开
2015-12-17: 细节向公众公开
简要描述:
ES文件浏览器安卓版开放某端口,正常情况下该端口有访问IP地址的限制。然而结合本地某漏洞的利用,可突破限制,访问该端口获得远程命令执行机会,查看手机的文件列表、图片列表、视频列表、安装app列表,并可启动任意应用,远程下载外部存储和ES文件浏览器私有目录下的文件。
详细说明:
ES文件浏览器号称全球主动下载超过3亿次,安卓文件管理第一品牌。测试版本为Google Play上的最新版**.**.**.**(Market)。
0x01 漏洞分析
监控到ES文件浏览器在tcp的59777端口监听,逆向发现使用了NanoHTTPd,并支持一系列命令的传入。见com.estrongs.android.e.a类
然而直接远程访问该端口,并发送json格式的命令始终无法得到结果。提示
后经过调试,发现该WebServer维护了一个IP地址访问的白名单,在接受HTTP访问请求时会将访问IP与白名单中的IP进行比对,若不在白名单,将不作任何响应。如图,见com.estrongs.android.e.j类中的判断(代码经过修饰,NanoHTTPWebServer为com.estrongs.android.e.h),若判断不通过,将返回空。
跟入这个e方法,可发现对白名单的比对
查看这个ipWhiteList的交叉引用,可发现NanoHTTPWebServer具有一个c方法(修饰为addList),可以添加whitelist。
因此,是否成功访问59777端口就归结为是否可能将攻击者的IP加入这个whitelist。
再次查看c方法的交叉引用,找到如下代码,位于com.estrongs.android.pop.app.AdbControllerActivity
上述代码表明,如果AdbControllerActivity暴露,则可以将攻击者的IP加入到whiteList。幸运的是,AdbControllerActivity正好是暴露没有任何保护的,恶意app可以启动该Activity设置攻击者可控的IP地址,允许其对59777端口的访问。
漏洞证明:
0x02 漏洞证明:组件暴露漏洞
com.estrongs.android.pop.app.AdbControllerActivity没有保护,本地恶意程序可以通过如下命令启动ES文件浏览器远程管理的FTP服务,同时设置允许访问59777端口Web服务的IP。
此时,手机的地址栏将有所提示。
通过这个FTP服务,远程攻击者或无读取外部存储权限的本地恶意app将能够上传下载sdcard中的文件。
有趣的是,ES文件浏览器的这个FTP服务并未限制目录访问,可以跳转到手机中ES文件浏览器有权限访问的任意目录。
上传、下载ES文件浏览器私有目录下的文件
部分文件具有与账户相关的token等敏感信息,例如sapi_system.xml
甚至删除文件
这意味着,本地恶意app可以通过ES文件浏览器暴露组件和FTP服务的配置不当突破android沙箱的限制,使远程或本地攻击者上传、下载甚至删除ES文件浏览器私有目录下的文件,并访问ES文件浏览器有权限访问的任何目录和文件。但由于手机地址栏的提示,用户会有所发觉(当然本地恶意app的攻击可以在用户发觉之前自动化完成),所以这个漏洞暂且不表。
0x03 漏洞证明:远程命令执行漏洞
下面我们回到之前谈论的59777端口,在启动AdbControllerActivity并设置攻击者的可控IP后。用户若发觉FTP服务开启,可以在通知栏中选择停止FTP服务。但无论用户是否选择停止FTP服务,攻击者IP仍在whitelist中,从这个IP仍可以访问59777端口开放的web服务,通过发送{"command":"[命令名]"}的json远程执行命令。
1.命令名为getDeviceInfo,获取手机信息
2.命令名为listFiles,访问http://ip:59777/path,则列出/path目录下的所有文件,可以访问ES文件浏览器有权限访问的任意目录
3.命令名为listPics,获取手机中存储的所有照片信息
同理,命令名为listVideos和listAudios,可获取手机中存储的所有视频和音频信息
4.命令名为listApps,获取手机中的安装应用信息
同理通过listAppsSystem、listAppsPhone、listAppsSdcard、listAppsAll可以获得分类的安装应用信息。
5.命令为appLaunch,发送{“command”:"appLaunch","packageName":包名},可以启动手机上具有main activity的任意应用。如图,我们成功的在手机上启动了新浪微博。该特性可以结合本地恶意app,启动一个虚假的activity在手机上钓鱼。
6.命令名为appPull,发送{“command”:"appLaunch","packageName":包名},可以远程获取app安装包。
试验中还发现,如果ES文件浏览器开启远程管理PC、网盘、安卓电视、蓝牙等功能,则这个59777端口可以作为中转桥梁,远程攻击者一旦猜测成功正确的url,可以代为进行远程管理,限于时间,未作进一步的测试。
修复方案:
1. 设置AdbControllerActivity为不导出状态,或者添加权限;
2. ftp服务限定使用的目录为sdcard;
3. 进一步检查59777端口开放web服务的IP访问白名单的设定路径不能为攻击者可控。
版权声明:转载请注明来源 小荷才露尖尖角@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2015-12-01 17:03
厂商回复:
CNVD确认所述情况,已由CNVD通过网站管理方公开联系渠道向其邮件通报,由其后续提供解决方案。
最新状态:
暂无