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

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

缺陷编号:wooyun-2015-0117184

漏洞标题:请远离我的智能硬件之小k智能插座客户端存密码暴力破解接口

相关厂商:ikonke.com

漏洞作者: droidcat

提交时间:2015-06-02 15:54

修复时间:2015-07-20 09:10

公开时间:2015-07-20 09:10

漏洞类型:用户敏感数据泄漏

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-02: 细节已通知厂商并且等待厂商处理中
2015-06-05: 厂商已经确认,细节仅向厂商公开
2015-06-15: 细节向核心白帽子及相关领域专家公开
2015-06-25: 细节向普通白帽子公开
2015-07-05: 细节向实习白帽子公开
2015-07-20: 细节向公众公开

简要描述:

智能插座等智能硬件的普及,给攻击者带来了新的攻击面。智能硬件如果存在安全问题,可能导致电气烧毁、隐私泄露等重大安全隐患,笔者测试了一款比较火的智能硬件——小k智能插座,结果轻松就发现了一个密码暴力破解的安全隐患,智能硬件安全实在令人堪忧,希望相关厂商能给予高度重视。

详细说明:

笔者测试的是控客科技的“小K智能”Android客户端,版本为最新版2.0.5.0。
该客户端登录过程使用了Java的SSLSocket,理论上讲应对网络数据获取还原是足够安全的。但该客户端对Android自身代码保护较弱,攻击者可以轻松定位到网络数据收发关键代码。
客户端的SSLSocket代码集中于com.kankunit.smartplugcronus.minautil,关键代码如下

public void sendSSLMsg(final String paramString, final MinaSSLReceiveListener paramMinaSSLReceiveListener)
{
new Thread()
{
public void run()
{
super.run();
try
{
SSLContext localSSLContext = SSLContext.getInstance("TLS");
KeyManagerFactory localKeyManagerFactory = KeyManagerFactory.getInstance("X509");
TrustManagerFactory localTrustManagerFactory = TrustManagerFactory.getInstance("X509");
KeyStore localKeyStore1 = KeyStore.getInstance("BKS");
KeyStore localKeyStore2 = KeyStore.getInstance("BKS");
localKeyStore1.load(MinaSSLUtil.this.context.getResources().openRawResource(2131099648), "kkit2014".toCharArray());
localKeyStore2.load(MinaSSLUtil.this.context.getResources().openRawResource(2131099649), "kkit2014".toCharArray());
localKeyManagerFactory.init(localKeyStore1, "kkit2014".toCharArray());
localTrustManagerFactory.init(localKeyStore2);
localSSLContext.init(localKeyManagerFactory.getKeyManagers(), localTrustManagerFactory.getTrustManagers(), null);
MinaSSLUtil.this.Client_sslSocket = ((SSLSocket)localSSLContext.getSocketFactory().createSocket("konkek2.com", 50003));
if (MinaSSLUtil.this.Client_sslSocket != null)
{
MinaSSLUtil.this.getOut(MinaSSLUtil.this.Client_sslSocket, paramString);
MinaSSLUtil.this.getIn(MinaSSLUtil.this.Client_sslSocket, paramMinaSSLReceiveListener);
}
return;
}
catch (Exception localException)
{
for (;;)
{
localException.printStackTrace();
}
}
}
}.start();
}


结果私钥密码、信任证书密码等敏感数据全部暴露。客户端直接硬编码了“kkit2014”,安全意识过于淡薄。
登录代码如下:

try
{
JSONObject localJSONObject1 = new JSONObject();
localJSONObject1.put("mobilenum", LoginActivity.this.mobilenum.getText());
localJSONObject1.put("nickname", LoginActivity.this.mobilenum.getText());
localJSONObject1.put("password", MD5Util.MD5(LoginActivity.this.pwd.getText()));
localJSONObject1.put("phonemodel", Build.MODEL);
localJSONObject1.put("phoneosversion", Build.VERSION.SDK);
localJSONObject1.put("softwareversion", "1.0.2");
localJSONObject1.put("userfrom", "android");
JSONObject localJSONObject2 = new JSONObject();
localJSONObject2.put("params", localJSONObject1);
localJSONObject2.put("method", "doLogin");
LogUtil.logMsg(LoginActivity.this, "JsonObject=================" + localJSONObject2.toString());
LoginActivity.this.minaSSLUtil.sendSSLMsg(localJSONObject2.toString(), LoginActivity.this);
return;
}
catch (Exception localException)
{
localException.printStackTrace();
}


通过仿照客户端代码即可轻松的构造登录报文,用于暴力密码破解。
如果攻击者得到的用户的用户名、密码,就可以任意控制家电的启停了,严重时可以导致硬件=烧毁。

漏洞证明:

构造登录请求报文如下:

{
"method": "doLogin",
"params": {
"mobilenum": "186******45",
"softwareversion": "1.0.2",
"phonemodel": "MI 1S",
"phoneosversion": "16",
"userfrom": "android",
"password": "*****", // 密码的MD5值
"nickname": "186******45"
}
}


正确时,服务器返回如下数据

{"res":{"des":"成功","method":"doLogin","code":"***"}}

// ***为用户ID

修复方案:

1、加强客户端代码的保护
2、服务器增加防密码暴力破解功能

版权声明:转载请注明来源 droidcat@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:7

确认时间:2015-06-05 09:09

厂商回复:

正在修复,谢谢您的帮助

最新状态:

暂无