cwe - 295:不当证书验证
视图定制的信息:
当一个证书是无效的或恶意的,它可能允许攻击者欺骗信任实体通过干涉主机和客户端之间的通信路径。产品可能会连接到一个恶意主机虽然认为这是一个可信的主机,或产品可能欺骗接受欺骗似乎来自一个可信主机的数据。
![]() ![]()
![]() ![]()
![]() ![]()
![]() ![]()
![]()
![]() 语言 类:不是特定于语言的患病率(待定) 技术 类:移动患病率(待定) ![]()
示例1 这段代码检查连接对等的证书。
(坏的代码)
例如语言:C
如果((cert = SSL_get_peer_certificate (ssl) & &主机)
foo = SSL_get_verify_result (ssl);
如果((X509_V_OK = = foo) | | X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = = foo)) / /证书看起来不错,主机可以信任 在这种情况下,因为是自签名证书,没有外部权威可能是主人的身份。程序可以与欺骗主机不同的系统,如缓存DNS中毒或使用一个Adversary-in-the-Middle (AITM)攻击修改交通从服务器到客户端。 示例2 下面的OpenSSL代码获得一个证书,验证它。
(坏的代码)
例如语言:C
cert = SSL_get_peer_certificate (ssl);
如果(cert & & (SSL_get_verify_result (ssl) = = X509_V_OK)) { / /做秘密的事情 即使返回X509_V_OK“验证”的一步,这一步不包括检查常见的名字对主机的名称。也就是说,没有保证所需主机的证书。已建立SSL连接可能与恶意主机提供一个有效的证书。 示例3 下面的OpenSSL代码确保有一个证书,允许使用过期的证书。
(坏的代码)
例如语言:C
如果(cert = SSL_get_peer(证书(ssl)) {
foo = SSL_get_verify_result (ssl);
如果((X509_V_OK = = foo) | | (X509_V_ERR_CERT_HAS_EXPIRED = = foo)) / /做东西 如果调用SSL_get_verify_result()返回X509_V_ERR_CERT_HAS_EXPIRED,这意味着证书已经过期。随着时间的推移,越来越有可能对攻击者妥协证书。 示例4 下面的OpenSSL代码确保有一个证书在继续之前执行。
(坏的代码)
例如语言:C
如果(cert = SSL_get_peer_certificate (ssl)) {
/ /得到一个证书,做秘密的事情 因为这段代码不使用ssl_get_verify_result()检查证书,它可以接受证书被吊销(X509_V_ERR_CERT_REVOKED)。可以与一个恶意的主机进行通信的软件。 示例5 下面的OpenSSL代码确保主机有一个证书。
(坏的代码)
例如语言:C
如果(cert = SSL_get_peer_certificate (ssl)) {
/ /得到证书,主机可以信任 / / foo = SSL_get_verify_result (ssl); / /如果(X509_V_OK = = foo)…… 注意,代码不叫SSL_get_verify_result (ssl),这有效地禁用验证步骤检查证书。
![]()
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |