diff --git a/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.qhelp b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.qhelp new file mode 100644 index 00000000000..f00a5295f36 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.qhelp @@ -0,0 +1,39 @@ + + + + +

+In Rust, the danger_accept_invalid_certs and danger_accept_invalid_hostnames options on TLS connectors and HTTP clients control whether certificate and hostname verification are performed. If set to true, the client will accept any certificate and any host name, making it susceptible to man-in-the-middle attacks. +

+
+ + +

+Do not set danger_accept_invalid_certs or danger_accept_invalid_hostnames to true except in tests or controlled environments. In production, always ensure certificate and hostname verification are enabled to prevent security risks. +

+
+ + +

+The following code snippet shows a function that creates a TLS or HTTP client with certificate verification disabled: +

+ +

+While this may be acceptable in a test, it should not be used in production code. Instead, always configure clients to verify certificates and hostnames: +

+ +
+ +
  • +Rust native-tls crate: TlsConnectorBuilder. +
  • +
  • +Rust reqwest crate: ClientBuilder. +
  • +
  • +Mozilla: Web Security Guidelines: HTTPS. +
  • +
    +
    diff --git a/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckBad.rs b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckBad.rs new file mode 100644 index 00000000000..67546a8a2ab --- /dev/null +++ b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckBad.rs @@ -0,0 +1,13 @@ +// BAD: Disabling certificate validation in Rust + +// Using native_tls +let _client = native_tls::TlsConnector::builder() + .danger_accept_invalid_certs(true) // disables certificate validation + .build() + .unwrap(); + +// Using reqwest +let _client = reqwest::Client::builder() + .danger_accept_invalid_certs(true) // disables certificate validation + .build() + .unwrap(); diff --git a/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckGood.rs b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckGood.rs new file mode 100644 index 00000000000..525d7e98549 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheckGood.rs @@ -0,0 +1,18 @@ +// GOOD: Certificate validation is enabled (default) + +// Using native_tls +let _client = native_tls::TlsConnector::builder() + .danger_accept_invalid_certs(false) // certificate validation enabled + .build() + .unwrap(); + +// Using reqwest +let _client = reqwest::Client::builder() + .danger_accept_invalid_certs(false) // certificate validation enabled + .build() + .unwrap(); + +// Or simply use the default builder (safe) +let _client = native_tls::TlsConnector::builder() + .build() + .unwrap();