以下轉至https://www.facebook.com/share/p/1GeFn6EqtC/
你可能很難想像,世界級科技巨頭 Google 也會犯下把家門鑰匙直接掛在門把上的低級錯誤。(很扯很扯這種)
而且這個錯誤,價值 9 萬美元,折合新台幣將近兩百九十萬元。
故事的主角是一位資安研究員 Simon Koeck,他在研究 Google 開發者網站的登入流程。
一般來說,當你點擊登入頁面,伺服器只會發給你一張小小的通行證,也就是所謂的 Cookie。
這張通行證通常只有幾十個位元組,用來記錄簡單的驗證資訊。
但他拿到的這塊餅乾,體積卻高達一千兩百個位元組,顯然裝了不該裝的東西。
在 Flask 框架的架構下,這類資料預設只有簽名防竄改,本身完全沒有加密。
於是他順手把封包解開,裡面的內容讓他當場愣住。
封包裡面除了完整的 Python 物件,還大剌剌寫著 Google 官方的客戶端識別碼與金鑰密碼。
更離奇的還在後頭。
照理說,防止通行證被偽造的那道簽名防線,應該由伺服器私下妥善保管的密鑰來計算。
他抱著半信半疑的心態,拿剛剛外洩的那把金鑰密碼去驗算。
答案居然完全吻合。
也就是說,Google 把用來鎖門的鑰匙,直接裝在包裹裡寄給了路人。
既然能自行偽造合法簽名,代表通行證裡的任何內容都可以被任意竄改。
而 Google 後端伺服器在讀取這份資料時,偏偏使用了資安界公認最危險的資料還原機制。
這項機制允許攻擊者夾帶自訂指令,並強迫伺服器全盤照單全收。
這在資訊安全領域被稱為遠端程式碼執行,等於把整台伺服器的掌控權直接奉送給對方。
為了不對正式系統造成破壞,研究員採用了一種優雅的驗證方式。
他在封包裡塞入讓伺服器強制沉睡數秒的指令。
指令發出後,伺服器不多不少,剛好精準延遲了對應的時間才做出回應。
這證明程式碼確實被 Google 的主機執行了。(#RCE)
因為架構共用的關係,這個問題一次波及了 Google 旗下的七個大型開發者網域。
研究員隨後提交了這份通報,Google 也以極高效率迅速完成修復。
官方原本的最高漏洞懸賞金額是 75,000 美元。
但因為這份通報內容完整、邏輯嚴謹,官方審查團隊額外給予加成獎勵。
最終發出的獎金達到了整整 90,000 美元。
這場資安事件給了所有軟體工程師一個昂貴且深刻的提醒。
不要把機密金鑰裝進給使用者的資料裡,更不要隨意信任任何未經檢驗的外部輸入。
即便是全世界最頂尖的科技公司,偶爾也會在最基礎的地方跌跤。
原英文網站
https://simonkoeck.com/writeups/google-devsite-flask-session-pickle-rce


