Apache HttpComponents主机名验证中间人攻击漏洞
发布日期:2014-08-18
更新日期:2014-08-21
受影响系统:
Apache Group HttpComponents < 4.3.5
Apache Group HttpComponents
Apache Group HttpAsyncClient < 4.0.2
描述:
--------------------------------------------------------------------------------
CVE(CAN) ID: CVE-2014-3577
Apache HttpComponents负责有关HTTP和相关协议的低级Java组件工具集的创建和维护。
使用了精心构造的服务器端证书后,SSL/TLS连接过程中默认主机名验证内存在漏洞,Apache HttpComponents 4.3.5/4.0.2之前版本易于受到中间人攻击的影响,导致端到端机密性及连接完整性的丧失。
细节:
在SSL连接(https)过程中,客户端根据服务器证书内编码的主机名验证URL内的主机名。以确保客户端连接到了真正的服务器,而不是中间人。
漏洞位于默认的Apache HttpComponents
org.apache.http.conn.ssl.AbstractVerifier
在客户端模式中,用于验证服务器端证书的主机名。可以解析整个主题DN内是否存在<CN=>子串。
因此,一个o字段为O="foo,CN=www.apache.org” ,CN为"www.evil.org”,o位于CN字段前面的DN,会错误匹配o字段内的<www.apache.org>,而不是匹配CN或主题别名。
可以伪造的字段可以是除了CN字段之外的任何字段,包括〈E〉或电子邮件,只要这此字段出现在CN前面。
具有伪造证书的第三方,如果可以截获或重路由到https服务器的流量,即可执行中间人攻击,并破坏端到端的机密性和完整性。
<*来源:Subodh Iyengar
Will Shackleton
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Subodh Iyengar ()提供了如下测试方法:
Will Shackleton ()提供了如下测试方法:
下面的语句可以从Apache HttpComponents客户端检测用构造证书的服务器是否存在漏洞:
openssl req -new -x509 -keyout /dev/stdout \
-subj "/O=foo, CN=www.apache.org/CN=machine-domain-name/" \
-set_serial 86653 -nodes |\
openssl s_server -cert /dev/stdin -accept 8443 -www
连接到"https://www.apache.org:8443/"的Apache HttpComponents客户端,www.apache.org的DNS入口指向machine-domain-name。
建议:
--------------------------------------------------------------------------------
厂商补丁:
Apache Group
------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://mail-archives.apache.org/mod_mbox/www-announce/201408.mbox/CVE-2014-3577
http://search.maven.org/#artifactdetails|org.apache.httpcomponents|
httpclient|4.3.5|jar
http://search.maven.org/#artifactdetails|org.apache.httpcomponents|
httpasyncclient|4.0.2|jar
HttpComponents 的详细介绍:请点这里
HttpComponents 的下载地址:请点这里