Gradio 5 的安全審查

釋出於 2024 年 10 月 10 日
在 GitHub 上更新

我們對 Gradio 5 進行了審計,以確保您的機器學習應用程式安全!

在過去幾年中,Gradio(每月 Pypi 安裝量超過 600 萬)已成為在 Python 中構建機器學習 Web 應用程式的預設方式。只需幾行程式碼,您就可以為影像生成應用程式、聊天機器人或任何其他型別的機器學習應用程式建立使用者介面,並使用 Gradio 的內建共享連結或 Hugging Face Spaces 與他人共享。

import gradio as gr
def generate(seed, prompt):  
    ...  
    return image
    
# gr.Interface creates a web-based UI
gr.Interface(
    generate,   
    inputs=[gr.Slider(), gr.Textbox()],  
    outputs=[gr.Image()]
).launch(share=True# share=True generates a public link instantly

我們對 Gradio 的目標是讓開發者能夠構建開箱即用且適用於機器學習用例的 Web 應用程式。這意味著您可以作為開發者輕鬆構建以下應用程式:

  • 輕鬆擴充套件到大量併發使用者
  • 儘可能多的使用者可以訪問
  • 提供一致的使用者介面、使用者體驗和主題
  • 在大量瀏覽器和裝置上穩定執行

……即使您不是擴充套件、可訪問性或 UI/UX 方面的專家!

現在,我們將 **Web 安全** 新增到此列表中。我們邀請了著名的網路安全公司 Trail of Bits 對 Gradio 進行獨立審計。他們發現的所有安全問題在 Gradio 5 釋出之前都已修復。

這意味著您使用 Gradio 5 **構建**的機器學習應用程式**將在 Web 安全方面遵循最佳實踐**,而無需對您的程式碼進行任何重大更改。

為什麼進行安全審計?

在過去幾年中,Gradio 團隊與社群合作,修補發現的安全漏洞。但隨著 Gradio 越來越受歡迎(Hugging Face Spaces 上目前有超過 470,000 個 Gradio 應用程式),確保安全性變得更加重要。

因此,在 Gradio 5 中,我們決定採用不同的方法——對 Gradio 程式碼庫進行**預防性**安全審計,以便您使用 Gradio 5 構建的機器學習應用程式預設是安全的。

我們邀請 Trail of Bits 對 Gradio 進行獨立和全面的審計。他們的 AI 和應用程式安全專家團隊在 4 種常見場景中識別了 Gradio 程式碼庫中的安全風險:

  • 本地執行的 Gradio 應用程式
  • 部署在 Hugging Face Spaces 或其他伺服器上的 Gradio 應用程式
  • 透過內建共享連結共享的 Gradio 應用程式
  • 源自 Gradio CI 流水線的供應鏈漏洞

然後,我們與 Trail of Bits 密切合作,為這些風險確定緩解策略。Gradio 的簡單易用性雖然對開發者有益,但也帶來了獨特的安全挑戰,因為我們不希望開發者需要設定 CORS 和 CSP 策略等複雜的安全措施。

在合作結束時,我們修復了 Trail of Bits 發現的所有安全風險。所有修復都經過 Trail of Bits 的驗證,並已包含在 Gradio 5.0 版本中。雖然無法證明不存在安全漏洞,但這對於確保您的 Gradio 應用程式安全邁出了重要一步。

主要發現

我們將在下文概述 Trail of Bits 發現的與上述 4 種場景對應的主要安全漏洞。為了透明和開源精神,我們正在**公開完整的安全報告**,報告中提供了每個問題的更多詳細資訊。

本地執行的 Gradio 應用程式

  • **TOB-GRADIO-1** 和 **TOB-GRADIO-2**:伺服器 CORS 策略配置錯誤,在已認證的 Gradio 伺服器上下文中,攻擊者可能在受害者訪問惡意網站時竊取訪問令牌並接管受害者賬戶。

部署在 Hugging Face Spaces 或其他伺服器上的 Gradio 應用程式

  • **TOB-GRADIO-3**:一個基於 GET 的完整讀取 SSRF,允許攻擊者向任意端點(包括使用者內部網路上的端點)發出請求並讀取響應。

  • **TOB-GRADIO-10**:任意檔案型別上傳,允許攻擊者在使用者的 Gradio 伺服器上託管 XSS 有效負載。在已認證的 Gradio 伺服器上下文中,攻擊者可能在受害者訪問攻擊者的惡意網站時利用此漏洞接管使用者賬戶。

  • **TOB-GRADIO-13**:一個競爭條件,允許攻擊者將使用者流量重定向到其伺服器並竊取上傳的檔案或聊天機器人對話。

  • **TOB-GRADIO-16**:在非常簡單的 Gradio 伺服器配置中,幾個元件的後處理功能可能允許攻擊者洩露任意檔案。

透過內建共享連結共享的 Gradio 應用程式

  • **TOB-GRADIO-19**:透過 nginx 配置錯誤導致 Gradio API 伺服器上以 root 使用者身份執行遠端程式碼 (RCE),該配置錯誤暴露了未經認證的 docker API。這允許攻擊者在圖中的第 2 步提供惡意主機和埠,並將所有 frp 隧道重定向到記錄所有使用者流量(包括上傳檔案和聊天框對話)的惡意伺服器。

  • **TOB-GRADIO-11**:frp-client 和 frp-server 之間通訊中缺乏健壯的加密,允許能夠攔截請求(圖上第 6 和第 7 步中的請求)的攻擊者讀取和修改進出 frp-server 的資料。

源自 Gradio CI 流水線的供應鏈漏洞

  • **TOB-GRADIO-25**:Gradio 倉庫中的幾個 GitHub Actions 工作流使用固定到標籤或分支名稱而不是完整提交 SHA 的第三方 Actions。這可能允許惡意行為者悄悄修改 Actions,從而可能導致應用程式釋出被篡改或秘密洩露。

  • 此外,一位 GitHub 安全研究員報告稱,如果攻擊者觸發工作流並巧妙地轉儲 GitHub 執行器的記憶體,我們的 GitHub actions 可能允許執行不受信任的程式碼和秘密洩露。

 

前景展望

我們非常感謝 Trail of Bits 對 Gradio 進行了全面的安全審計,並驗證了我們為 Gradio 5 實施的緩解措施。

展望未來,我們計劃繼續與安全社群合作,以識別和緩解 Gradio 中的安全問題。我們還在測試套件中添加了安全單元測試、專門用於識別潛在漏洞的模糊測試,並在 CI 中使用 Semgrep 等靜態分析工具來檢測程式碼中的常見安全問題並防止安全回溯。

我們致力於確保在繼續開發 Gradio 5(我們有很多計劃!)的同時,以優先考慮安全的方式進行,從而為使機器學習應用程式更好、更安全貢獻我們的一份力量。

立即安裝 Gradio 5

pip install --upgrade gradio

並開始構建您的第一個 Gradio 5 應用程式

社群

註冊登入以發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.