天天看點

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

編譯 | 核子可樂、Tina

開源的黑暗面:faker.js 到底發生了什麼?

流行開源包“colors”與“faker”的使用者們最近剛剛遭遇一場意外,毫無征兆的破壞導緻應用程式在使用這些包後開始輸出無法了解的亂碼資料。這背後的原因竟然是開源軟體包的作者 Marak Squires 故意引入了一個無限循環,讓數千個依賴于“colors”與“faker”包的應用程式全面失控。

colors.js 是一個用于處理顔色的 JavaScript 庫,而 faker.js 是一個用于生成假資料的 JavaScript 庫。在建構和測試應用程式時,假資料很有用,faker.js 可以為各個領域生成虛假資料,包括位址、商業、公司、日期、财務、圖像或名稱。

這兩個包特别受開發者歡迎,其中單是 colors 包在 npm 上就擁有每周 2000 多萬次下載下傳量,依賴于它的項目近 19000 個。此外,faker 在 npm 上每周下載下傳量也超過 280 萬次,相關項目超 2500 個,faker 的受歡迎程度可媲美于 Vue。因為這些開源軟體的應用特别廣泛,是以這個事件影響也特别深遠。

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

開源革命,還是開源暴動?

這兩套高人氣開源 npm 包“colors”(在 GitHub 上名為 colors.js)與“faker”(在 GitHub 上名為 faker.js)背後的開發人員故意在代碼中引入了錯誤内容,相應送出進一步對依賴這些包的成千上萬應用程式造成影響。

就在昨天,Amazon 雲開發工具包(aws-cdk)等開源項目使用者,突然發現自己的應用程式開始在控制台上瘋狂輸出亂碼消息。

這些消息中包含大量“LIBERTY LIBERTY LIBERTY”(自由)字樣,之後還跑着一大堆非 ASCII 字元:

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

面對“faker”與“colors”項目傾瀉出的垃圾資料,使用者感到震驚錯愕 (GitHub)

最初,使用者懷疑這些項目使用的“colors”與“faker”包遭到了惡意入侵,類似于去年 coa、rc 和 ua-parser-js 等包被攻擊者劫持的狀況。但事實證明,令 colors 與 faker 陷入混亂的其實是由合法開發者故意送出的錯誤代碼。

開發者 Marak Squires 向 colors.js 包的 v1.4.44-liberty-2 版本中添加了“新的美國國旗子產品”,此項變更随後被推送至 GitHub 與 npm。

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

colors.js 惡作劇送出出自“Marak”之手 (GitHub)

新代碼中引入的無限循環會沒完沒了地運作,任何使用“colors”的應用程式都會在控制台上無休止地輸出由非 ASCII 字元序列組成的亂碼。

同樣的,faker 的惡作劇版本“6.6.6”也被釋出到了 GitHub 和 npm 之上。這位開發者還語帶嘲諷地表示,“我們注意到 v1.4.44-liberty-2 版本的 colors 中存在一項 Zalgo bug。”“我們正在努力解決這個問題,請大家靜待解決方案的釋出。”所謂 Zalgo 文本,指的就是因某些故障引發的非 ASCII 字元。

這位開發者的舉動似乎是在故意報複,希望反抗那些長期依賴于免費和社群支援軟體、但卻從不向社群做出回饋的大型企業和其他利用開源項目進行商業化盈利的使用者。

2020 年 11 月,Marak 就已經警告稱不會再“無償工作”來支援那些商業巨頭,并強調這些業務實體面前隻有兩條路:要麼選擇項目分叉,要麼以每年“六位數”的薪酬補償開源開發人員。

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

這位開發者之前曾寫道,“諸位,我不會再用自己的無償工作來支援那些财富五百強(以及其他小型公司)了。言盡于此。”“是以現在隻有兩個選擇,要麼給我發一份年薪六位數的用工合同,要麼趕緊分叉項目、找其他人接手。”

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

有趣的是,我們發現“faker”項目在 GitHub repo 上的 README 頁面(https://github.com/marak/Faker.js/)也被 Marak 改掉了,裡面赫然出現了“Aaron Swartz 到底經曆了什麼?”的字樣。

Swartz 是一位傑出的開發人員,他幫助建立了 Creative Commons、RSS 和 Reddit。他的貢獻對幾乎所有的 Web 開發人員都産生了深遠的影響。2013 年,年僅 26 歲的 Swartz 在一場法律糾紛中自殺身亡。

為了讓所有人都能免費通路資訊,這位黑客主義者從麻省理工學院的校園網絡 JSTOR 資料庫中下載下傳到數百萬篇期刊文章。據稱,他采用的方法是反複輪換自己的 IP 與 MAC 位址以繞過校方和 JSTOR 設定的技術屏蔽方案。但此番舉動也導緻 Swartz 面對違反《計算機欺詐與濫用法》的指控,一旦罪名成立,他最高可能被判處 35 年監禁。

事件引發軒然大波

Marak 的大膽舉動旋即引發軒然大波,各界紛紛就此事發聲。

部分開源軟體社群成員贊揚了這位開發者的勇敢行為,但也有人對他的過激舉動表示震驚。一位使用者在推文中寫道,“很明顯,colors.js 的作者因為拿不到報酬而抓狂……是以他決定每當有使用者加載他的包時都輸出一面美國國旗……這是什麼腦回路?”

也有人覺得這是“又一個開源開發者造成的流氓案件”,資訊安全廠商 VessOnSecurity 則公開指責此舉“不負責任”,并強調:“如果你不想有人用免費代碼組織商業業務,那别釋出這類代碼不就好了?這種無差别打擊的行為傷害到的不止是大企業,更是每一位使用開源代碼的使用者。此類行徑隻會打擊使用者的版本更新熱情,讓他們在每次更新時都提心吊膽。”

根據相關報道,GitHub 已經當機了這位開發者的賬戶,而群衆們對此也是議論紛紛:

下載下傳量和Vue一樣大的開源軟體被作者惡意破壞,數千款應用受到牽連

NPM 已經将 faker.js 包復原至先前版本,GitHub 則暫停了我對所有公共及私有項目的通路權限。那可是上百個項目,現在都通路不了了。#AaronSwartz --@marak

軟體工程師 Sergio Gómez 回應稱,“删改自己的代碼也違反到 GitHub 的服務條款了?這是赤裸裸的綁架!我們最好做好分散托管軟體源代碼的準備。”

另一位使用者也釋出推文稱,“不知道究竟是怎麼回事,但我自己所有的項目都托管在 GitLab 的私有執行個體上,以免遇上類似的狀況。永遠不要相信任何網際網路服務商。”

一位名叫 Piero 的開發者則指出,“Marak 搞亂了 faker 和 colors、影響到無數項目,難道還指望着自己能不受一點牽連?”

需要提醒大家一點,Marak 的此次過激行為發生在不久前影響巨大的 Log4j 漏洞事件之後。作為一套重量級開源庫,Log4j 在不同企業及商業實體開發的各類 Java 應用程式當中都有廣泛使用。而 Log4shell 漏洞的曝光引發越來越多 CVE,不少開源維護者不得不在休假期間無償幫助修複這些免費項目。

于是開源業界開始普遍擔憂,認為大企業們已經習慣于“壓榨”開源成果、不停消耗,但卻沒有給予足夠的回報來支援這些志願放棄空閑時間來維持關鍵項目的貢獻者。面對網民和 Bug 賞金獵人們的指責之詞,也有人憤然回擊,強調 Log4j 的維護者們“已經在夜以繼日地建構緩解方案,包括修複、撰寫文檔、送出 CVE 以及回複質詢等等。”

有使用者在推文中寫道,“對于此次 colors.js/faker.js 作者破壞自有軟體包的回應,恰恰說明很多企業開發者認為自己在道德上有權無償享用開源開發者的勞動成果、且無需給出任何回報。”“雖然免費開源軟體運動及其目标值得稱贊,但它最終讓許多非常有才華的人幻想破滅且變得貧窮,因為開源實際上并不是一種可行的商業模式。”

至于開源軟體生态到底能不能長久存續,恐怕隻有時間能給出答案。

與此同時,這裡要提醒 colors 與 faker 兩大 npm 項目使用者務必使用安全的包版本。比較穩妥的方法是降級至上個版本的 colors(例如 1.4.0)與 faker(例如 5.5.3)。

參考連結:

https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/

繼續閱讀