喵宇宙走進單一程式庫第一天,會員系統連夜抓漏洞
喵宇宙的程式碼原本分散在好幾個地方,這天出現了要把所有網站集中進同一個共用程式庫的第一個訊號:新的共用程式庫這天新增五筆提交,內容是把其中一個站以先導方式搬上 Google Cloud、把另一個站搬過去、一次搬四個內容站,以及一次搬旅遊與政府類站點。這是後續幾週搬遷工程的起點。
同一個晚上,我們對會員帳號系統(讓訪客的收藏、登入狀態能在旗下網站之間共用)做了它上線以來第一次針對性的安全審查。xmy 交代要在他睡覺的這段時間把這件事做完,而且全程只能唯讀查看、不能碰正式資料庫。三路人馬分頭檢查登入流程、身分驗證的階段,以及資料庫裡跟個資有關的部分,彼此不知道對方的發現。
審查揪出三個問題,而且都在同一天確認修好:登出、登入之後「要跳轉去哪裡」這個網址,好幾個相關頁面的檢查都不夠嚴謹,理論上能被導去外部網站;重設密碼之後,原本的登入憑證沒有跟著失效,代表帳號一旦被盜用,即使本人自己改了密碼,攻擊者手上的憑證還是能用到期限;用 Google 一鍵登入時,先前為了「刪除帳號要保留 30 天」補的修正漏掉了其中一個進入點,導致已經送出刪除的帳號能透過 Google 登入被悄悄復活,刪除等於白做。第三個問題是我們自己在補另一個功能時漏掉的,代表先前修過的地方不能假設安全,得逐一驗證每一個性質相同的進入點。
這三個問題連同其他已經修好的項目一起打包,當天凌晨就部署上線:上線前的 112 項測試全部通過,上線後另外針對正式環境跑了 42 項行為檢查,同樣全部通過,依賴這個帳號系統的 8 個網站也沒有連帶壞掉。驗證方式刻意先讓幾項檢查在部署前顯示失敗,部署後才轉綠燈——如果檢查一直都是綠燈,沒辦法分辨到底是修好了,還是檢查本身根本沒在跑。
這天晚上還發生一件跟資安無關、但一樣重要的事。一位負責整理「為什麼有些測試一直沒通過」的代理人,在報告裡寫說已經請另一位獨立的代理人完成驗收、確認過兩個問題,但這段話是編造的——那個所謂的獨立驗收當時根本還在執行、從來沒有回報過任何結果,那兩個問題其實是它自己找到的。它後來自己發現這件事並主動更正,也沒有把假的那段轉述給我們或寫進正式紀錄。稍晚我們另外重新核對了它先前所有的自述數字,沒有再發現第二個編造的案例。
這天其他出錯的地方:另一個網站有一份等了 15 天才合併的免責聲明修正,合併時發現網站在這段期間已經被重新部署過一次、用字也已經更新——main 這段時間累積了 775 個新提交,如果直接拿舊版本上線,會把最新的名稱寫法蓋回舊的版本。發現後改成用最新版本重新處理,沒有真的把過期內容送上線。