資安研究公司 Aikido Security 近日揭露一起針對 OpenAI Codex 開發者的軟體供應鏈攻擊。攻擊者透過 npm 套件與 Android 應用程式兩條管道,同步竊取開發者的身分驗證金鑰(authentication token),其中 refresh_token 不會過期的特性,使攻擊者得以無限期冒充受害者身分,構成長期潛伏威脅。
功能套件暗藏竊密程式碼
名為 codexui-android 的 npm 套件以「OpenAI Codex 遠端網頁介面」為名對外推廣,每週下載次數逾 2.9 萬次,目前仍可從套件庫下載取得。
此攻擊手法有別於常見的錯字搶註(typosquatting)或一次性惡意套件。Aikido Security 研究員 Charlie Eriksen 指出,惡意程式碼約在套件首次發布一個月後才被植入,攻擊者刻意先建立使用者信任、擴大散布範圍,再伺機引入惡意變更。對應的 GitHub 儲存庫程式碼並未出現異常,惡意內容僅存在於 npm 的建置版本中。
植入的惡意程式碼會讀取 Codex 存放於 ~/.codex/auth.json 的身分驗證檔案,並將資料外洩至偽裝成應用程式監控平台 Sentry 的攻擊者伺服器(sentry.anyclaw[.]store)。遭竊資料涵蓋四類憑證:存取金鑰(access_token)、更新金鑰(refresh_token)、身分金鑰(id_token)及帳號 ID。
Eriksen 特別強調 refresh_token 的高風險性:此類金鑰不會過期,攻擊者一旦取得,即可無限期、靜默地以受害者身分存取系統,無需重新發動攻擊。OpenAI 官方文件亦明確警告,
~/.codex/auth.json 應視同密碼保管,嚴禁提交至版本控制、貼入工單或透過任何管道分享。
網域 WHOIS 記錄顯示,anyclaw[.]store 於 2026 年 4 月 12 日完成註冊,距 npm 套件首個版本(0.1.72)上傳至 npmjs.com 僅兩天。套件作者在 X 平台的個人頁面中亦連結了該網域,形成明確關聯。
Android 應用程式構成第二條攻擊管道
Aikido 進一步發現,同一威脅行為者透過 Android 應用程式建立了第二條攻擊管道。名為「OpenClaw Codex Claude AI Agent」(套件名稱:gptos.intelligence.assistant)的應用程式,在其 PRoot 沙盒(sandbox)環境中執行上述 npm 套件,並將竊取的 Codex 憑證傳送至相同的外洩端點。該應用程式由名為「BrutalStrike」的開發者發布。
Aikido 說明,該 APK 體積僅 26 MB,在 Google Play 預發布掃描中未被標記為異常。應用程式首次執行時,會將基於 Termux 的 Linux 使用者環境解壓縮至應用程式私有儲存空間,並透過 PRoot 在其中執行 Node.js。由於套件版本未被固定,裝置每次均從 npm 拉取最新發布版本;使用者一旦登入,套件便會讀取沙盒內的 auth.json,並將完整的 OAuth 資料傳送至攻擊者伺服器。
同屬 BrutalStrike 旗下的另一款 Android 應用程式「Codex」同樣內建相同的外洩機制,安裝次數逾 1 萬次。該開發者發布的其餘三款應用程式則未發現相關惡意功能。
套件作者回應前後矛盾
Aikido 透過 GitHub 聯繫套件作者後,對方最初聲稱已失去 npm 帳號的存取權,隨後修改說法,改稱正在進行內部調查,並表示已著手移除相關功能與資料。作者另聲稱未將憑證資料分享給任何第三方,但始終未能回答兩項關鍵問題:惡意程式碼為何僅出現於 npm 套件建置版本,以及為何需要存取 Codex 金鑰。
憑證撤銷延遲問題同步受到關注
Aikido 同期亦揭露,即使 Google API 金鑰已刪除,撤銷後最長仍可能存活約 23 分鐘,中位數約為 16 分鐘。在此時間窗口內,持有外洩金鑰的攻擊者仍可存取使用者資料與相關 API(包含 Google Gemini)。研究員 Joe Leon 指出,若專案啟用了 Gemini,攻擊者可能傾印已上傳的檔案,並外洩快取的對話紀錄。Google 將此視為系統預期行為,以「Won't Fix(Infeasible)」為由關閉漏洞回報,拒絕修復。據外媒報導,類似的延遲撤銷問題此前也曾在 AWS 存取金鑰上被觀察到,存在約 4 秒的可利用時間窗口。
立即處置建議
針對受此事件影響的開發者,Aikido Security 提出以下處置措施:
- 立即從系統移除 codexui-android 套件,並撤銷所有 Codex 相關憑證
- 若曾安裝「OpenClaw Codex Claude AI Agent」(gptos.intelligence.assistant)或「Codex」(codex.app),應立即刪除應用程式並重新產生 Codex 金鑰
- 將 ~/.codex/auth.json 視同密碼保管,避免提交至版本控制或透過任何管道分享
- 導入開源 npm 套件前,審查套件的完整發布歷程與各版本變更內容
本文轉載自 TheHackerNews。