最近,reddit 网的 「r/ExperiencedDevs」社区中,有一篇名为「你发现过哪些最疯狂的安全漏洞?」的帖子,把很多悲伤的故事收集到了评论区,其中也不乏和数据库相关的事故。一起来嘲笑一下吧。
想成为管理员吗
第一个故事涉及的头文件顶部的内容,在一个自定义 PHP 站点的每个页面上调用。该文件以 root 访问权限运行,有三个不同的 rootkit。
它导致:只需在 URL 中输入 &is_admin=true,就可以成为管理员;允许用户上传个人资料图片,但没有对其脱敏,因此任何人可以创建免费账户并上传 PHP 文件。
此外,他们还在数据库中明文存储信用卡信息。包括 CVV。
负责人表示「是的,这不安全,但每当有人抱怨信用卡信息被盗,我们就告诉他们是银行干的。」
而这位讲述者,还是修补了所有这些漏洞,尽管这并不在他的职责范围内。
澳大利亚一半人口的资料库被挂上邮差云
第二个故事是一个疯狂的大型事故。
Optus(澳大利亚第二大电信公司)通过公共 API 端点泄露了澳大利亚几乎一半人口的资料库(约 980 万人)。
连基本认证都没有,完全公开。
可以访问整个数据库,并共享所有详细信息,包括:护照号码、执照、个人信息、信用记录、地址、出生日期等等。
(最精彩的部分)在邮差云社区上公开记录和宣传!
这就好比一家实体店敞开大门,没有摄像头、门锁或员工;然后在高速公路上立广告牌,说这家店随时可以洗劫。
同步到所有用户
接下来是一个关于 Java 网络应用程序的故事。
它没有对登录用户名和密码脱敏,也没有对预期只有一个结果的数据库查询进行双重检查(只抓取第一行,即使多个结果表明状态错误也是如此)。
使用星号会关联所有用户,包括管理员,从而创建一个特权会话。这样一来,任意用户的操作,都会同一时间被同步到所有用户。
账户余额可随意修改
最后一个故事发生于以太坊 ICO 热潮期间,是关于一个声称「美国证券交易委员会批准」的 ICO 开源网站的。他们的 Github 库居然是用 Node 编写的完整网络应用程序,包括客户/管理员管理应用程序。
他们的大部分密钥都是环境变量,但有一个数据库种子文件列出了管理员账户的原始邮件地址。还有一个包含验证逻辑的文件,它表示,重置任何现有账户的密码都会将新密码设置为硬编码的静态值。
讲述者在其中一个种子管理邮件上试了一下,结果可以登录。他看到了所有买了这种代币的傻瓜。
这个库还开源了在任何地址(包括令牌合约)上手动转移令牌的功能。讲述者随机选了一个客户账户,将里面的代币余额转到 0x0,在链上看到了反映。
第二天早上,他们的 Github 就被私有化了,他们的网络应用程序上也挂上了占位页。