GLSA-202402-08:OpenSSL:多個弱點

high Nessus Plugin ID 189977

語系:

說明

遠端主機受到 GLSA-202402-08 中所述的弱點影響 (OpenSSL:多個弱點)

- OpenSSL 支援透過舊版 EVP_CIPHER_meth_new() 函式和相關函式呼叫建立自訂密碼。此函式在 OpenSSL 3.0 版本中已過時,建議應用程式作者改用新的提供者機制,以建置自訂密碼。OpenSSL 3.0.0 至 3.0.5 版未正確處理傳遞至 EVP_EncryptInit_ex2()、EVP_DecryptInit_ex2() 和 EVP_CipherInit_ex2() 函式 (以及其他名稱類似的加密和解密初始化函式) 的舊版自訂密碼。它沒有直接使用自訂密碼,而是錯誤地嘗試從可用的提供者處擷取等同的密碼。根據傳遞至 EVP_CIPHER_meth_new() 的 NID 找到等同的密碼。此 NID 應代表指定密碼的唯一 NID。不過,應用程式可能在呼叫 EVP_CIPHER_meth_new() 時將此值錯誤傳遞給 NID_undef。以此方式使用 NID_undef 時,OpenSSL 加密/解密初始化函式會將 NULL 密碼比對為等同,並將從可用的提供者處擷取此密碼。
如果已載入預設提供者 (或已載入提供此密碼的第三方提供者),此操作將會成功。使用 NULL 密碼表示純文字會作為密碼文字發出。
只有當應用程式使用 NID_undef 呼叫 EVP_CIPHER_meth_new(),並隨後在對加密/解密初始化函式的呼叫中使用時,才會受到此問題的影響。僅使用 SSL/TLS 的應用程式不受此問題影響。已在 OpenSSL 3.0.6 版中修正此問題 (受影響的是 3.0.0-3.0.5 版)。(CVE-2022-3358)

- 在 X.509 憑證驗證中可觸發緩衝區滿溢,特別是在名稱限制檢查中。請注意,此問題會在憑證鏈簽章驗證之後發生,且需要 CA 簽署惡意憑證,或是即使無法建構受信任的簽發者路徑,應用程式仍需繼續進行憑證驗證。讀取緩衝區滿溢可能導致當機,進而造成拒絕服務攻擊。理論上,這也可能導致私人記憶體內容 (例如私密金鑰或敏感純文字) 洩漏,但截至本公告發佈時,我們尚未發現任何可導致記憶體內容洩漏的有效攻擊。在 TLS 用戶端中,藉由連線至惡意伺服器即可觸發此問題。在 TLS 伺服器中,如果伺服器要求用戶端驗證且惡意用戶端連線,則可觸發此問題。(CVE-2022-4203)

- OpenSSL RSA Decryption 實作中存在計時型旁路,其足可在 Bleichenbacher 式攻擊中跨網路復原純文字。若要成功解密,攻擊者必須能夠傳送大量的試用訊息以進行解密。
此弱點會影響所有 RSA 填補模式:PKCS#1 v1.5、RSA-OEAP 和 RSASVE。例如,在 TLS 連線中,用戶端通常會使用 RSA 將加密的 pre-master 密碼傳送至伺服器。攻擊者若觀察到用戶端與伺服器之間存在真正連線,就可以利用此缺陷將試用訊息傳送至伺服器,並記錄處理這些訊息所用的時間。攻擊者獲得充足的訊息之後,便可復原用於最初連線的 pre-master 密碼,進而能夠解密透過該連線傳送的應用程式資料。(CVE-2022-4304)

- PEM_read_bio_ex() 函式會從 BIO 讀取 PEM 檔案,並剖析和解碼名稱 (例如:
CERTIFICATE)、任何標頭資料和承載資料。如果函式成功運行,則使用包含相關解碼資料之緩衝區的指標填入 name_out、標頭和資料引數。
呼叫者負責釋放這些緩衝區。攻擊者可以建構會產生 0 位元組承載資料的 PEM 檔案。在此情況下,PEM_read_bio_ex() 會傳回失敗程式碼,但會在標頭引數中填入已釋放的緩衝區指標。如果呼叫者也釋放此緩衝區,則會發生雙重釋放。這很可能會導致當機。能夠提供惡意 PEM 檔案進行剖析的攻擊者可利用此弱點發動拒絕服務攻擊。PEM_read_bio() 和 PEM_read() 函式是 PEM_read_bio_ex() 的簡單包裝函式,因此這些函式也會直接受到影響。其他一些 OpenSSL 函式也會間接呼叫這些函式,包括同樣容易遭受攻擊的 PEM_X509_INFO_read_bio_ex() 和 SSL_CTX_use_serverinfo_file()。若在 OpenSSL 內部使用部分此類函式,則不會受到影響,因為如果 PEM_read_bio_ex() 傳回失敗程式碼,呼叫者將不會釋放標頭引數。這些位置包括 PEM_read_bio_TYPE() 函式以及 OpenSSL 3.0 中引入的解碼器。OpenSSL asn1parse 命令行應用程式也受此問題影響。(CVE-2022-4450)

- 公開 API 函式 BIO_new_NDEF 是用於透過 BIO 串流 ASN.1 資料的協助程式函式。此函式主要用於 OpenSSL 內部,以支援 SMIME、CMS 和 PKCS7 串流功能,但也可能由終端使用者應用程式直接呼叫。此函式會接收來自呼叫者的 BIO,並在前面附加新的 BIO_f_asn1 篩選器 BIO 以形成 BIO 鏈結,然後將 BIO 鏈結的新標頭傳回給呼叫者。在某些情況下,例如,如果 CMS 收件人公開金鑰無效,則新篩選器 BIO 會被釋放,並且該函式會傳回 NULL 結果,表明失敗。但在此情況下,BIO 鏈結未經正確清理,且呼叫者傳送的 BIO 仍保留先前釋放的篩選器 BIO 的內部指標。如果呼叫者接著呼叫 BIO 上的 BIO_pop(),則會發生釋放後使用。這很可能會導致當機。此情況直接發生在內部函式 B64_write_ASN1() 中,其可能導致呼叫 BIO_new_NDEF(),並隨後在 BIO 上呼叫 BIO_pop()。此內部函式會接著由公開 API 函式 PEM_write_bio_ASN1_stream、PEM_write_bio_CMS_stream、PEM_write_bio_PKCS7_stream、SMIME_write_ASN1、SMIME_write_CMS 和 SMIME_write_PKCS7 呼叫。其他可能受到此弱點影響的公開 API 函式包括 i2d_ASN1_bio_stream、BIO_new_CMS、BIO_new_PKCS7、i2d_CMS_bio_stream 和 i2d_PKCS7_bio_stream。OpenSSL cms 和 smime 命令行應用程式受到類似影響。(CVE-2023-0215)

- 當應用程式嘗試使用 d2i_PKCS7()、d2i_PKCS7_bio() 或 d2i_PKCS7_fp() 函式載入格式錯誤的 PKCS7 資料時,可能會觸發讀取時解除參照指標無效。解除參照的結果是應用程式損毀,這可以導致拒絕服務攻擊。OpenSSL 中的 TLS 實作未呼叫此函式,但是第三方應用程式可能會對未受信任的資料呼叫這些函式。
(CVE-2023-0216)

- 當應用程式嘗試透過 EVP_PKEY_public_check() 函式檢查格式錯誤的 DSA 公開金鑰時,可能會觸發讀取時解除參照指標無效。這很可能會導致應用程式損毀。
使用者可對由未受信任的來源提供的公開金鑰呼叫此函式,攻擊者可藉此發動拒絕服務攻擊。OpenSSL 中的 TLS 實作未呼叫此函式,但如果有其他標準 (例如 FIPS 140-3) 強加的安全性需求,則應用程式可能會呼叫該函式。(CVE-2023-0217)

- X.509 GeneralName 中有一個與 X.400 位址處理相關的類型混淆弱點。
X.400 位址被剖析為 ASN1_STRING,但 GENERAL_NAME 的公開結構定義錯誤地將 x400Address 欄位的類型指定為 ASN1_TYPE。此欄位隨後會被 OpenSSL 函式 GENERAL_NAME_cmp 解譯為 ASN1_TYPE,而非 ASN1_STRING。啟用 CRL 檢查時 (即應用程式設定 X509_V_FLAG_CRL_CHECK 旗標),此弱點可能允許攻擊者向 memcmp 呼叫傳遞任意指標,使其能夠讀取記憶體內容或發動拒絕服務攻擊。在大多數情況下,攻擊者需要同時提供憑證鍊和 CRL,兩者都不需要有效的簽章。如果攻擊者只控制其中一個輸入,則另一個輸入必須已包含 X.400 位址作為 CRL 發佈點,此情況並不常見。因此,此弱點最有可能只影響已實作透過網路擷取 CRL 這一功能的應用程式。(CVE-2023-0286)

- 在 PKCS7 signed 或 signedAndEnveloped 資料上驗證簽章時,可解除參照 NULL 指標。如果 OpenSSL 程式庫已知用於簽章的雜湊演算法,但雜湊演算法的實作不可用,摘要式初始化將會失敗。缺少對初始化函式傳回值的檢查,這很可能會導致摘要 API 使用無效,進而導致當機。使用已啟用 FIPS 的提供程式組態,或未載入舊版提供程式 (更常見),可造成演算法不可用。
PKCS7 資料由 SMIME 程式庫呼叫處理,也可由時間戳記 (TS) 程式庫呼叫處理。OpenSSL 中的 TLS 實作未呼叫這些函式,但是第三方應用程式如果對未受信任的資料呼叫這些函式來驗證簽章,則會受到影響。(CVE-2023-0401)

- 在所有受支援的 OpenSSL 版本中發現一個與驗證包含原則限制的 X.509 憑證鏈相關的安全性弱點。攻擊者可能會建立惡意憑證鏈,觸發計算資源的指數使用,進而惡意利用此弱點,對受影響的系統發動拒絕服務 (DoS) 攻擊。原則處理預設爲禁用狀態,但若將 -policy 引數傳遞至命令行公用程式,或呼叫 X509_VERIFY_PARAM_set1_policies() 函式,即可啟用原則處理。(CVE-2023-0464)

- 驗證憑證時使用非預設選項的應用程式可能容易遭受惡意 CA 的攻擊,進而規避特定檢查。OpenSSL 會以無訊息方式忽略分葉憑證中的無效憑證原則,並略過該憑證的其他憑證原則檢查。惡意 CA 可利用此弱點,刻意宣告無效的憑證原則,以完全規避憑證的原則檢查。原則處理預設爲禁用狀態,但若將 -policy 引數傳遞至命令行公用程式,或呼叫 X509_VERIFY_PARAM_set1_policies() 函式,即可啟用原則處理。(CVE-2023-0465)

- X509_VERIFY_PARAM_add0_policy() 函式被記錄為在進行憑證驗證時隱含啟用憑證原則檢查。不過,此函式的實作並未啟用這一檢查,因而會造成含有無效或錯誤原則的憑證通過憑證驗證。
由於突然啟用原則檢查可能會中斷現有部署,因此決定保留 X509_VERIFY_PARAM_add0_policy() 函式的現有行為。需要 OpenSSL 才能執行憑證原則檢查的應用程式需要使用 X509_VERIFY_PARAM_set1_policy(),或透過以 X509_V_FLAG_POLICY_CHECK 旗標引數呼叫 X509_VERIFY_PARAM_set_flags(),來明確啟用原則檢查。
OpenSSL 中預設停用憑證原則檢查,應用程式亦未普遍使用此檢查。
(CVE-2023-0466)

- 問題摘要:處理某些特製的 ASN.1 物件識別碼或包含這些識別碼的資料可能會非常緩慢。影響摘要:對於直接使用 OBJ_obj2txt() 或使用任何 OpenSSL 子系統 OCSP、PKCS7/SMIME、CMS、CMP/CRMF 或 TS 的應用程式,它們在處理這些訊息時可能造成拒絕服務。OBJECT IDENTIFIER 由一系列數字 (子識別碼) 組成,其中大部分沒有大小限制。
OBJ_obj2txt() 可用於將以 DER 編碼形式 (使用 OpenSSL 類型 ASN1_OBJECT) 提供的 ASN.1 OBJECT IDENTIFIER 轉譯為其規範數值文字形式,即以句點分隔的十進位形式的 OBJECT IDENTIFIER 子識別碼。當 OBJECT IDENTIFIER 中的其中一個子識別碼非常大 (大得離譜,佔用數十或數百 KiB) 時,在文字中轉譯為十進位數字可能需要很長的時間。時間複雜度為 O(n^2),其中「n」是以位元組 (*) 為單位的子識別碼大小。OpenSSL 3.0 版引入了使用字串形式的名稱/識別碼擷取密碼編譯演算法的支援。這包括使用規範數值文字形式的 OBJECT IDENTIFIER 作為擷取演算法的識別碼。此類 OBJECT IDENTIFIER 可透過 ASN.1 結構 AlgorithmIdentifier 接收,該結構常用於多個通訊協定,以指定應使用何種密碼編譯演算法來簽署或驗證、加密或解密,或摘要式傳遞的資料。直接使用未受信任的資料呼叫 OBJ_obj2txt() 的應用程式會受到任何 OpenSSL 版本的影響。如果僅用於顯示目的,則認為低嚴重性。在 OpenSSL 3.0 和更新版本中,這會影響子系統 OCSP、PKCS7/SMIME、CMS、CMP/CRMF 或 TS。它也會影響處理 X.509 憑證的任何項目,包括驗證其簽章等簡單項目。對 TLS 的影響相對較低,因為所有版本的 OpenSSL 在對等端的憑證鏈上都有 100KiB 的限制。此外,這只會影響已明確啟用用戶端驗證的用戶端或伺服器。在 OpenSSL 1.1.1 和 1.0.2 版中,這只會影響顯示不同的物件,例如 X.509 憑證。我們假設此問題不會以會造成拒絕服務的方式發生,因此這些版本不會受到此問題的影響,進而被視為低嚴重性。(CVE-2023-2650)

- 問題摘要:AES-SIV 加密實作包含一個錯誤,可造成其忽略未經驗證的空白相關資料項目。影響摘要:使用 AES-SIV 演算法並想將空白資料項目做為相關資料驗證的應用程式可能會因移除、新增或重新排序這類空白項目而被誤導,因為這些會被 OpenSSL 實作忽略。我們目前未發現任何此類應用程式。AES-SIV 演算法允許驗證多個相關聯的資料項目以及加密。若要驗證空白資料,應用程式必須呼叫 EVP_EncryptUpdate() (或 EVP_CipherUpdate()),並使用 NULL 指標作為輸出緩衝區,使用 0 作為輸入緩衝區長度。OpenSSL 中的 AES-SIV 實作只會針對此類呼叫傳回成功,而非執行相關聯的資料驗證作業。因此,應用程式不會驗證空白資料。此問題不會影響非空白相關資料的驗證,而且我們預期應用程式很少會使用空白的相關資料項目,因此這符合「低」嚴重性問題。(CVE-2023-2975)

- 問題摘要:檢查過長的 DH 金鑰或參數時可能會非常緩慢。影響摘要:
使用 DH_check()、DH_check_ex() 或 EVP_PKEY_param_check() 函式檢查 DH 金鑰或 DH 參數的應用程式可能會遇到長時間延遲。如果要檢查的金鑰或參數是從未受信任的來源取得,這可能會導致拒絕服務。DH_check() 函式會對 DH 參數執行各種檢查,其中一項檢查會確認模數 (「p」參數) 不是太大。嘗試使用非常大的模數時執行速度會變慢,且 OpenSSL 通常不會使用長度超過 10,000 位元的模數。不過,DH_check() 函式會檢查已提供金鑰或參數的多個方面。有些檢查會使用提供的模數值,即使已發現此模數值過大亦然。應用程式如果呼叫 DH_check() 並提供從未受信任的來源取得之金鑰或參數,可能容易遭受拒絕服務攻擊。DH_check() 函式本身會由數個其他 OpenSSL 函式呼叫。呼叫任何其他函式的應用程式亦可能會受到類似影響。受此問題影響的其他函式包括 DH_check_ex() 和 EVP_PKEY_param_check()。使用「-check」選項時,OpenSSL dhparam 和 pkeyparam 命令行應用程式也容易受到影響。OpenSSL SSL/TLS 實作不受此問題影響。OpenSSL 3.0 和 3.1 FIPS 提供者不受此問題影響。(CVE-2023-3446)

- 問題摘要:檢查過長的 DH 金鑰或參數時可能會非常緩慢。影響摘要:
使用 DH_check()、DH_check_ex() 或 EVP_PKEY_param_check() 函式檢查 DH 金鑰或 DH 參數的應用程式可能會遇到長時間延遲。如果要檢查的金鑰或參數是從未受信任的來源取得,這可能會導致拒絕服務。DH_check() 函式會對 DH 參數執行各種檢查,修正 CVE-2023-3446 後,發現在某些檢查期間,較大的 q 參數值也可觸發過長計算。正確的 q 值 (若存在) 不能大於模數 p 參數,因此如果 q 大於 p,則不需要執行這些檢查。應用程式如果呼叫 DH_check() 並提供從未受信任之來源取得的金鑰或參數,則容易遭受拒絕服務攻擊。DH_check() 函式本身會由數個其他 OpenSSL 函式呼叫。呼叫任何其他函式的應用程式亦可能會受到類似影響。受此問題影響的其他函式包括 DH_check_ex() 和 EVP_PKEY_param_check()。
使用「-check」選項時,OpenSSL dhparam 和 pkeyparam 命令行應用程式也容易受到影響。OpenSSL SSL/TLS 實作不受此問題影響。OpenSSL 3.0 和 3.1 FIPS 提供者不受此問題影響。(CVE-2023-3817)

請注意,Nessus 並未測試這些問題,而是僅依據應用程式自我報告的版本號碼作出判斷。

解決方案

所有 OpenSSL 使用者皆應升級至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=dev-libs/openssl-3.0.10

另請參閱

https://security.gentoo.org/glsa/202402-08

https://bugs.gentoo.org/show_bug.cgi?id=876787

https://bugs.gentoo.org/show_bug.cgi?id=893446

https://bugs.gentoo.org/show_bug.cgi?id=902779

https://bugs.gentoo.org/show_bug.cgi?id=903545

https://bugs.gentoo.org/show_bug.cgi?id=907413

https://bugs.gentoo.org/show_bug.cgi?id=910556

https://bugs.gentoo.org/show_bug.cgi?id=911560

Plugin 詳細資訊

嚴重性: High

ID: 189977

檔案名稱: gentoo_GLSA-202402-08.nasl

版本: 1.0

類型: local

已發布: 2024/2/4

已更新: 2024/2/4

支援的感應器: Nessus

風險資訊

VPR

風險因素: Medium

分數: 6.0

CVSS v2

風險因素: High

基本分數: 7.8

時間分數: 5.8

媒介: CVSS2#AV:N/AC:L/Au:N/C:C/I:N/A:N

CVSS 評分資料來源: CVE-2022-3358

CVSS v3

風險因素: High

基本分數: 7.5

時間分數: 6.5

媒介: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

時間媒介: CVSS:3.0/E:U/RL:O/RC:C

弱點資訊

CPE: p-cpe:/a:gentoo:linux:openssl, cpe:/o:gentoo:linux

必要的 KB 項目: Host/local_checks_enabled, Host/Gentoo/release, Host/Gentoo/qpkg-list

可輕鬆利用: No known exploits are available

修補程式發佈日期: 2024/2/4

弱點發布日期: 2022/9/29

參考資訊

CVE: CVE-2022-3358, CVE-2022-4203, CVE-2022-4304, CVE-2022-4450, CVE-2023-0215, CVE-2023-0216, CVE-2023-0217, CVE-2023-0286, CVE-2023-0401, CVE-2023-0464, CVE-2023-0465, CVE-2023-0466, CVE-2023-2650, CVE-2023-2975, CVE-2023-3446, CVE-2023-3817