CWE-296: Improper Following of Chain of Trust for Certificate Validation
Improper Following of Chain of Trust for Certificate Validation
Weakness ID: 296 (Weakness Base)
Status: Draft
Description
Description Summary
The chain of trust is not followed or is incorrectly followed
when validating a certificate, resulting in incorrect trust of any resource that
is associated with that certificate.
Time of Introduction
Architecture and Design
Applicable Platforms
Languages
All
Common Consequences
Scope
Effect
Authentication
Exploitation of this flaw can lead to the trust of data that may have
originated with a spoofed source.
Accountability
Data, requests, or actions taken by the attacking entity can be
carried out as a spoofed benign entity.
Likelihood of Exploit
Low
Demonstrative Examples
Example 1
(Bad Code)
C and C++
if (!(cert = SSL_get_peer(certificate(ssl)) ||
!host)foo=SSL_get_verify_result(ssl);
if ((X509_V_OK==foo) ||
X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN==foo)) //do stuff
Potential Mitigations
Phase
Description
Architecture and Design
Ensure that proper certificate checking is included in the system
design.
Implementation
Understand, and properly implement all checks necessary to ensure the
integrity of certificate trust integrity.
Other Notes
If a system fails to follow the chain of trust of a certificate to a root
server, the certificate loses all usefulness as a metric of trust.
Essentially, the trust gained from a certificate is derived from a chain of
trust -- with a reputable trusted entity at the end of that list. The end
user must trust that reputable source, and this reputable source must vouch
for the resource in question through the medium of the certificate. In some
cases, this trust traverses several entities who vouch for one another. The
entity trusted by the end user is at one end of this trust chain, while the
certificate wielding resource is at the other end of the chain. If the user
receives a certificate at the end of one of these trust chains and then
proceeds to check only that the first link in the chain, no real trust has
been derived, since you must traverse the chain to a trusted source to
verify the certificate.