Skip to content

Commit d53dada

Browse files
committed
Rust: Update barrier logic to use getCanonicalPath.
1 parent ec3ad85 commit d53dada

File tree

3 files changed

+6
-20
lines changed

3 files changed

+6
-20
lines changed

rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,10 @@ module HardcodedCryptographicValue {
9999
*/
100100
private class GetRandomBarrier extends Barrier {
101101
GetRandomBarrier() {
102-
exists(CallExpr ce |
103-
ce.getFunction().(PathExpr).getResolvedCrateOrigin() =
104-
"repo:https://github.com/rust-random/getrandom:getrandom" and
105-
ce.getFunction().(PathExpr).getResolvedPath() = ["crate::fill", "crate::getrandom"] and
106-
this.asExpr().getExpr().getParentNode*() = ce.getArgList().getArg(0) and
107-
none()
102+
exists(CallExprBase ce |
103+
ce.getStaticTarget().(Addressable).getCanonicalPath() =
104+
["getrandom::fill", "getrandom::getrandom"] and
105+
this.asExpr().getExpr().getParentNode*() = ce.getArgList().getArg(0)
108106
)
109107
}
110108
}

rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key |
1313
| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key |
1414
| test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key |
15-
| test_cipher.rs:144:21:144:23 | 0u8 | test_cipher.rs:144:21:144:23 | 0u8 | test_cipher.rs:146:13:146:34 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:146:13:146:34 | ...::new_from_slice | a key |
1615
edges
1716
| test_cipher.rs:18:9:18:14 | const1 [&ref, element] | test_cipher.rs:19:73:19:78 | const1 [&ref, element] | provenance | |
1817
| test_cipher.rs:18:28:18:36 | &... [&ref, element] | test_cipher.rs:18:9:18:14 | const1 [&ref, element] | provenance | |
@@ -59,11 +58,6 @@ edges
5958
| test_cipher.rs:73:19:73:26 | [0u8; 32] [element] | test_cipher.rs:73:18:73:26 | &... [&ref, element] | provenance | |
6059
| test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:19:73:26 | [0u8; 32] [element] | provenance | |
6160
| test_cipher.rs:74:46:74:51 | const2 [&ref, element] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | provenance | MaD:1 Sink:MaD:1 Sink:MaD:1 |
62-
| test_cipher.rs:144:9:144:16 | mut key5 [element] | test_cipher.rs:146:37:146:40 | key5 [element] | provenance | |
63-
| test_cipher.rs:144:20:144:27 | [0u8; 32] [element] | test_cipher.rs:144:9:144:16 | mut key5 [element] | provenance | |
64-
| test_cipher.rs:144:21:144:23 | 0u8 | test_cipher.rs:144:20:144:27 | [0u8; 32] [element] | provenance | |
65-
| test_cipher.rs:146:36:146:40 | &key5 [&ref, element] | test_cipher.rs:146:13:146:34 | ...::new_from_slice | provenance | MaD:1 Sink:MaD:1 Sink:MaD:1 |
66-
| test_cipher.rs:146:37:146:40 | key5 [element] | test_cipher.rs:146:36:146:40 | &key5 [&ref, element] | provenance | |
6761
models
6862
| 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key |
6963
| 2 | Sink: <cipher::stream_wrapper::StreamCipherCoreWrapper as crypto_common::KeyInit>::new; Argument[0]; credentials-key |
@@ -125,10 +119,4 @@ nodes
125119
| test_cipher.rs:73:20:73:22 | 0u8 | semmle.label | 0u8 |
126120
| test_cipher.rs:74:23:74:44 | ...::new_from_slice | semmle.label | ...::new_from_slice |
127121
| test_cipher.rs:74:46:74:51 | const2 [&ref, element] | semmle.label | const2 [&ref, element] |
128-
| test_cipher.rs:144:9:144:16 | mut key5 [element] | semmle.label | mut key5 [element] |
129-
| test_cipher.rs:144:20:144:27 | [0u8; 32] [element] | semmle.label | [0u8; 32] [element] |
130-
| test_cipher.rs:144:21:144:23 | 0u8 | semmle.label | 0u8 |
131-
| test_cipher.rs:146:13:146:34 | ...::new_from_slice | semmle.label | ...::new_from_slice |
132-
| test_cipher.rs:146:36:146:40 | &key5 [&ref, element] | semmle.label | &key5 [&ref, element] |
133-
| test_cipher.rs:146:37:146:40 | key5 [element] | semmle.label | key5 [element] |
134122
subpaths

rust/ql/test/query-tests/security/CWE-798/test_cipher.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ fn test_aes_gcm(
141141
let cipher4 = Aes256Gcm::new(&key4.into());
142142
let _ = cipher4.encrypt(&nonce4.into(), b"plaintext".as_ref()).unwrap();
143143

144-
let mut key5 = [0u8;32]; // $ SPURIOUS: Alert[rust/hard-coded-cryptographic-value]
144+
let mut key5 = [0u8;32];
145145
_ = getrandom::fill(&mut key5).unwrap();
146-
let _ = Aes256::new_from_slice(&key5).unwrap(); // $ Sink
146+
let _ = Aes256::new_from_slice(&key5).unwrap();
147147
}

0 commit comments

Comments
 (0)