Uh oh!
There was an error while loading. Please reload this page.
Rust: Move rust/weak-sensitive-data-hashing - #20649
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR moves the Rust weak sensitive data hashing query from the CWE-328 directory to the CWE-327 directory to align with the organization of similar queries in Python and Ruby codebases.
- Updates the query reference path from CWE-328 to CWE-327 in the test configuration file
QHelp previews: rust/ql/src/queries/security/CWE-327/WeakSensitiveDataHashing.qhelpUse of a broken or weak cryptographic hashing algorithm on sensitive dataA broken or weak cryptographic hash function can leave data vulnerable, and should not be used in security-related code. A strong cryptographic hash function should be resistant to:
All of MD5, SHA-1, SHA-2 and SHA-3 are weak against offline brute forcing, so they are not suitable for hashing passwords. This includes SHA-224, SHA-256, SHA-384, and SHA-512, which are in the SHA-2 family. Since it's OK to use a weak cryptographic hash function in a non-security context, this query only alerts when these are used to hash sensitive data (such as passwords, certificates, usernames). RecommendationEnsure that you use a strong, modern cryptographic hash function, such as:
ExampleThe following examples show hashing sensitive data using the MD5 hashing algorithm that is known to be vulnerable to collision attacks, and hashing passwords using the SHA-3 algorithm that is weak to brute force attacks: // MD5 is not appropriate for hashing sensitive data.letmut md5_hasher = md5::Md5::new();
...md5_hasher.update(emergency_contact);// BAD
md5_hasher.update(credit_card_no);// BAD
...my_hash = md5_hasher.finalize();// SHA3-256 is not appropriate for hashing passwords.
my_hash = sha3::Sha3_256::digest(password);// BADTo make these secure, we can use the SHA-3 algorithm for sensitive data and Argon2 for passwords: // SHA3-256 *is* appropriate for hashing sensitive data.letmut sha3_256_hasher = sha3::Sha3_256::new();
...sha3_256_hasher.update(emergency_contact);// GOOD
sha3_256_hasher.update(credit_card_no);// GOOD
...my_hash = sha3_256_hasher.finalize();// Argon2 is appropriate for hashing passwords.let argon2_salt = argon2::password_hash::Salt::from_b64(salt)?;
my_hash = argon2::Argon2::default().hash_password(password.as_bytes(), argon2_salt)?.to_string();// GOODReferences
|
geoffw0
commented
Oct 15, 2025
DCA LGTM (hardly surprising). |
paldepind
left a comment
There was a problem hiding this comment.
Great to get this aligned with the other languages.
Uh oh!
There was an error while loading. Please reload this page.
Move
rust/weak-sensitive-data-hashinginto the CWE-327 directory, to be consistent with Python and Ruby. As discussed here.