翻译自:https://medium.com/@Zemnmez/übersicht-remote-code-execution-spotify-takeover-a5f6fd6809d0
翻译:聂心明

  1. 所有的Spotify音乐软件,所有的舞蹈音乐软件后门
  2. Übersicht的远程命令执行漏洞
  3. 总结

无论何时提到安全,我都希望有机会去讨论关于应用安全的建设:网络的边界是非常有用的,但是在2018年发生了一些事情,这些事情对如何设计app产生了很严重的影响。

这场不幸事件的主角是übersicht,一个与Windows的 Rainmeter类似的MacOS上的小部件(所有人都记得2007年电脑桌面上放的那些东西吧?)
Übersicht就像其他的应用一样,本质上都是一个web浏览器还有一个运行在特殊权限上的web app。其中一个特殊的权限就是在你的电脑上运行指令。webapp的小部件启动的本地网站只能允许本地用户访问。抱歉,这篇文章的主题应该是Spotify,所以我现在开始讨论它。

Spotify的所有音乐软件,所有的音乐舞蹈软件都被植入后门

这看起来是一个十分普通的应用,像übersicht运行的web服务程序只有本地的system权限的程序可以访问--Spotify,Steam还有其他的一个程序。

通常情况下,这些web服务器提供的网站提供web服务无法访问的功能。Spotify,运行在本地的服务器允许像推特这样的网站把他们的小部件嵌入其中,当你点击播放音乐的按钮时,就会发送一个消息给你的电脑。这很古怪,对吧?甚至当你关闭播放的标签页时,音乐还会播放。

让我们快速解刨这个程序,看看它是怎么工作的吧。让我们来证明一个有趣的概念吧,让我们回到2016年八月,如果你不打开Spotify,你就无法关闭摇滚乐。

现在我们有了一个黑色背景的按钮,如果你点击它,它会让你的Spotify账户播放Rick Astley类型的音乐,只要是被支持的设备,都会播放音乐(甚至是同一局域网下的攻击者也可以办到这一切)。
现在已经修复了

想想这是什么?当你把鼠标移到这个表情上时,它会显示‘play’

如果我在我伪造的页面上插入这个元素,那么马上就会暴露。那么我就嵌一个框架进去,并把这个框架的不透明度设置成0.05,这样的话,就只有我们能看到它了。让我们来试试

好了,我看到这个播放的按钮了,但是,其他的东西在哪里?我们再来一次吧。我很聪明的使用了标签元素,然后把边缘剪切一下,同时嵌入Spotify player播放器。让我们把这些再反转一下。

好了,现在我们得到了这个页面,透过屏幕我们都能感受到这个男人阴郁的情绪。但是真正的问题来了,我们要如何才能给Spotify发送命令?

我很乐意像你展示它是怎样工作的,但是这个软件已经修复了这个漏洞,所以你只能听我说了。这个播放器会带着认证token给spotilocal.com会发送一个神秘请求,这个请求会说:”请给我播放Rick Astley“,Spotilocal.com 现在已经不存在了,但是请注意2014年的这篇文章 https://medium.com/@bengreenier/hijacking-spotify-web-control-5014b0a1a360 它实际上会被指向127.0.0.1,这个ip地址会回复”谁在问“

但是作为一个安全工程师我会想到一些额外的事情,如果Twitter.com给spotilocal.com发送一段请求而不会触发mixed-content 警告,这就意味着我和spotilocal.com之间的连接必须是被加密的。但是,这是怎样做到的?一段从从自己到自己的加密传输?叫我Alice,牵起我的手,来让我们跳进这个兔子洞去。

你准备好了吗?深呼吸。每一个网站通过密钥来加密数据。仅仅spotify.com知道spotify的密钥,所以仅仅spotify.com 能够加密数据。明白了吗?Spotify

难以置信的是它们在安全上耍了一个小花招,Spotify实际上给每一个单独的用户都分配了所有的密钥,这些密钥允许他们证明自己是spotilocal.com。我是怎么知道这个事情的?我逆向了Spotify程序,后面我将会提到,我将会给Spotify安全团队一个恶作剧--已经发布在推特上了!


把域名下私钥给每一个人,这很愚蠢吗?我想是的,我仔细想了想,然后我把这问题报给了Spotify.com的安全团队。过了很久以后,我才把这个证书放在网上。
我把曾经告诉Spotify安全团队的事情现在告诉你们,亲爱的读者朋友:DNS是不可信的。

首先,为什么我们会有证书呢?很大一部分原因是dns是未加密的。正确的Spotify dns服务器会拼命告诉你spotilocal.com是127.0.0.1,而中间人则会告诉你spotilocal.com是其他的地址。只要你访问到了这个网站,这个网站可能会窃取你的信用卡信息和身份信息。

这个事情其实每时每刻都在发生,并且在你身上也发生过。当你在有网的咖啡店,或者星巴克,或者坐飞机去旧金山或者无论你做什么,只要你连接上WiFi,它们就会劫持你的dns,并且告诉你的电脑,你无论访问什么网站都要先去访问它们的WiFi登录页面。Captive Portal是一种可怕的黑色咒语。

”为什么这不是一个巨大的问题?“,我一直苦苦思考这个问题,甚至整晚整晚睡不好。这可能有两个原因。如果网站的传输数据被加密,即使你发送请求之后的返回报文是来自google.com的,你也无法验证这个返回报文是不是真的来自于google.com

这个问题被 HSTS所解决,这基本意味着,当你加载google.com的时候,它会说:”好的,我在这里,我是谷歌,不要让任何不安全的连接假扮成我,你听见了吗?“

如果你不是一个安全怪胎,那我就在你的脑中放入更多的安全思维吧:每一个人都会成为一个”免费的星巴克WiFi“。不用控制任何东西。当你的手机或者电脑连接过星巴克的时,如果你断开了连接,那么这些设备就会自动的寻找‘Free Starbucks Wi-Fi’的WiFi。

所以,让我假设一个场景,我带着无线安全工具WiFi Pineapple® 在星巴克里面坐一天。我会告诉星巴克里面的所有人,我就是星巴克的WiFi,请连接我,我觉得他们不会很聪明。然后我就可以看到未加密的流量数据了。

从上面的步骤来看,我可以用这种的方式去接管在星巴克喝咖啡人Facebook账户,并且其他人也会支持 Firesheep 软件的概念,通过让人们不断的意识到未加密的网络连接简直是垃圾,就可以改变世界。

在2018年,不再有那么多的网络连接是未加密的了,我没有找到很充足的数据来说明这一点,但是想想这个,大多数人使用的google, facebook, apple, twitter, instagram, snapchat。全互联网上几乎百分之一的用户在用着最好的通信加密方式。我没有统计这些,但你只能相信我。
不要怀疑啦,我们有一些数据的:

总之,我没有得到我真正想要的东西。无论DEFCON的观众怎么想,没有人会任性到用能绕过所有安全设备且价值上百万的0day去攻击你。我知道我想参加下一届的DEFCON,但是请考虑一下那些年轻的孩子们。

我希望你没有被我跟踪,因为你们是否还记得我还存着spotilocal.com的证书,所以我能看到所有被发出去的信息。’但是spotilocal.com指向的地址是127.0.01,那是我自己的电脑!它不会跑到外网上去!‘,你的声音像一个不合时宜的小提琴一样发出呜咽的声音,哦亲爱的孩子。

当你的电脑考虑要从spotilocal.com加载信息的之前,它会向互联网发出一个dns请求,去查询spotilocal.com在哪里。而我,只要用了WiFi Pineapple,那么我就可以劫持dns查询。我们就可以发送任何想发送的数据包,然后我就会发送‘你知道spotilocal.com是谁吗?是我’

现在我们可以捕捉到每一个路人的流量了,只要它是Spotify的用户,并且发送数据包给spotilocal.com,我们就可以解码它们的请求内容,这就意味着我们可以拿到这些人的Spotify OAuth token。现在我不知道Spotify OAuth token能够访问什么东西。这真的是太糟糕了,我不知道,我从来没有想过这些。但是我知道它可以做一些事情,比如在用户系统里面播放音乐

让我们快速跳到这一步,来讨论一下这个密钥和能用这个密钥干点啥。可以用这个token去访问用户资源和一些功能,在这里我们用这个token来用其他人的电脑播放音乐。

一般情况下,当一个公司给用户产生一个token,这个用户可以用这个token访问任何东西,就像Spotify 一样。因为,我的意思是,为什么Spotify会试图阻止Spotify访问一些东西呢?Spotify数据库中可能会有你的家庭地址,你最喜欢吃的冰激凌。但是不会用这些去证明我拿到了用户权限。所以,我会让那个用户循环播放一首歌。
所以让我们假设通过获取到用户的token,我们不仅仅拿到了用户账户的完整权限,我们还想在Spotify客户端上播放音乐。我们要怎么做呢?服务器在其他人的电脑上。

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖