×

CTO 写低级 Bug,致公司 70 GB 数据遭泄露!

渣渣酒 渣渣酒 发表于2021-03-09 10:05:50 浏览832 评论0

抢沙发发表评论

前有“程序员删库跑路”,后有 CTO 在网站后台引入 Bug,导致公司1.5万账户信息外泄。

近日,据外媒报道,美国开源社交网络服务平台 Gab 受到黑客攻击,其中,包括一些知名人士在内的1.5万 Gab 账号及个人信息遭到泄露。

据悉,一位未透露姓名的黑客利用 SQL 注入漏洞入侵 Gab 后台,并从数据库中窃取了约70GB 数据提供给了爆料组织 Distributed Denial of Secrets(简称 DDOSecrets)。这些数据包括了7万多条信息、4000多万条帖子,以及哈希密码、明文密码、用户个人资料等。

然而,在 Gab 公司审查并欲修复漏洞之际,竟然发现此 Bug 出自自家公司的 CTO 之手,而这究竟又是怎么一回事?

黑客 泄露

CTO 写的 Bug,后果很严重!

正如上文所述,Gab 公司在遭到黑客攻击后,爆料组织 DDOSecrets 团队公开发文表示,“正在将这些泄露的数据汇编成了一个 GabLeaks 的文件,同时将对外分发共享此数据集,记者、学者以及研究者可以通过公开渠道与其获得联系,对这些信息进行研究学习。”

在知晓这一消息之后,Gab 创始人 Andrew Torba 发表声明强烈谴责了相关的组织以及传播的记者。

图片

不过,就在谴责泄露组织及相关人员之际,Gab 内部也对网站的整体安全进行了审查。然而万万没想到的是,在快速浏览了 Gab 的开放源代码之后,竟然发现关键漏洞(至少有一个非常类似的漏洞)是源自 Gab CTO 提交的代码。

据外媒报道,通过查看 Gab 公司提交的“Git commit”更改记录中发现,今年2月,有一个名为 Fosco Marotto 的软件开发者,提交了一份代码。在这份代码中存在一个很明显的错误类型,而这往往是新手才容易犯的错误,即第23行代码中,拆分了“reject”和“filter”代码,这两个 API 函数实现了防止 SQL 注入攻击的编程习惯。

图片

这种惯用的方法可以帮助程序员能够以安全的方式编写 SQL 查询功能,且可以“清理”网站访问者在搜索框和其他 Web 网站中输入的字段,借此来确保在将文本传递给后端服务器之前,先清除掉所有恶意命令。

不过,开发者也需要向一个包含“find_by_sql” 方法的 Rails 函数添加了一个调用,这一方法直接在查询字符串中接受未经过滤的输入(Rails 是一种广泛使用的网站开发工具包)。

对此,Facebook 的前产品工程师 Dmitry Borodaenko 在一封电子邮件中写道,“ 或许 Rails 的官方文档没有警告过用户存在这个陷阱,但是,如果作为开发者,完全了解在 Web 应用程序中使用 SQL 数据库的任何知识,那么,相信你也听说过 SQL 注入,由此也不难发现“find_by_sql”方法不正确的警告。”

同时, Dmitry Borodaenko 指出,“现在并非能够100% 确认这是在 Gab 数据泄露中使用的漏洞,但是不排除可能性,现在 Gab 团队已经将其在 GitLab 存储库中提交的最新代码恢复到了上一版本 。”

那么,要问 Fosco Marotto 是何许人也?

据悉,Fosco Marotto 此前在 Facebook 作为软件工程师任职7年,2020年11月,正式加入 Gab 平台担任 CTO 一职。针对上面所犯的错误,也颇具有讽刺意义的是,Fosco 曾在2012年提醒过其他程序员,一定要使用参数化查询来防止 SQL 注入漏洞。

如今,Gab 已从其网站删除了 Git commit。

修正主义者的历史

然而又是这一举措,Gab 再次成为众矢之的。

作为一家创业型的开源社交网络服务平台,其支持言论自由,也一直被视为 Twitter 的最佳替代品,不过,Gab 此次在没有任何解释之下,直接删除提交的代码,引发业界不小争议。

对此,有批评人士称,此举违反了 Affero 通用公共许可的条款,该许可将规范 Gab 对 Mastodon(用于托管社交网络平台的开源软件包)的重用。

据公开资料显示,GNU Affero 通用公共许可协议是一个广泛被使用的自由软件许可协议,其改自 GNU 通用公共许可协议,并加入额外条款,其目的是为了 Copyleft 条款应用于在网络上运行的应用程序(如 Web 应用),从而避免有人以应用服务提供商方式逃避 GNU 通用公共许可协议。

批评人士表示,Gab 的删除行为违反了要求从网站直接链接到分叉源代码的条款。这些要求旨在提供公开、透明度,并使其他开放源代码开发者可以从 Gab 的同行中受益。

据报道,Gab 一直都是在 https://code.gab.com/ 上提交代码的。

但是,本星期一,Gab 突然删除了所有提交,包括那些创建并修复了严重 SQL 注入漏洞的提交。取而代之的是,Gab 使用了 Zip 存档文件的形式提供了源代码,该文件受密码“ JesusChristIsKingTrumpWonTheElection”的保护。

截止目前,据 Gab Git commit 显示,该公司的开发者也正在努力修复其易受攻击的代码。正如下图所示,一位用户名为“ developer”的开发者正在尝试完全修复包含 SQL 注入漏洞的代码,但最终并未成功。

图片

网友:不足为奇

针对这样的错误,也引发了不少网友的讨论:

  • 一点都不足为奇。在某一时刻,当他们有一个 API 时,我可以跟踪和看到在网站上看不到的"锁定"帐户中的信息。我对他们网站反馈了这一问题,他们回复说:“哦, 是的, 我们现在正在做很多改变,”然后从来没有修复过这一 Bug。

  • 对于企业而言,CTO 应该专注于战略层面,手里下应该会有1-2位开发者来领导日常的开发工作,并针对此类基本问题(或使用代码分析器)进行代码审查,以检测 sql、xss、xsrf、会话管理、基于密码的用户数据加密、消息加密和其他琐事。这并不是说我喜欢 Gab 这家公司,但我不知道有多少这样的新手错误,然后最终会被归咎于"外包公司"。

  • 这是糟糕的代码, 有点让我吃惊的是, 一个前 Facebook 工程师写了它 (后来成为 CTO),显然,Gab 并没有雇佣到一位最优秀、最聪明的 CTO。 

对此,你怎么看?