发现EOS死尸级隐患

in #security6 years ago

前些天无意中发现EOS一处安全隐患,据说发现安全漏洞奖金多达一万美金啊,我一下子就兴奋啦,赶紧上Telegram联系BM,打算顺便问问咋领奖金💵。


(图源 :pixabay)

结果因为众所周知墙的缘故,我给BM的信息没能发送出去,我自己搭的爱国上网工具又罢工,于是这奖励就一直没能拿到😭(脸皮呢?脸皮哪去了?)

漏洞

想必玩过EOS命令行的朋友都使用命令行创建过EOS钱包,然后导入过私钥。我之前的一篇文章还专门介绍过这事:EOS的钱包操作

导入私钥的命令为:

cleos wallet unlock -n test
cleos wallet import -n test 5JbJL9YXgX4Sot69FMWHhdqowdpxMgLfju2aVtjW7mRKcmaidSE

其中test我的钱包名,5JbJL9YXgX4Sot69FMWHhdqowdpxMgLfju2aVtjW7mRKcmaidSE为我的测试用私钥,据说这样导入以后,私钥就加密保存到钱包里,然后每次想用都得输入密码。

听起来很安全是不是?但是如果你看一下.bash_history,你就会发现你的上述命令和私钥都在这个文件中已明文方式保存着呢。

怎么形容这事呢,好比你把一大块金子放进了保险柜,保险柜的前门需要密码才能打开,但是你忘记关后门了😳

也就是说,什么密码高强度加密保护在钱包的私钥根本就在那赤裸裸的展示着呢。

严重性

其实这个也没那么严重的啦,一般情况.bash_history默认的权限为-rw-------,也就是说只有用户自己有读写权限,别人看不到的。

但是想象这样一种情况,如果用户登陆ssh并忘记关窗口,就有暴露私钥的风险。或者一旦用户机器被植入恶意脚本木马之类的,就可以轻易窃取用户私钥了。

而在EOS中,有了私钥就可以转移资产或者做其它一些操作了,后果不难想象。

总之,将本该加密保存的私钥暴露在.bash_history中,是及其不应该的。

解决

要解决这个问题其实很简单,一种是EOS修改cleos钱包代码,导入的时候私钥不直接放在命令行参数位置,而是提示输入的方式,这样就不会记录在.bash_history中了。

另外一种方式就是我们手动删除或者清空.bash_history文件,还有用history -c清除本次操作的历史记录。

但是每次手动清理是不是很麻烦?其实还有一种简单的方法:

vi .bash_logout

在文件末尾追加如下内容:

history -c

这样以后每次我们退出登陆,系统会自动帮我们清理使用痕迹(历史记录)楼。

后记

然后我想着把这个隐患报到Github上吧,结果一搜发现竟然有人已经报告并解决了这个问题,https://github.com/EOSIO/eos/pull/4409

看了一下人家报告的时间是12天前,在看一眼我未发送成功的信息,是7月4日。也就是说我的信息还未发送之前,别人就早已报告并解决了这个问题。

感谢万能的墙,让我的信息没发出去,不然该有多尴尬啊。原本以为自己发现了严重的安全隐患,人家360说什么史诗级漏洞,咱这个不算史诗级但是也很重要是吧?

没想到,竟然早被人解决了,原来是个死尸级漏洞。😭不过我觉得这事还是很重要的,尤其是之前导入过私钥的朋友,快去检查一下你的.bash_history吧。

Sort:  

错过1万美金啊

哈哈,开个玩笑而已,这不算啥漏洞

能发现漏洞的人,都是高手,厉害厉害!

O神,众所周知的墙,对你来说不是分分钟的嘛?

不行,我恐高~~

那么巧,我也恐高,一点也不高呀~~ヾ|≧_≦|〃

建议使用
cleos wallet import -n test --private-key
来导入,偷懒的话在命令行前加个空格,就可以跳过bash历史,不保存了,比如
_cleos wallet import -n test 5JbJL9YXgX4Sot69FMWHhdqowdpxMgLfju2aVtjW7mRKcmaidSE
下划线代表空格

感谢分享

真的会有那么多的奖金吗?

O神,太神了。

先跪大神!原來私鑰已經可能被盜了QQ

你是国内第一个发现并报告的啊

O神,可以的!

这是linux的史诗级漏洞

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64961.60
ETH 3103.64
USDT 1.00
SBD 3.86