CTO 寫(xiě)低級(jí) Bug,致公司 70 GB 數(shù)據(jù)遭泄露!
原標(biāo)題:前有“程序員刪庫(kù)跑路”,后有 CTO 在網(wǎng)站后臺(tái)引入 Bug,導(dǎo)致公司 1.5 萬(wàn)賬戶信息外泄。
整理 | 蘇宓
出品 | CSDN(ID:CSDNnews)
近日,據(jù)外媒報(bào)道,美國(guó)開(kāi)源社交網(wǎng)絡(luò)服務(wù)平臺(tái) Gab 受到黑客攻擊,其中,包括一些知名人士在內(nèi)的 1.5 萬(wàn) Gab 賬號(hào)及個(gè)人信息遭到泄露。
據(jù)悉,一位未透露姓名的黑客利用 SQL 注入漏洞入侵 Gab 后臺(tái),并從數(shù)據(jù)庫(kù)中竊取了約 70 GB 數(shù)據(jù)提供給了爆料組織 Distributed Denial of Secrets(簡(jiǎn)稱 DDOSecrets)。這些數(shù)據(jù)包括了 7 萬(wàn)多條信息、4000 多萬(wàn)條帖子,以及哈希密碼、明文密碼、用戶個(gè)人資料等。
然而,在 Gab 公司審查并欲修復(fù)漏洞之際,竟然發(fā)現(xiàn)此 Bug 出自自家公司的 CTO 之手,而這究竟又是怎么一回事?
CTO 寫(xiě)的 Bug,后果很嚴(yán)重!
正如上文所述,Gab 公司在遭到黑客攻擊后,爆料組織 DDOSecrets 團(tuán)隊(duì)公開(kāi)發(fā)文表示,“正在將這些泄露的數(shù)據(jù)匯編成了一個(gè) GabLeaks 的文件,同時(shí)將對(duì)外分發(fā)共享此數(shù)據(jù)集,記者、學(xué)者以及研究者可以通過(guò)公開(kāi)渠道與其獲得聯(lián)系,對(duì)這些信息進(jìn)行研究學(xué)習(xí)?!?/p>
在知曉這一消息之后,Gab 創(chuàng)始人 Andrew Torba 發(fā)表聲明強(qiáng)烈譴責(zé)了相關(guān)的組織以及傳播的記者。
不過(guò),就在譴責(zé)泄露組織及相關(guān)人員之際,Gab 內(nèi)部也對(duì)網(wǎng)站的整體安全進(jìn)行了審查。然而萬(wàn)萬(wàn)沒(méi)想到的是,在快速瀏覽了 Gab 的開(kāi)放源代碼之后,竟然發(fā)現(xiàn)關(guān)鍵漏洞(至少有一個(gè)非常類似的漏洞)是源自 Gab CTO 提交的代碼。
據(jù)外媒報(bào)道,通過(guò)查看 Gab 公司提交的“Git commit”更改記錄中發(fā)現(xiàn),今年 2 月,有一個(gè)名為 Fosco Marotto 的軟件開(kāi)發(fā)者,提交了一份代碼。在這份代碼中存在一個(gè)很明顯的錯(cuò)誤類型,而這往往是新手才容易犯的錯(cuò)誤,即第 23 行代碼中,拆分了“reject”和“filter”代碼,這兩個(gè) API 函數(shù)實(shí)現(xiàn)了防止 SQL 注入攻擊的編程習(xí)慣。
這種慣用的方法可以幫助程序員能夠以安全的方式編寫(xiě) SQL 查詢功能,且可以“清理”網(wǎng)站訪問(wèn)者在搜索框和其他 Web 網(wǎng)站中輸入的字段,借此來(lái)確保在將文本傳遞給后端服務(wù)器之前,先清除掉所有惡意命令。
不過(guò),開(kāi)發(fā)者也需要向一個(gè)包含“find_by_sql” 方法的 Rails 函數(shù)添加了一個(gè)調(diào)用,這一方法直接在查詢字符串中接受未經(jīng)過(guò)濾的輸入(Rails 是一種廣泛使用的網(wǎng)站開(kāi)發(fā)工具包)。
對(duì)此,F(xiàn)acebook 的前產(chǎn)品工程師 Dmitry Borodaenko 在一封電子郵件中寫(xiě)道,“ 或許 Rails 的官方文檔沒(méi)有警告過(guò)用戶存在這個(gè)陷阱,但是,如果作為開(kāi)發(fā)者,完全了解在 Web 應(yīng)用程序中使用 SQL 數(shù)據(jù)庫(kù)的任何知識(shí),那么,相信你也聽(tīng)說(shuō)過(guò) SQL 注入,由此也不難發(fā)現(xiàn)“find_by_sql”方法不正確的警告?!?/p>
同時(shí), Dmitry Borodaenko 指出,“現(xiàn)在并非能夠 100% 確認(rèn)這是在 Gab 數(shù)據(jù)泄露中使用的漏洞,但是不排除可能性,現(xiàn)在 Gab 團(tuán)隊(duì)已經(jīng)將其在 GitLab 存儲(chǔ)庫(kù)中提交的最新代碼恢復(fù)到了上一版本 ?!?/p>
那么,要問(wèn) Fosco Marotto 是何許人也?
據(jù)悉,F(xiàn)osco Marotto 此前在 Facebook 作為軟件工程師任職 7 年,2020 年 11 月,正式加入 Gab 平臺(tái)擔(dān)任 CTO 一職。針對(duì)上面所犯的錯(cuò)誤,也頗具有諷刺意義的是,F(xiàn)osco 曾在 2012 年提醒過(guò)其他程序員,一定要使用參數(shù)化查詢來(lái)防止 SQL 注入漏洞。
如今,Gab 已從其網(wǎng)站刪除了 Git commit。
修正主義者的歷史
然而又是這一舉措,Gab 再次成為眾矢之的。
作為一家創(chuàng)業(yè)型的開(kāi)源社交網(wǎng)絡(luò)服務(wù)平臺(tái),其支持言論自由,也一直被視為 Twitter 的最佳替代品,不過(guò),Gab 此次在沒(méi)有任何解釋之下,直接刪除提交的代碼,引發(fā)業(yè)界不小爭(zhēng)議。
對(duì)此,有批評(píng)人士稱,此舉違反了 Affero 通用公共許可的條款,該許可將規(guī)范 Gab 對(duì) Mastodon(用于托管社交網(wǎng)絡(luò)平臺(tái)的開(kāi)源軟件包)的重用。
據(jù)公開(kāi)資料顯示,GNU Affero 通用公共許可協(xié)議是一個(gè)廣泛被使用的自由軟件許可協(xié)議,其改自 GNU 通用公共許可協(xié)議,并加入額外條款,其目的是為了 Copyleft 條款應(yīng)用于在網(wǎng)絡(luò)上運(yùn)行的應(yīng)用程序(如 Web 應(yīng)用),從而避免有人以應(yīng)用服務(wù)提供商方式逃避 GNU 通用公共許可協(xié)議。
批評(píng)人士表示,Gab 的刪除行為違反了要求從網(wǎng)站直接鏈接到分叉源代碼的條款。這些要求旨在提供公開(kāi)、透明度,并使其他開(kāi)放源代碼開(kāi)發(fā)者可以從 Gab 的同行中受益。
據(jù)報(bào)道,Gab 一直都是在 https://code.gab.com/ 上提交代碼的。
但是,本星期一,Gab 突然刪除了所有提交,包括那些創(chuàng)建并修復(fù)了嚴(yán)重 SQL 注入漏洞的提交。取而代之的是,Gab 使用了 Zip 存檔文件的形式提供了源代碼,該文件受密碼“ JesusChristIsKingTrumpWonTheElection”的保護(hù)。
截止目前,據(jù) Gab Git commit 顯示,該公司的開(kāi)發(fā)者也正在努力修復(fù)其易受攻擊的代碼。正如下圖所示,一位用戶名為“ developer”的開(kāi)發(fā)者正在嘗試完全修復(fù)包含 SQL 注入漏洞的代碼,但最終并未成功。
網(wǎng)友:不足為奇
針對(duì)這樣的錯(cuò)誤,也引發(fā)了不少網(wǎng)友的討論:
一點(diǎn)都不足為奇。在某一時(shí)刻,當(dāng)他們有一個(gè) API 時(shí),我可以跟蹤和看到在網(wǎng)站上看不到的"鎖定"帳戶中的信息。我對(duì)他們網(wǎng)站反饋了這一問(wèn)題,他們回復(fù)說(shuō):“哦, 是的, 我們現(xiàn)在正在做很多改變,”然后從來(lái)沒(méi)有修復(fù)過(guò)這一 Bug。
對(duì)于企業(yè)而言,CTO 應(yīng)該專注于戰(zhàn)略層面,手里下應(yīng)該會(huì)有 1-2 位開(kāi)發(fā)者來(lái)領(lǐng)導(dǎo)日常的開(kāi)發(fā)工作,并針對(duì)此類基本問(wèn)題(或使用代碼分析器)進(jìn)行代碼審查,以檢測(cè) sql、xss、xsrf、會(huì)話管理、基于密碼的用戶數(shù)據(jù)加密、消息加密和其他瑣事。這并不是說(shuō)我喜歡 Gab 這家公司,但我不知道有多少這樣的新手錯(cuò)誤,然后最終會(huì)被歸咎于"外包公司"。
這是糟糕的代碼, 有點(diǎn)讓我吃驚的是, 一個(gè)前 Facebook 工程師寫(xiě)了它 (后來(lái)成為 CTO),顯然,Gab 并沒(méi)有雇傭到一位最優(yōu)秀、最聰明的 CTO。
對(duì)此,你怎么看?
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!