GLSA-202212-01 : curl:多個弱點

critical Nessus Plugin ID 168911

語系:

說明

遠端主機受到 GLSA-202212-01 中所述的弱點影響 (curl:多個弱點)

- 指示 curl 使用 metalink 功能下載內容時,系統會根據 metalink XML 檔案中提供的雜湊驗證內容。metalink XML 檔案會向用戶端指出如何從一組不同的 URL (可能由不同的伺服器主控) 中取得相同的內容,然後用戶端可以從其中一個或多個 URL 下載檔案。以序列或平行方式。如果主控內容的其中一個伺服器遭到入侵,且該伺服器上的特定檔案內容已為修改後的內容取代,則在完成下載後,當檔案的雜湊不符時,curl 應該會偵測到此問題。
它應該移除內容,並嘗試從另一個 URL 取得內容。應用程式並未這樣做,而是僅在文字中提及此類雜湊不符,並且可能將惡意內容保留在磁碟上的檔案中。(CVE-2021-22922)

- 當指示 curl 使用 metalink 功能取得內容,並使用使用者名稱和密碼下載 metalink XML 檔案時,這些相同的憑證隨後會傳送至 curl 將從中下載或嘗試下載內容的每一個伺服器。通常與使用者的預期和意圖相反,而且不告訴使用者。(CVE-2021-22923)

- curl 支援 `-t` 命令列選項,在 libcurl 中稱為 `CURLOPT_TELNETOPTIONS`。此很少使用的選項用於傳送 variable=content 對至 TELNET 伺服器。由於傳送 `NEW_ENV` 變數的選項剖析器存在缺陷,libcurl 可將未初始化的資料從堆疊型緩衝區傳送至伺服器。因此,這可能會將敏感的內部資訊洩漏給使用純文字網路通訊協定的伺服器,這是因為在剖析應用程式提供的字串時,curl 未正確呼叫和使用 sscanf()。(CVE-2021-22925)

- libcurl-using 應用程式可要求在傳輸中使用特定用戶端憑證。這是透過 `CURLOPT_SSLCERT` 選項 (`--cert` 與命令行工具) 達成。將 libcurl 建構為使用 macOS 原生 TLS 程式庫 Secure Transport 時,應用程式可使用相同選項依名稱或檔案名稱要求用戶端憑證。如果名稱以檔案形式存在,則將使用該檔案而非依名稱。如果應用程式目前執行的運作中目錄可由其他使用者寫入 (像是 `/tmp`),惡意使用者便可建立與應用程式想要使用的名稱同名的檔案名稱,因此誘騙應用程式使用檔案型憑證,而非名稱參照的憑證,進而使 libcurl 在 TLS 連線交握中傳送錯誤的用戶端憑證。(CVE-2021-22926)

- 將資料傳送至 MQTT 伺服器時,libcurl <= 7.73.0 和 7.78.0 版在某些情況下可將指標錯誤地保留至已釋放的記憶體區域,並在後續呼叫中再次使用該指標來傳送資料,然後*再次*釋放 。(CVE-2021-22945)

- 與 IMAP、POP3 或 FTP 伺服器交談時,使用者可告知 curl >= 7.20.0 和 <= 7.78.0 以要求成功升級至 TLS (命令列上的 `--ssl-reqd` 或設為 `CURLUSESSL_CONTROL` 的 `CURLOPT_USE_SSL` 或 `CURLUSESSL_ALL` withlibcurl)。如果伺服器會傳回特製但完全合法的回應,則可繞過此要求。此缺陷會導致 curl 以無訊息模式繼續其作業
**沒有 TLS** 與指示和預期相反,可能透過網路以純文字洩漏敏感資料。(CVE-2021-22946)

- 當 curl >= 7.20.0 和 <= 7.78.0 連線至 IMAP 或 POP3 伺服器以擷取使用 STARTTLS 升級至 TLS 安全性的資料時,伺服器可回應並一次傳回 curl 快取的多個回應。
然後,curl 會升級至 TLS,但不會排清已快取回應的佇列,而是繼續使用並信任其在 TLS 交握*之前*收到的回應,如同這些回應已經通過驗證一般。藉此缺陷,中間攻擊者可先插入假的回應,然後從合法伺服器傳遞 TLS 流量,並誘騙 curl 將資料傳送回給認為攻擊者插入的資料來自受 TLS 保護之伺服器的使用者。(CVE-2021-22947)

- curl 7.33.0 至 7.82.0 (含) 版本中有不當驗證弱點,可能允許在未正確確定已使用為此傳輸設定的相同憑證來驗證連線的情況下,重複使用 OAUTH2 驗證的代理伺服器連線。此弱點會影響已啟用 SASL 的通訊協定:SMPTP(S)、IMAP(S)、POP3(S) 和 LDAP(S) (僅限 openldap)。(CVE-2022-22576)

- curl 4.9 至 7.82.0 版 (含) 存在憑證保護不足弱點,允許攻擊者在遵循身份驗證中結合使用的 HTTP(S) 重新導向時擷取憑證,將憑證洩漏給不同通訊協定或連接埠號碼上的其他服務。
(CVE-2022-27774)

- curl 7.65.0 至 7.82.0 中存在資訊洩漏弱點,在使用連線集區中具有不同區域 ID 的 IPv6 位址時,它可能會改為重複使用連線。(CVE-2022-27775)

- curl 7.83.0 中修正的憑證保護不足弱點可能會在 HTTP 重新導向至相同主機不同連接埠號碼時洩漏驗證或 Cookie 標頭資料。(CVE-2022-27776)

- 如果主機名稱以一個點結尾,libcurl 會錯誤地允許為頂層網域 (TLD) 設定 cookie。可以指示 curl 接收和傳送 cookie。構建 curl 的 cookie 引擎時,可以使用 [公開後置詞清單],也可以不使用 (https://publicsuffix.org/)awareness。如果未提供 PSL 支援,則需要基本檢查,以至少防止在 TLD 上設定 cookie。如果 URL 中的主機名稱以一個點結尾,此檢查會被中斷。這可造成任意網站皆可設定 cookie,然後傳送至不同且不相關的網站或網域。(CVE-2022-27779)

- 解碼 URL 的主機名稱部分時,curl URL 剖析器會錯誤地接受以百分號編碼的 URL 分隔符號 (如「/」),從而使其在以後擷取時成為使用錯誤主機名稱的 *不同* URL。例如,剖析器會允許諸如 `http://example.com%2F127.0.0.1/` 的 URL 並將其轉置為 `http://example.com/127.0.0.1/`。攻擊者可利用此瑕疵規避篩選、檢查等。
(CVE-2022-27780)

- libcurl 提供「CURLOPT_CERTINFO」選項,允許應用程式要求傳回有關伺服器憑證鏈的詳細資料。由於有錯誤的函式,惡意伺服器可造成使用 NSS 構建的 libcurl 在嘗試擷取該資訊時陷入無止境的忙碌迴圈。
(CVE-2022-27781)

- 即使已變更 TLS 或 SSH 相關選項,libcurl 仍會重複使用之前建立的連線,而這些連線本應禁止重複使用。若其中一個連線符合設定,libcurl 會將之前使用過的連線保留在連線集區中,以備後續傳送重複使用。但是,組態比對檢查會遺漏數個 TLS 和 SSH 設定,這使匹配變得非常容易。(CVE-2022-27782)

- 若使用 HSTS 支援,即使已在 URL 中提供 HTTP,仍可指示 curl 直接使用 HTTPS,而不使用不安全的純文字 HTTP 步驟。如果在指定的 URL 中,主機名稱使用了尾隨點,但在構建 HSTS 快取時未使用,則可繞過此機制。或者相反
- 在 HSTS 快取中使用了尾隨點,但在 URL 中*未*使用尾隨點。
(CVE-2022-30115)

- 惡意伺服器可在 HTTP 回應中提供過量的「Set-Cookie:」標頭,低於 7.84.0 版的 curl 會儲存所有這些標頭。數量足夠多 (大) 的 Cookie 會向此伺服器或與這些 Cookie 相符的其他伺服器發出後續 HTTP 要求,從而使建立的要求超過 curl 爲避免傳送過大要求 (1048576 位元組) 而在內部使用的閾值,而沒有傳回錯誤。只要保留和符合這些 Cookie 並且它們未過期,此拒絕狀態就可能持續存在。由於 Cookie 比對規則,「foo.example.com」上的伺服器可設定與「bar.example.com」相符的 Cookie,從而使同級伺服器可以有效造成相同二級網域上使用此方法的同級網站拒絕服務。(CVE-2022-32205)

- curl 7.84.0 之前版本支援鏈結式 HTTP 壓縮演算法,這表示伺服器回應可被壓縮多次,並且可能使用不同的演算法。此解壓縮鏈中可接受的連結數不受限制,因此惡意伺服器可以插入幾乎不限數量的壓縮步驟。使用此類解壓縮鏈可導致 malloc 炸彈,使 curl 最終佔用大量已配置的堆積記憶體,或嘗試並傳回記憶體不足錯誤。(CVE-2022-32206)

- curl 7.84.0 之前版本將 cookie、alt-svc 和 hsts 資料儲存到本機檔案時,會透過將暫存名稱重新命名為最終目標檔案名稱來完成作業,從而使此作業成爲原子型作業。在此重新命名作業中,它可能會意外*放寬*針對目標檔案的權限,讓更多使用者可存取更新後的檔案。 (CVE-2022-32207)

- curl 7.84.0 之前版本在執行受 krb5 保護的 FTP 傳輸時,會錯誤處理訊息驗證失敗。
攻擊者可利用此缺陷執行攔截式攻擊而不被察覺,甚至可以向用戶端插入資料。(CVE-2022-32208)

- 進行 HTTP(S) 傳輸時,如果之前曾使用相同的控點發出使用讀取回呼 (「CURLOPT_READFUNCTION」) 的「PUT」要求,則 libcurl 可能會錯誤地使用此回呼來要求要傳送的資料,即使已經設定「CURLOPT_POSTFIELDS」選項亦如此。此缺陷可能會使應用程式意外產生錯誤行為,並在後續的「POST」要求中傳送錯誤資料或使用釋放後的記憶體,或發生類似情況。從 PUT 變更為 POST 時,重複使用的控點邏輯中存在此問題。(CVE-2022-32221)

- 使用 curl 從 HTTP(S) 伺服器擷取和剖析 cookie 時,它會接受使用控製程式碼的 cookie,稍後將這些 cookie 傳回 HTTP 伺服器時,可能會使伺服器傳回 400 回應。
有效地允許協助網站拒絕對所有同級網站的服務。(CVE-2022-35252)

- 可指示 curl 剖析憑證的「.netrc」檔案。如果該檔案以包含 4095 個連續的非空白字母的行結尾且無新行,curl 會先讀取超出堆疊型緩衝區結尾的範圍,如果是 readworks,則寫入超出其邊界的零位元組。在大多數情況下,這會造成區段錯誤或類似問題,但也可能會造成不同的結果。如果惡意使用者可向應用程式提供自訂 netrc 檔案,或以其他方式影響其內容,則可利用此缺陷引致拒絕服務。(CVE-2022-35260)

- curl 7.86.0 之前版本存在重複釋放問題。如果要求 curl 使用 HTTP Proxy 進行包含非 HTTP(S) URL 的傳輸,它會透過向 Proxy 發出 CONNECT 要求來設定與遠端伺服器的連線,然後讓其餘通訊協定通過。HTTP Proxy 可能會拒絕此要求 (HTTP Proxy 通常只允許至特定連接埠號碼的傳出連線,例如 HTTPS 的 443),而是將非 200 狀態碼傳回給用戶端。由於錯誤/清理處理中存在錯誤,如果在傳輸的 URL 中使用下列配置之一,這可在 curl 中觸發重複釋放:dict、gopher、gophers、ldap、ldaps、rtmp、rtmps 或 telnet。最早的受影響版本是 7.77.0。(CVE-2022-42915)

- 在 curl 7.86.0 之前版本中,使用者可以繞過 HSTS 檢查以誘騙其繼續使用 HTTP。若使用 HSTS 支援,即使已在 URL 中提供 HTTP,仍可指示 curl 直接使用 HTTPS (而不使用不安全的純文字 HTTP 步驟)。如果指定 URL 中的主機名稱使用在 IDN 轉換過程中被 ASCII 對應項取代的 IDN 字元,則可繞過此機制,例如,使用字元 UTF-8 U+3002 (IDEOGRAPHIC FULL STOP),而非常見的 ASCII U+002E 的句號 (.)。
最早的受影響版本是 7.77.0 2021-05-26。(CVE-2022-42916)

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

解決方案

所有 curl 使用者皆應升級至這個最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-misc/curl-7.86.0

另請參閱

https://security.gentoo.org/glsa/202212-01

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

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

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

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

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

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

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

Plugin 詳細資訊

嚴重性: Critical

ID: 168911

檔案名稱: gentoo_GLSA-202212-01.nasl

版本: 1.2

類型: local

已發布: 2022/12/18

已更新: 2023/9/12

支援的感應器: Nessus

風險資訊

VPR

風險因素: Medium

分數: 6.7

CVSS v2

風險因素: High

基本分數: 7.5

時間分數: 6.2

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

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

CVSS v3

風險因素: Critical

基本分數: 9.8

時間分數: 9.1

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

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

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

弱點資訊

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

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

可被惡意程式利用: true

可輕鬆利用: Exploits are available

修補程式發佈日期: 2022/12/19

弱點發布日期: 2021/7/24

參考資訊

CVE: CVE-2021-22922, CVE-2021-22923, CVE-2021-22925, CVE-2021-22926, CVE-2021-22945, CVE-2021-22946, CVE-2021-22947, CVE-2022-22576, CVE-2022-27774, CVE-2022-27775, CVE-2022-27776, CVE-2022-27779, CVE-2022-27780, CVE-2022-27781, CVE-2022-27782, CVE-2022-30115, CVE-2022-32205, CVE-2022-32206, CVE-2022-32207, CVE-2022-32208, CVE-2022-32221, CVE-2022-35252, CVE-2022-35260, CVE-2022-42915, CVE-2022-42916