針對 binutils 的擴展生命週期支援更新涵蓋 92 個 CVE
GNU Binutils 是開發環境中的基本軟體包之一——它包括幾種不同的工具,用於操作 ELF 檔、物件檔和其他在二進位創建過程中很重要的工具。因此,發現並解決其中的問題可以加強整個過程,並具有深遠的好處。
在 擴展生命週期支援 團隊針對支援的Linux發行版發佈的最新一批更新中,GNU Binutils 中修復了90多個 CVE。
內容:
延長生命週期支援用戶的觀點
作為服務使用者,您可以放心地擁有一個專門的安全和 Linux 專家團隊,為系統準備足夠的更新,否則這些系統將沒有任何可用的更新。
在這個特定實例中,binutils 是一個基本包,被許多其他工具(如開發堆棧、調試器、代碼分析等)所依賴,不一定是與開發相關的工具。因此,保持其安全將直接影響整體系統的安全性和穩定性。
在更深層次上
TuxCare的擴展生命週期支持團隊通常忙於測試CVE修復代碼,使其適應支援的Linux發行版中包含的舊版本軟體包,並確保發佈的軟體包實際上可以保護使用者免受聲稱要解決的漏洞的影響。此過程稱為「向後移植」,因為它包括採用適用於較新版本的軟體包的修復程式,並使其適應舊版本,例如 ELS 涵蓋的 Linux 發行版中存在的版本。因此,有很多時間花在盯著代碼並對其運行測試上。
在處理 CVE 時,有時分析會識別出在最初解決時被忽略的新問題。ELS 團隊始終努力負責任地通知上游開源專案,併為這些專案貢獻代碼。這具有提高整個IT生態系統安全性的額外好處。當然,這些新問題的修復程式也提供給 ELS 使用者,因為他們運行的系統不在原始供應商支援範圍內,否則不會通過其他方式接收修復代碼。
此活動的最新結果之一,並且已包含在可用更新中,僅 binutils 中總共解決了 92 個漏洞。這些範圍從「緩衝區溢出」到「釋放後使用」問題,並且具有廣泛的CVSS分數 - 並非所有問題都是關鍵的,但確實有很多是關鍵的。
作為一個基本包,binutils 包含廣泛用於代碼分析、調試和連結操作的工具,也被許多其他第三方工具使用。您不必為了在系統中擁有binutils而進行實際的開發工作,您可能將其作為部署的其他應用程式或工具的依賴項。保持 binutils 更新將確保不僅僅是 binutils 本身的正確和安全操作。
在其中一些 CVE 中,該團隊確定了原始 CVE 修復引入了新問題(如未定義的行為或其他安全問題)的情況。這些問題需要內部代碼開發才能修復。然後將這些代碼提交給上游開源專案,這些專案反過來要麼接受並將其提交到這些專案,要麼準備自己的代碼來修復新報告的問題。
這方面的一個例子是CVE-2018-7568。ELS 團隊確定了最初提交的代碼修復會導致未定義行為的情況,並在此處將其報告給上游專案。
團隊成員尼基塔·波波夫(Nikita Popov)在審查對原始CVE修復程式所做的更改時發現了這個問題,以確保它不會在較舊的Linux發行版上中斷,並且與其他代碼“很好地玩”在一起。
事實證明,CVE-2018-7568 的補丁包括用作塊長度 (block_len) 計數器的無符號類型。當在表達式中使用時,例如
xptr + block_len < xptr
在正確的情況下 - block_len未簽名 - 編譯器可以完全省略這一點,可以優化這一行。正是由於這個原因,ISO C 標準明確禁止這種類型的運算式,不同的編譯器或不同架構/平臺下的同一編譯器可能會以不同的方式處理這種情況,從而導致未定義的行為。團隊 提交的 bug 報告包括對問題的更全面解釋以及修復該問題的代碼提交。
這已被上游代碼庫接受,現在是 binutils 包的一部分,甚至已經被其他開發人員 進一步完善 。這是一個教科書式的例子,說明如何正確完成開源項目開發,ELS團隊正在這個領域積極工作。
CVE-2018-12700修復程序的問題,似乎並沒有阻止它聲稱解決的情況,並且仍然可以由我們的測試觸發,上游也報告了這個問題,正在等待澄清。
在對binutils的更新中完成的工作之後,另一位從事binutils的開發人員Pavel Mayorov評論說:“據我所知,我們已經處理了所有現有的binutilsCVE......但我們仍在等待有關CVE-2018-12700問題的答案」。
結語
保持舊系統的更新是一項必要要求,而不僅僅是從嚴格與安全相關的角度來看,即使這本身很重要。它還需要實現並保持對幾個業務標準的合規性,這些標準對修補時間延遲有規定。
通過依靠 ELS 作為您的安全補丁和更新的來源,團隊承擔的微小工作直接轉化為您的系統的安全性和對要求的合規性,讓您高枕無憂。因此,您的系統受到保護且穩定,使您可以專注於特定的業務需求。
補遺
通過擴展生命週期支援服務提供的最新 binutils 更新所涵蓋的 CVE 的完整清單,按 CVE 年份分組。
CVE-2016-2226:修復 cplus-dem.c 中string_appends函數中的整數溢出問題
CVE-2016-4487:修復libiberty釋放后使用漏洞
CVE-2016-4488:修復自由釋放后使用漏洞
CVE-2016-4489:修復了自由中的整數溢出問題
CVE-2016-4490:修復了 cp-demangle.c 中的整數溢出問題
CVE-2016-4492:修復了 cplus-dem.c 中 do_type cplus-dem.c 函數中的緩衝區溢出問題
CVE-2016-4493:修復demangle_template_value_parm和do_hpacc_template_literal越界讀取的問題
CVE-2016-6131:修復無限迴圈、堆棧溢出問題
CVE-2017-7223:修復全域緩衝區溢出(大小為 1)的問題
CVE-2017-7224:修復了反彙編時無效寫入(大小為 1)的問題
CVE-2017-7225:修復空指標取消引用和無效寫入的問題
CVE-2017-7226:修復了大小為 4049 的基於堆的緩衝區過度讀取問題
CVE-2017-7227:修復基於堆的緩衝區溢出問題
CVE-2017-7299:修復 ELF 重新定位部分中的無效讀取(大小為 8)
CVE-2017-7300:修復基於堆的緩衝區過度讀取(逐個關閉)
CVE-2017-7301:修復逐一漏洞
CVE-2017-7302:修復無效讀取(大小為 4)
CVE-2017-7614:修復未定義行為問題
CVE-2017-8393:修復全域緩衝區過度讀取錯誤
CVE-2017-8394:修復了由於 NULL 指標取消引用而導致大小為 4 的無效讀取
CVE-2017-8396:修復大小為 1 的無效讀取
CVE-2017-8398:修復了轉儲調試信息期間大小為 1 的無效讀取
CVE-2017-8421:修復記憶體洩漏漏洞
CVE-2017-9742:修復緩衝區溢出問題
CVE-2017-9744:修復緩衝區溢出問題
CVE-2017-9747:修復緩衝區溢出問題
CVE-2017-9748:修復緩衝區溢出問題
CVE-2017-9749:修復緩衝區溢出問題
CVE-2017-9753:修復緩衝區溢出問題
CVE-2017-9754:修復緩衝區溢出問題
CVE-2017-12448:修復釋放后使用
CVE-2017-12449:修復越界堆讀取問題
CVE-2017-12455:修復越界堆讀取問題
CVE-2017-12457:修復空取消引用問題
CVE-2017-12458:修復越界堆讀取問題
CVE-2017-12459:修復越界堆寫入問題
CVE-2017-12450:修復越界堆寫入問題
CVE-2017-12452:修復越界堆讀取問題
CVE-2017-12453:修復越界堆讀取問題
CVE-2017-12454:修復任意記憶體讀取問題
CVE-2017-12456:修復越界堆讀取問題
CVE-2017-14333:修復整數溢出問題,並因迴圈耗時而掛起
CVE-2017-12451:修復越界堆棧讀取問題
CVE-2017-12799:修復緩衝區溢出問題
CVE-2017-13710:修復空指標取消引用問題
CVE-2017-14130:修復基於堆_bfd_elf_attr_strdup緩衝區過度讀取問題
CVE-2017-14932:修復無限迴圈
CVE-2017-14938:修復記憶體分配過多的問題
CVE-2017-14940:修復空指標取消引用問題
CVE-2017-15020:修復基於堆parse_die緩衝區過度讀取問題
CVE-2017-15022:修復bfd_hash_hash空指標取消引用問題
CVE-2017-15225:修復被零除錯誤
CVE-2017-15938:修復find_abstract_instance_name記憶體讀取無效、分段錯誤
CVE-2017-15939:修復空指標取消引用問題
CVE-2017-15996:修復模糊存檔標頭上的緩衝區溢出問題
CVE-2017-16826:修復無效記憶體訪問
CVE-2017-16827:免費slurp_symtab無效
CVE-2017-16828:修復整數溢出和基於堆的緩衝區過度讀取問題
CVE-2017-16831:修復整數溢出或記憶體分配過多的問題
CVE-2017-17080:修復bfd_getl32堆緩衝區過度讀取問題
CVE-2017-17121:修復記憶體訪問衝突
CVE-2017-17123:修復空指標取消引用問題
CVE-2017-17124:修復記憶體消耗過多或基於堆的緩衝區溢出問題
CVE-2017-17125:修復緩衝區過度讀取問題
CVE-2018-6323:修復無符號整數溢出問題
CVE-2018-6543:修復整數溢出問題
CVE-2018-6759:修復分段錯誤
CVE-2018-7208:修復分段錯誤
CVE-2018-7568:修復整數溢出問題
CVE-2018-7569:修復整數下溢或溢出問題
CVE-2018-7642:修復aout_32_swap_std_reloc_out空指標取消引用問題
CVE-2018-7643:修復整數溢出問題
CVE-2018-8945:修復分段錯誤
CVE-2018-13033:修復記憶體分配過多的問題
CVE-2018-10373:修復空指標取消引用問題
CVE-2018-10535:修復空指標取消引用問題
CVE-2018-18309:修復無效記憶體位址取消引用的問題
CVE-2018-18605:修復錯誤處理部分合併問題
CVE-2018-18606:修復空指標取消引用問題
CVE-2018-18607:修復elf_link_input_bfd中的空指標取消引用
CVE-2018-19931:修復bfd_elf32_swap_phdr_in中基於堆的緩衝區溢出問題
CVE-2018-19932:修復整數溢出和無限迴圈
CVE-2018-20002:修復記憶體消耗
CVE-2018-20623:修復錯誤功能中的釋放后使用
CVE-2018-20671:修復整數溢出漏洞
CVE-2018-1000876:修復整數溢出觸發器堆溢出問題
CVE-2019-9073:修復記憶體分配過多的問題
CVE-2019-9075:修復_bfd_archive_64_bit_slurp_armap中基於堆的緩衝區溢出問題
CVE-2019-9077:修復process_mips_specific中基於堆的緩衝區溢出問題
CVE-2019-12972:修復_bfd_doprnt中基於堆的緩衝區過度讀取的問題
CVE-2019-14444:修復整數溢出問題
CVE-2019-17450:修復無限遞歸問題