Skip to content

Commit 785754e

Browse files
committed
Rust: Switch the query to taint flow, since some taint summaries are relevant now.
1 parent 89a9c46 commit 785754e

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import rust
1515
import codeql.rust.dataflow.DataFlow
16+
import codeql.rust.dataflow.TaintTracking
1617
import codeql.rust.security.DisabledCertificateCheckExtensions
1718
import codeql.rust.Concepts
1819

@@ -35,7 +36,7 @@ module DisabledCertificateCheckConfig implements DataFlow::ConfigSig {
3536
predicate observeDiffInformedIncrementalMode() { any() }
3637
}
3738

38-
module DisabledCertificateCheckFlow = DataFlow::Global<DisabledCertificateCheckConfig>;
39+
module DisabledCertificateCheckFlow = TaintTracking::Global<DisabledCertificateCheckConfig>;
3940

4041
import DisabledCertificateCheckFlow::PathGraph
4142

rust/ql/test/query-tests/security/CWE-295/DisabledCertificateCheck.expected

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
| main.rs:88:32:88:40 | sometimes | main.rs:75:22:75:25 | true | main.rs:88:32:88:40 | sometimes | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
1414
| main.rs:93:32:93:47 | sometimes_global | main.rs:154:17:154:20 | true | main.rs:93:32:93:47 | sometimes_global | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
1515
| main.rs:109:36:109:37 | b1 | main.rs:107:17:107:31 | ...::exists | main.rs:109:36:109:37 | b1 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
16+
| main.rs:115:36:115:37 | b2 | main.rs:113:43:113:50 | metadata | main.rs:115:36:115:37 | b2 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
17+
| main.rs:121:36:121:37 | b3 | main.rs:119:11:119:27 | ...::metadata | main.rs:121:36:121:37 | b3 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
1618
| main.rs:146:36:146:37 | b6 | main.rs:144:39:144:42 | true | main.rs:146:36:146:37 | b6 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. |
1719
edges
1820
| main.rs:73:19:73:40 | ...: bool | main.rs:93:32:93:47 | sometimes_global | provenance | |
@@ -21,15 +23,29 @@ edges
2123
| main.rs:75:6:75:18 | mut sometimes | main.rs:88:32:88:40 | sometimes | provenance | |
2224
| main.rs:75:22:75:25 | true | main.rs:75:6:75:18 | mut sometimes | provenance | |
2325
| main.rs:107:6:107:7 | b1 | main.rs:109:36:109:37 | b1 | provenance | |
24-
| main.rs:107:17:107:31 | ...::exists | main.rs:107:17:107:42 | ...::exists(...) [Ok] | provenance | Src:MaD:1 |
25-
| main.rs:107:17:107:42 | ...::exists(...) [Ok] | main.rs:107:17:107:51 | ... .unwrap() | provenance | MaD:2 |
26+
| main.rs:107:17:107:31 | ...::exists | main.rs:107:17:107:42 | ...::exists(...) [Ok] | provenance | Src:MaD:2 |
27+
| main.rs:107:17:107:42 | ...::exists(...) [Ok] | main.rs:107:17:107:51 | ... .unwrap() | provenance | MaD:4 |
2628
| main.rs:107:17:107:51 | ... .unwrap() | main.rs:107:6:107:7 | b1 | provenance | |
29+
| main.rs:113:6:113:7 | b2 | main.rs:115:36:115:37 | b2 | provenance | |
30+
| main.rs:113:11:113:52 | ... .metadata() [Ok] | main.rs:113:11:113:61 | ... .unwrap() | provenance | MaD:4 |
31+
| main.rs:113:11:113:61 | ... .unwrap() | main.rs:113:11:113:71 | ... .is_file() | provenance | MaD:6 |
32+
| main.rs:113:11:113:71 | ... .is_file() | main.rs:113:6:113:7 | b2 | provenance | |
33+
| main.rs:113:43:113:50 | metadata | main.rs:113:11:113:52 | ... .metadata() [Ok] | provenance | Src:MaD:1 |
34+
| main.rs:119:6:119:7 | b3 | main.rs:121:36:121:37 | b3 | provenance | |
35+
| main.rs:119:11:119:27 | ...::metadata | main.rs:119:11:119:38 | ...::metadata(...) [Ok] | provenance | Src:MaD:3 |
36+
| main.rs:119:11:119:38 | ...::metadata(...) [Ok] | main.rs:119:11:119:47 | ... .unwrap() | provenance | MaD:4 |
37+
| main.rs:119:11:119:47 | ... .unwrap() | main.rs:119:11:119:56 | ... .is_dir() | provenance | MaD:5 |
38+
| main.rs:119:11:119:56 | ... .is_dir() | main.rs:119:6:119:7 | b3 | provenance | |
2739
| main.rs:144:6:144:7 | b6 | main.rs:146:36:146:37 | b6 | provenance | |
2840
| main.rs:144:39:144:42 | true | main.rs:144:6:144:7 | b6 | provenance | |
2941
| main.rs:154:17:154:20 | true | main.rs:73:19:73:40 | ...: bool | provenance | |
3042
models
31-
| 1 | Source: std::fs::exists; ReturnValue.Field[core::result::Result::Ok(0)]; file |
32-
| 2 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
43+
| 1 | Source: <std::path::Path>::metadata; ReturnValue.Field[core::result::Result::Ok(0)]; file |
44+
| 2 | Source: std::fs::exists; ReturnValue.Field[core::result::Result::Ok(0)]; file |
45+
| 3 | Source: std::fs::metadata; ReturnValue.Field[core::result::Result::Ok(0)]; file |
46+
| 4 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
47+
| 5 | Summary: <std::fs::Metadata>::is_dir; Argument[self].Reference; ReturnValue; taint |
48+
| 6 | Summary: <std::fs::Metadata>::is_file; Argument[self].Reference; ReturnValue; taint |
3349
nodes
3450
| main.rs:4:32:4:35 | true | semmle.label | true |
3551
| main.rs:9:36:9:39 | true | semmle.label | true |
@@ -54,6 +70,18 @@ nodes
5470
| main.rs:107:17:107:42 | ...::exists(...) [Ok] | semmle.label | ...::exists(...) [Ok] |
5571
| main.rs:107:17:107:51 | ... .unwrap() | semmle.label | ... .unwrap() |
5672
| main.rs:109:36:109:37 | b1 | semmle.label | b1 |
73+
| main.rs:113:6:113:7 | b2 | semmle.label | b2 |
74+
| main.rs:113:11:113:52 | ... .metadata() [Ok] | semmle.label | ... .metadata() [Ok] |
75+
| main.rs:113:11:113:61 | ... .unwrap() | semmle.label | ... .unwrap() |
76+
| main.rs:113:11:113:71 | ... .is_file() | semmle.label | ... .is_file() |
77+
| main.rs:113:43:113:50 | metadata | semmle.label | metadata |
78+
| main.rs:115:36:115:37 | b2 | semmle.label | b2 |
79+
| main.rs:119:6:119:7 | b3 | semmle.label | b3 |
80+
| main.rs:119:11:119:27 | ...::metadata | semmle.label | ...::metadata |
81+
| main.rs:119:11:119:38 | ...::metadata(...) [Ok] | semmle.label | ...::metadata(...) [Ok] |
82+
| main.rs:119:11:119:47 | ... .unwrap() | semmle.label | ... .unwrap() |
83+
| main.rs:119:11:119:56 | ... .is_dir() | semmle.label | ... .is_dir() |
84+
| main.rs:121:36:121:37 | b3 | semmle.label | b3 |
5785
| main.rs:144:6:144:7 | b6 | semmle.label | b6 |
5886
| main.rs:144:39:144:42 | true | semmle.label | true |
5987
| main.rs:146:36:146:37 | b6 | semmle.label | b6 |

rust/ql/test/query-tests/security/CWE-295/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,15 @@ fn test_threat_model_source() {
110110
.build()
111111
.unwrap();
112112

113-
let b2 = std::path::Path::new("main.rs").metadata().unwrap().is_file();
113+
let b2 = std::path::Path::new("main.rs").metadata().unwrap().is_file(); // $ Source=is_file
114114
let _client = native_tls::TlsConnector::builder()
115-
.danger_accept_invalid_hostnames(b2) // $ MISSING: Alert[rust/disabled-certificate-check]=fs
115+
.danger_accept_invalid_hostnames(b2) // $ Alert[rust/disabled-certificate-check]=is_file
116116
.build()
117117
.unwrap();
118118

119-
let b3 = std::fs::metadata("main.rs").unwrap().is_dir();
119+
let b3 = std::fs::metadata("main.rs").unwrap().is_dir(); // $ Source=is_dir
120120
let _client = native_tls::TlsConnector::builder()
121-
.danger_accept_invalid_hostnames(b3) // $ MISSING: Alert[rust/disabled-certificate-check]=fs
121+
.danger_accept_invalid_hostnames(b3) // $ Alert[rust/disabled-certificate-check]=is_dir
122122
.build()
123123
.unwrap();
124124

0 commit comments

Comments
 (0)