 描述
产品与主机通信,它提供了一个证书,但是产品不正确确保证书实际上是相关的主机。
 扩展描述
即使一个证书是格式良好的,签署和信任链,它可能仅仅是一个有效的证书比网站,不同的网站产品交互。如果没有正确检查证书的寄主专一性的数据,如常见的名称(CN)的主题或主题的替代名称(SAN)扩展的证书,可以重定向或欺骗攻击允许恶意主机的有效证书提供数据,冒充一个可信的主机。为了确保数据完整性,证书必须是有效的,它必须与被访问的网站。
即使产品试图检查主机名,仍有可能不正确检查主机名。例如,攻击者可以创建一个证书的名称始于一个可信的名称,后跟一个空字节,这可能会导致一些基于字符串的比较,只有检查部分包含信任的名字。
这个弱点可能出现在产品使用证书寄,如果产品不验证主机名的证书是固定的。
 的关系
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
实现:造成这一弱点在建筑安全策略的实施。 |
实现 |
当产品使用证书寄,开发人员可能不正确验证证书的所有相关组件之前寄证书。这可以使它困难或昂贵的测试后,将完成。 |
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
访问控制
|
数据读取系统的担保证书可能不是从预期的系统。 |
|
身份验证 其他
|
信任问题提供系统——基于恶意证书可能允许欺骗或重定向攻击。 |
|
 利用的可能性
 示范例子
示例1
下面的OpenSSL代码获得一个证书,验证它。
cert = SSL_get_peer_certificate (ssl); 如果(cert & & (SSL_get_verify_result (ssl) = = X509_V_OK)) { }
即使返回X509_V_OK“验证”的一步,这一步不包括检查常见的名字对主机的名称。也就是说,没有保证所需主机的证书。已建立SSL连接可能与恶意主机提供一个有效的证书。
 观察到的例子
参考 |
描述 |
|
移动银行应用程序不验证主机名,导致经济损失。 |
|
移动应用程序打印文档不验证主机名,允许攻击者读取敏感文件。 |
|
软件电子检查不检查主机名,导致经济损失。 |
|
云的支持库编写的Python时使用不正确的正则表达式匹配主机名。 |
|
Web浏览器并不能正确地处理' \ 0 '字符(空)的通用名称,允许https网站的欺骗。 |
|
数据库程序主机名验证期间常见的名字,这样允许欺骗。 |
|
不正确的处理' \ 0 '字符(空)主机名验证允许欺骗。 |
|
邮件服务器的错误处理' \ 0 '字符(空)主机名验证允许欺骗。 |
|
LDAP服务器的错误处理' \ 0 '字符(空)主机名验证允许欺骗。 |
|
支付处理模块不验证主机名时使用PHP fsockopen函数连接到贝宝。 |
|
智能手机设备不验证主机名,允许欺骗的邮件服务。 |
|
电子商务模块不验证主机名时连接到网站付款。 |
|
聊天应用程序并不验证主机名,导致失去隐私。 |
|
应用程序使用第三方库,不验证主机名。 |
|
云存储管理应用程序并不验证主机名。 |
|
Java库使用JSSE SSLSocket和SSLEngine类,不验证主机名。 |
|
SOAP平台不验证主机名。 |
|
PHP库支付不验证主机名。 |
|
商人支付SDK不验证主机名。 |
|
Web浏览器不验证通用名称,允许https网站的欺骗。 |
 潜在的缓解措施
阶段:体系结构和设计
全面检查证书的主机名,并为用户提供足够的信息问题的性质以及如何进行下去。 |
实施阶段:
如果证书将被使用,确保所有相关证书之前完全验证证书的属性是固定的,包括主机名。 |
 检测方法
动态分析与人工解释结果
建立一个不可信的端点(例如,一个服务器)的产品将连接。创建一个测试证书,使用无效的主机名,但受信任的CA签署和提供这种证书不受信任的端点。如果产品执行任何操作,而不是断开和报告一个错误,那么这表明主机名没有被检查和测试证书已被接受。 |
黑盒
当证书将被使用在移动应用程序中,可以考虑使用一个工具如转轮( ref - 955]。这种方法可能会扩展到其他技术。 |
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
未能验证证书寄主专一性的数据 |
 引用
|
|
|
|
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。PKI的“罪23:使用不当,尤其是SSL。”Page 347. McGraw-Hill. 2010. |
|
|