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字段内的<>,而不是匹配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客户端,的DNS入口指向machine-domain-name。

建议:
--------------------------------------------------------------------------------
厂商补丁:

Apache Group
------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

#artifactdetails|org.apache.httpcomponents|
httpclient|4.3.5|jar
#artifactdetails|org.apache.httpcomponents|
httpasyncclient|4.0.2|jar

HttpClient 4.0的使用详解 

Android 如何用HttpClient 以Post方式提交数据并添加http头信息 

Android 如何用HttpClient 以Get方式获取数据并添加http头信息 

HttpComponents 的详细介绍请点这里
HttpComponents 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e1245aa998a279e7d09103ac27743ba7.html