Skip to content

Commit bccfc94

Browse files
committed
Rust: Address unsafe deserialization review feedback
Fix canonical deserialization model paths and JSON string payload handling. Add model and query-help regression coverage with generated expected results, mark known false positives, and correct query-help references.
1 parent d231f83 commit bccfc94

5 files changed

Lines changed: 330 additions & 16 deletions

File tree

‎rust/ql/lib/codeql/rust/frameworks/serde.model.yml‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@ extensions:
44
extensible: sinkModel
55
data:
66
# serde_json deserialization functions
7-
- ["crate::serde_json::from_str", "Argument[0]", "unsafe-deserialization", "manual"]
8-
- ["crate::serde_json::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
9-
- ["crate::serde_json::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
10-
- ["crate::serde_json::from_value", "Argument[0]", "unsafe-deserialization", "manual"]
7+
- ["serde_json::de::from_str", "Argument[0]", "unsafe-deserialization", "manual"]
8+
- ["serde_json::de::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
9+
- ["serde_json::de::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
10+
- ["serde_json::value::from_value", "Argument[0]", "unsafe-deserialization", "manual"]
11+
- ["serde_json::value::from_value", "Argument[0].Field[serde_json::value::Value::String(0)]", "unsafe-deserialization", "manual"]
1112
# bincode deserialization functions
12-
- ["crate::bincode::deserialize", "Argument[0]", "unsafe-deserialization", "manual"]
13-
- ["crate::bincode::deserialize_from", "Argument[0]", "unsafe-deserialization", "manual"]
13+
- ["bincode::deserialize", "Argument[0]", "unsafe-deserialization", "manual"]
14+
- ["bincode::deserialize_from", "Argument[0]", "unsafe-deserialization", "manual"]
1415
# rmp_serde (MessagePack) deserialization functions
15-
- ["crate::rmp_serde::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
16-
- ["crate::rmp_serde::from_read", "Argument[0]", "unsafe-deserialization", "manual"]
16+
- ["rmp_serde::decode::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
17+
- ["rmp_serde::decode::from_read", "Argument[0]", "unsafe-deserialization", "manual"]
1718
# ciborium (CBOR) deserialization functions
18-
- ["crate::ciborium::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
19+
- ["ciborium::de::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
1920
# serde_yaml deserialization functions
20-
- ["crate::serde_yaml::from_str", "Argument[0]", "unsafe-deserialization", "manual"]
21-
- ["crate::serde_yaml::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
22-
- ["crate::serde_yaml::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
21+
- ["serde_yaml::de::from_str", "Argument[0]", "unsafe-deserialization", "manual"]
22+
- ["serde_yaml::de::from_slice", "Argument[0]", "unsafe-deserialization", "manual"]
23+
- ["serde_yaml::de::from_reader", "Argument[0]", "unsafe-deserialization", "manual"]
2324
# toml deserialization
24-
- ["crate::toml::from_str", "Argument[0]", "unsafe-deserialization", "manual"]
25+
- ["toml::de::from_str", "Argument[0]", "unsafe-deserialization", "manual"]

‎rust/ql/src/queries/security/CWE-502/UnsafeDeserialization.qhelp‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ A safer approach validates the input size and uses strict deserialization settin
3939
</example>
4040
<references>
4141

42-
<li>OWASP: <a href="https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/16-Testing_for_HTTP_Incoming_Requests">Deserialization of untrusted data</a>.</li>
43-
<li>CWE-502: <a href="https://cwe.mitre.org/data/definitions/502.html">Deserialization of Untrusted Data</a>.</li>
42+
<li>OWASP: <a href="https://community.owasp.org/vulnerabilities/Deserialization_of_untrusted_data">Deserialization of untrusted data</a>.</li>
4443

4544
</references>
4645
</qhelp>

0 commit comments

Comments
 (0)