〔最新消息〕2021-02-01

GnuPG加密庫在解密過程中會被破解--馬上進行修補!

Google Project Zero的Bug獵手Tavis Ormandy剛剛在GNU Privacy Guard團隊的libgcrypt加密軟體中發現了一個危險的Bug。

 
 
libgcrypt庫是一個任何人都可以使用的開源工具包,但它可能最著名的是GNU Privacy Guard團隊自己廣泛部署的GnuPG軟體所使用的加密庫(就是你運行gpg或gpg2命令時使用的套裝軟體)。
 
GnuPG包含在許多Linux發行版本中,並被用於數位安全。
 
gpg是GNU Privacy Guard (GnuPG)的OpenPGP-only版本。它是一個使用OpenPGP標準提供數位加密和簽名服務的工具。gpg具有完整的金鑰管理和所有你可以從一個體面的OpenPGP實現中期待的鐘聲和口哨。
 
理論上,這個漏洞可能會導致所謂的RCE(遠端代碼執行的簡稱),因為只要向libgcrypt發送一個誘殺資料塊來解密,就可以觸發這個漏洞。
 
換句話說,一個使用libgcrypt解密並檢查從網路外部提交的資料完整性的程式—(具有諷刺意味的是,你可能會做一些事情來看看你是否應該首先信任這些資料—不然可能會被欺騙),從而運行隱藏在這些資料中的惡意軟體代碼的任意片段。
 
Ormandy並沒有針對這個bug提出一個可行的RCE概念驗證漏洞,因為在這個場合他不需要。
 
正如他在錯誤報告中指出的那樣。
 
在libgcrypt中存在著一個堆緩衝區溢位 由於在塊緩衝區管理代碼中的一個不正確的假設。僅僅解密一些資料就可以用攻擊者控制的資料溢出堆緩衝區,在漏洞發生之前沒有驗證或簽名。[…]
 
我相信這很容易被利用,溢出的緩衝區緊挨著一個函數指標,而這個函數指標在溢出後立即被調用。
 
只要表明他能引發崩潰就足以證明他的觀點,Ormandy能夠通過gpg程式做到這一點,該程式的加密函數依賴於libgcrypt庫。
 
不要跳過GO
 
在C語言程式設計術語中,函數指標是一個專業術語,指的是 "一個存儲的記憶體位址,它告訴軟體下一步要去哪裡"。
 
一個可以被濫用的bug,溢出指定的記憶體緩衝區,從而修改附近的函數指標,幾乎不可避免地會影響正在運行的程式的未來行為,並轉移其執行方向,通常會導致程式崩潰。
 
不過,只要經過充分的試錯,攻擊者也許能想出如何改變錯誤程式的執行流程,使代碼不至於失控崩潰,而是被騙到運行攻擊者自己提供的機器代碼指令。
 
誘殺資料使bug程式轉移到將部分資料當作要執行的代碼,這就是所謂的shellcode,一個專業術語,意思是 "偽裝成無害資料而滲透進來的惡意程式碼"。



把函數指標想像成大富翁遊戲中的CHANCE卡,指示你前進到GO,收集200美元。想像一下,你拿起這張牌,興高采烈地準備進行指定的動作,但當你把這張牌給同伴看時,它卻莫名其妙地被人換掉了。令你驚訝的是,現在上面寫著直接去坐牢--不要跳過Go,不要收200元,結果反而是這樣。
 
 
慢車可能是安全的
 
具有諷刺意味的是,也許,作業系統、產品和系統管理員團隊在更新的時候遲遲不更新,很可能完全錯過了這個bug。
 
該漏洞是在庫的1.9.0版本中引入的,該版本是在2021-01-19才出來的,距離Ormandy提交bug報告不到兩周。
 
但對於我們這些在過去幾天內確實得到1.9.0的人來說,好消息是GNU Privacy Guard團隊幾乎立即修復了這個bug,發佈了1.9.1版本。
 
如果您的 Linux 發行版本在過去兩周內升級到了 1.9.0,那麼它很可能也已經更新到了 1.9.1--請查看您發行版本的變更日誌瞭解詳情。
 
例如,我們的發行版本就有這個最新的記錄。


[Slackware-current] ChangeLog for x86_64 

   Fri Jan 29 20:26:57 UTC 2021
   n/libgcrypt-1.9.1-x86_64-1.txz: Upgraded.
          This update fixes a serious security issue present only in libgcrypt-1.9.0.
          Everyone should be sure to update this package as soon as possible.
          For more information, see:
          https://lists.gnupg.org/pipermail/gnupg-announce/2021q1/000456.html
          (* Security fix *)

 第二個好消息是,libgcrypt並不像其他開源加密庫(如OpenSSL和LibreSSL)那樣被廣泛使用,所以依賴它的協力廠商程式較少。
 
第三個好消息是,大多數使用libgcrypt的協力廠商軟體似乎都是使用發行版本提供的共用庫(Windows稱之為DLL),而不是將libgcrypt代碼的副本編譯到產品本身。
 
換句話說,即使您的電腦上有受影響的軟體,只要升級發行版本系統目錄中的libgcrypt中央副本,就足以消除這個錯誤。
 
然而,一般的Linux系統幾乎肯定包含了許多可能受到這個錯誤影響的應用程式。
 
在我們自己的系統中,使用libgcrypt的軟體的簡要清單包括:Akonadi,Audacity,FF等。Akonadi、Audacity、FFmpeg、Geeqie、GPG套件本身、許多KDE工具、Qemu、RPM包管理器和Wireshark。(這些工具中的大多數都依賴於libgcrypt共用庫,因此現在可以隱含在我們的電腦上被認為是修補。)
 
檢查你的版本
假設你已經安裝了GPG工具,包括gpg2和libgcrypt,試試這個。


$ gpg2 --version
gpg (GnuPG) 2.2.27
libgcrypt 1.9.1        <--- SHARED LIBRARY VERSION IS SHOWN HERE
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/yourname/.gnupg
Supported algorithms:
Pubkey: RSA, [...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES [...]
Hash: SHA1, RIPEMD160, SHA256 [...]
Compression: Uncompressed, ZIP, ZLIB [...]
$ 

原文連結

安數科技股份有限公司
『安數服務』您的需求是安數的專業
Copyright © 2026 secdigit.com.tw 版權所有.