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.
let mut 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.
let mut 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
|
|
DCA LGTM (hardly surprising). |
paldepind
left a comment
There was a problem hiding this comment.
Great to get this aligned with the other languages.
Move
rust/weak-sensitive-data-hashinginto the CWE-327 directory, to be consistent with Python and Ruby. As discussed here.