安全性更新

您可以在此處找到針對Apache Groovy釋出的安全補丁或更新的相關資訊。請注意,除非另有說明,否則不提供二進位或源程式補丁。要獲取安全性修補程式,您需要升級到Apache Groovy的最新維護版本。

2.4.4版本之前的版本未在Apache下釋出,因此舊版本的安全性更新並無官方補丁。

CVE-2015-3253 Apache Groovy資訊泄露

嚴重性:重要

供應商:Apache Software Foundation

受影響版本

  • 1.7.0至2.4.3之間的不支援Codehaus版本的Groovy

  • 已修復於版本2.4.4

影響

執行不受信任的程式碼,DoS(拒絕服務)

描述

當應用程式具有Groovy在類路徑上並使用標準的Java序列化機制在伺服器之間進行通訊,或存儲本地資料時,攻擊者可以製作一個特殊的序列化對象,當對象被反序列化時直接執行程式碼。所有依賴序列化且不隔離反序列化對象的程式都會受到此漏洞的影響。

緩解措施

Apache Groovy 2.4.4是Apache Software Foundation的第一個受支援的版本。強烈建議所有使用序列化的使用者升級到此版本。如果您無法升級或依賴於舊版不受支援的Groovy,您可以在MethodClosure類上應用以下補丁(src/main/org/codehaus/groovy/runtime/MethodClosure.java

 public class MethodClosure extends Closure {
+    private Object readResolve() {
+        throw new UnsupportedOperationException();
+    }

或者,您應確保使用自訂的安全性策略檔(使用標準的Java安全管理員)或確保您不依賴序列化來遠程通訊。

鳴謝

此漏洞由

  • 與HP的Zero Day Initiative合作的cpnrodzc7發現

參考資料

CVE-2016-6814 Apache Groovy 資訊泄露

嚴重性:重要

供應商:Apache Software Foundation

受影響版本

  • 1.7.0至2.4.3之間的不支援Codehaus版本的Groovy

  • Apache Groovy 2.4.4 到 2.4.7

  • 修復版本為 2.4.8

影響

執行不受信任的程式碼,DoS(拒絕服務)

描述

當具有 Groovy 在類路徑中的應用程序使用標準的 Java 序列化機制,例如用於服務器之間的通信或存儲本地數據時,攻擊者可以製作一個特殊的序列化對象,當被反序列化時將直接執行代碼。所有依賴序列化並且未隔離反序列化對象的代碼的應用程序都會受到此漏洞的影響。這與 CVE-2015-3253 相似,但此利用包括對對象的額外包裝和捕獲異常的操作,現在已經得到安全防護。

緩解措施

使用受影響版本的 Groovy 並依賴 (反)序列化的用戶應該應用以下其中一種緩解措施

  • 隔離執行 (反)序列化的代碼

  • 升級到 Apache Groovy 2.4.8 或更高版本

  • 使用舊版本 Groovy 的用戶可以對 MethodClosure 類(src/main/org/codehaus/groovy/runtime/MethodClosure.java)應用以下修補程式

public class MethodClosure extends Closure {
+    private void readObject(java.io.ObjectInputStream stream) throws
IOException, ClassNotFoundException {
+        if (ALLOW_RESOLVE) {
+            stream.defaultReadObject();
+        }
+        throw new UnsupportedOperationException();
+    }

鳴謝

此漏洞由

  • Pentest Limited 的 Sam Thomas 與 Trend Micro 的 Zero Day Initiative 合作

歷史

  • 2016-09-20 原始建議

  • 2017-01-12 更新受影響版本的信息

參考資料

CVE-2020-17521 Apache Groovy 資訊泄露

嚴重性:重要

供應商:Apache Software Foundation

受影響版本

不支持的 Codehaus 版本的 Groovy 從 2.0 到 2.4.4。Apache Groovy 版本 2.4.4 到 2.4.20、2.5.0 到 2.5.13、3.0.0 到 3.0.6 和 4.0.0-alpha-1。

修復版本為 2.4.21、2.5.14、3.0.7、4.0.0-alpha-2

影響

此漏洞可能影響類 Unix 系統和非常舊的 Mac OSX 和 Windows 版本。在這些操作系統版本上,Groovy 可能在操作系統臨時目錄中創建臨時目錄,該目錄在受影響系統上的所有用戶之間共享。當生成 Java Stub (影響非常小)或代表用戶代碼通過兩個擴展方法[4,5]來創建臨時目錄時,Groovy 將為內部使用創建這些目錄。如果 Groovy 用戶代碼使用這兩個擴展方法之一,並且將可執行代碼存儲在生成的臨時目錄中,則風險很高,因為這可能導致本地權限提升。如果此類 Groovy 代碼使用臨時目錄存儲敏感信息,則風險中等,因為此類信息可能會被公開或修改。

在分析此漏洞的影響時,以下是需要考慮的重要問題

Groovy 代碼是否運行在受影響操作系統的機器上?其他用戶是否可以訪問運行 Groovy 代碼的機器?Groovy 代碼是否使用 Groovy 的 createTempDir 擴展方法[4,5] 創建臨時目錄?

如果您對以下任何問題回答「否」,則不受影響。 如果您回答「是」,Groovy 代碼是否寫入或存儲可執行代碼到臨時目錄?如果您回答「是」,風險較高,可能導致本地特權升級。Groovy 代碼是否將敏感信息,如 API 密鑰或密碼,寫入臨時目錄?如果您回答「是」,風險為中等,可能導致信息曝露或修改。

描述

Groovy 曾使用JDK中的一個方法,現在被標記為不適合於安全敏感的上下文。此外,Groovy 未檢查與臨時目錄成功創建相關的標誌,這導致競爭條件存在,進而產生漏洞[1]。

對於修復版本,Groovy 2.5及更高版本現在使用一個新的 JDK 方法,創建一個只能由運行 Groovy 代碼的用戶讀取的目錄。對於修復的 Groovy 2.4 版本也是如此,除非在 JDK7 之前的 JDK 上運行,在這種情況下將使用後備實現,該實現現在檢查臨時目錄的成功創建。這消除了涉及競爭條件的高風險場景,其中可執行文件或信息可能被修改,但仍然存在敏感信息泄露的可能性。建議 Groovy 2.4/JDK 6 用戶使用 java.io.tmpdir 的緩解方法。

緩解措施

java.io.tmpdir 系統環境變量設置為僅由執行用戶擁有的目錄,將為所有操作系統和所有 Groovy 版本修復此漏洞。

無法輕鬆升級到修復的 Groovy 版本的用戶可能希望考慮使用 JDK 的 Files#createTempDirectory 方法,而不是使用 Groovy 的擴展方法。

鳴謝

此漏洞由Jonathan Leitschuh發現(https://twitter.com/jlleitschuh)。

類似的漏洞

參考資料

問題回報

Apache 軟體基金會對其軟體產品中的安全問題採取非常積極的態度。如果您對如何安全地配置或使用 Groovy 有疑問,應該將其發送至用戶郵件列表 (郵件列表)。如果您因 Groovy 軟體中的漏洞而發現任何安全問題,應該在錯誤追蹤器中提出問題。Apache 軟體基金會設有專門的安全團隊,在需要時您可以聯繫他們。