本篇文章探討的也是資安系列問題,而這次的目標主角則是 MAC 系統上廣為流傳的 Homebrew 系統。
結論:
作者透過觀察 Homebrew 的 Github Action 流程,成功得上傳一個會列印一行的程式碼到 iterm2 套件中,讓所有安裝的使用者都會於 Terminal 上看到一行作者客製化的訊息。
本次的漏洞是作者刻意從 Homebrew 的 Vulnerability Disclosure Program 專案中去嘗試尋找可能的問題,所有的操作都有跟官方專案的人探討過流程,並且一切的 PoC 都是單純證明該攻擊的可行性,所以有興趣研究的人請遵循一樣的想法去做,不要認真的想攻擊。
原因:
1. Homebrew 透過 Github Action 執行 CI/CD 動作
2. Homebrew 撰寫了一個自動合併 Pull Request 的 Action
3. CI 內會透過一個Ruby的 Git Diff 第三方函式庫來驗證,只要符合下列條件就可以自動合併
- Modifying only 1 file
- Not moving/creating/deleting file
- Target filepath matches \ACasks/[^/]+\.rb\Z
- Line count of deletions/additions are same
- All deletions/additions matches /\A[+-]\s*version "([^"]+)"\Z/ or - -\A[+-]\s*sha256 "[0-9a-f]{64}"\Z
- No changes to format of versions (e.g. 1.2.3 => 2.3.4)
作者一開始想要從該規則下手,找尋有沒有可能塞入惡意攻擊並且騙過系統讓其自動合併,然而這些規則看起來沒有什麼太多問題,於是作者轉往其他領域去找尋問題,其中一個想法就是到底該 Ruby 的 Git Diff 是如何實作,也許從實作下手更有辦法去欺騙這一切。
很順利的是,作者真的於該函式庫中找到問題,對於一個 Git Diff 的結果來說,該函式庫會透過 +++ "?b/(.*) 這樣的正規表達式來判別檔案路徑的資訊而並非程式修改內容,譬如下列 diff
```
diff --git a/source file path b/destination file path
index parent commit hash..current commit hash filemode
--- a/source file path
+++ b/destination file path
@@ line information @@
Details of changes (e.g.: `+asdf`,`-zxcv`)
```
作者就開始思考,如果讓程式碼可以符合 +++ "?b/(.*) 的規則,是否有辦法讓程式碼不被視為一個檔案的修改,因此就可以修改多行程式碼但是讓 CI 系統認為只有一行程式碼於是進行自動合併
作者最初的想法如下,第一行用來放惡意程式碼,第二行用來偽裝檔案路徑,經過一番嘗試後作者真的成功塞入了類似 PRINTF 的程式碼到環境中並觸發自動合併。接者各地使用者透過 brew 安裝 iterm 版本都會看到使用者塞入的程式碼。
```
++ "b/#{Arbitrary codes here}"
++ b/Casks/cask.rb
```
原文還有更多作者的思路過程,有興趣的不要錯過
原文:
https://blog.ryotak.me/post/homebrew-security-incident-en/#fn:7
測試用PR:
https://github.com/Homebrew/homebrew-cask/pull/104191
「iterm2 github」的推薦目錄:
iterm2 github 在 紀老師程式教學網 Facebook 的最佳貼文
來看看世界級的網頁工程師用什麼環境開發程式?
NetTuts+ 最近發表了一篇文章,訪問了 15 位世界級的網頁工程師,詢問他們下列四個問題:
1. 你主要的工作是什麼?
2. 你用什麼樣的電腦開發程式?
3. 你用什麼樣的軟體來撰寫程式碼?
4. 哪些軟體你不用會死
結果...清一色全部用 Mac 系統啊!我之前也建議,Mac 有比 Windows 更友善的介面,但又使用 FreeBSD 這顆 Unix 家族的強力引擎,兼具 Linux 的強大。真的是軟體工程師的上上之選哪~(個人也已經使用快一年了)。
另外,寫碼工具也由 Sublime Text 獲得壓倒性勝利!我之前也在這個版推薦過好幾次。真的非常鼓勵程式師們去學啊!
原文在此,順便幫大家翻譯一下:
http://net.tutsplus.com/articles/what-are-you-using/
Scott Gonzalez: jQuery UI 主要作者之一
* 主要工作:JavaScript & Node.js
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text + TrailingSpaces, Pretty JSON, GitGutter, Markdown Preview 四個外掛
* 必備軟體:Git/GitHub, Apache, Chrome, Linkinus, Skype, Node
Raymond Camden: Adobe 資深工程師,制定各種網頁標準
* 主要工作:制定各種網頁標準
* 硬體平台:MacBook Pro
* 開發工具:Brackets
* 必備軟體:Chrome, Brackets, Tweetdeck, Evernote
John-David Dalton: jsPerf 與 Benchmark.js 作者,JavaScript 狂熱愛好者
* 主要工作:撰寫各種函式庫
* 硬體平台:MacBook Pro
* 開發工具:Komodo Edit
* 必備軟體:Total Finder, Chrome/Firefox/Opera/Safari/IE, Node, Ringo, Rhino, Narwhal
Stephanie Sullivan Rewis: HOW Design, UI16, An Event Apart, Microsoft’s MIX, Macworld, SXSW, Adobe Max 等大型研討會策展人
* 主要工作:前端網頁開發(HTML/CSS/JavaScript)
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text
* 必備軟體:CodeKit, Tower, HipChat, Fireworks, Chrome
Christian Heilmann: Web 技術專欄作家
* 主要工作:科技文章撰寫
* 硬體平台:MacBook Air
* 開發工具:Sublime Text
* 必備軟體:瀏覽器, Git, IRC, Dropbox, Spotify
Ryan Grove: SmugMug 這個 JavaScript 元件的作者
* 主要工作:JavaScript 函式庫撰寫
* 硬體平台:Mac Pro(桌機,工作站等級)
* 開發工具:Sublime Text
* 必備軟體:Sublime Text, JSHint, Adium, Tower, Dropbox, Rsync, Arg, Gmail, GitHub, Chrome, Google Hangouts...等
Cody Lindley
* 主要工作:前端網頁技術(HTML/CSS/JavaScript)
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text
* 必備軟體:SmartGit, Sublime, Divvy, JumpCut, Skype, Chrome...等。
Luke Smith: YUI 這個 JavaScript 函式庫的主要作者
* 主要工作:JavaScript 函式庫撰寫
* 硬體平台:MacBook Air
* 開發工具:Vim
* 必備軟體:Vim, Git
Chris Williams: SaferAging 副總,JSConf US 與 RobotsConf 會議主席
* 主要工作:各類硬體感知器的程式撰寫
* 硬體平台:Mac Pro, MacBook Air, Mac Mini
* 開發工具:Sublime Text 3
* 必備軟體:Sublime Text, iTerm2, Fish Shell, Wunderlist
Aaron Newton: Thanx 專案經理
* 主要工作:HTML5
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text
* 必備軟體:CloudApp, Jing, Sequel Pro, Jumpcut, Total Terminal, GitX
Ben Cherry: Pushd 工程師
* 主要工作:Ruby, iOS, JavaScript
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text
* 必備軟體:Sublime Text 2, iTerm 2, Chrome, 1Password, Gmail, Flipboard, Twitter, Facebook, Reddit
Jacob Thornton: @medium, Bootstrap, Bower 等知名 JavaScript 函式庫作者
* 主要工作:HTML, CSS, JavaScript
* 硬體平台:MacBook Pro
* 開發工具:Sublime Text 2
* 必備軟體:Rdio
Lea Verou: W3C 委員會開發者
* 主要工作:HTML, CSS, JavaScript
* 硬體平台:MacBook Air
* 開發工具:Espresso
* 必備軟體:Espresso, Transmit, CodeKit, Adobe Illustrator, Chrome, Safari, Firefox, Opera, WebKit nightlies, Chrome Canary
Jonathan Snook: Shopify 工程師
* 主要工作:HTML/CSS/JavaScript
* 硬體平台:MacBook Air
* 開發工具:Vim
* 必備軟體:Vim, Chrome,
Peter Wagenet: Ember 這個 JavaScript 函式庫的主要成員
* 主要工作:JavaScript
* 硬體平台:MacBook Air
* 開發工具:Sublime Text 3
* 必備軟體:Chrome, Firefox, Adium, GTalk, Twitter, Divvy, 1Password, Bartender