Skip to content

Commit a537197

Browse files
committed
Rust: Understand sensitive field access expressions.
1 parent 8825eef commit a537197

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private class SensitiveDataVariable extends Variable {
6767
}
6868

6969
/**
70-
* A variable access data flow node that might produce sensitive data.
70+
* A variable access data flow node that might be sensitive data.
7171
*/
7272
private class SensitiveVariableAccess extends SensitiveData {
7373
SensitiveDataClassification classification;
@@ -84,3 +84,20 @@ private class SensitiveVariableAccess extends SensitiveData {
8484

8585
override SensitiveDataClassification getClassification() { result = classification }
8686
}
87+
88+
/**
89+
* A field access data flow node that might be sensitive data.
90+
*/
91+
private class SensitiveFieldAccess extends SensitiveData {
92+
SensitiveDataClassification classification;
93+
94+
SensitiveFieldAccess() {
95+
HeuristicNames::nameIndicatesSensitiveData(this.asExpr()
96+
.getAstNode()
97+
.(FieldExpr)
98+
.getIdentifier()
99+
.getText(), classification)
100+
}
101+
102+
override SensitiveDataClassification getClassification() { result = classification }
103+
}

rust/ql/test/library-tests/sensitivedata/test.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ fn test_passwords(
5050
sink(oauth); // $ MISSING: sensitive=password
5151

5252
sink(ms); // $ MISSING: sensitive=password
53-
sink(ms.password.as_str()); // $ MISSING: sensitive=password
53+
sink(ms.password.as_str()); // $ sensitive=password
5454
sink(ms.mfa.as_str()); // $ MISSING: sensitive=password
5555

5656
sink(get_password()); // $ sensitive=password
@@ -68,8 +68,8 @@ fn test_passwords(
6868
sink(passwordFile); // $ SPURIOUS: sensitive=password
6969

7070
sink(ms.harmless.as_str());
71-
sink(ms.password_file_path.as_str());
72-
sink(ms.password_enabled.as_str());
71+
sink(ms.password_file_path.as_str()); // $ SPURIOUS: sensitive=password
72+
sink(ms.password_enabled.as_str()); // $ SPURIOUS: sensitive=password
7373
sink(ms.numfailed.as_str());
7474

7575
sink(get_string());
@@ -245,17 +245,17 @@ fn test_private_info(
245245
) {
246246
// private info
247247

248-
sink(info.mobile_phone_num.as_str()); // $ MISSING: sensitive=private
249-
sink(info.mobile_phone_num.to_string()); // $ MISSING: sensitive=private
248+
sink(info.mobile_phone_num.as_str()); // $ sensitive=private
249+
sink(info.mobile_phone_num.to_string()); // $ sensitive=private
250250
sink(info.contact_email.as_str()); // $ MISSING: sensitive=private
251251
sink(info.contact_e_mail_2.as_str()); // $ MISSING: sensitive=private
252-
sink(info.my_ssn.as_str()); // $ MISSING: sensitive=private
253-
sink(&info.ssn); // $ MISSING: sensitive=private
252+
sink(info.my_ssn.as_str()); // $ sensitive=private
253+
sink(&info.ssn); // $ sensitive=private
254254
sink(info.ssn.data); // $ MISSING: sensitive=private
255255
sink(info.ssn.get_data()); // $ MISSING: sensitive=private
256-
sink(info.birthday.as_str()); // $ MISSING: sensitive=private
257-
sink(info.emergency_contact.as_str()); // $ MISSING: sensitive=private
258-
sink(info.name_of_employer.as_str()); // $ MISSING: sensitive=private
256+
sink(info.birthday.as_str()); // $ sensitive=private
257+
sink(info.emergency_contact.as_str()); // $ sensitive=private
258+
sink(info.name_of_employer.as_str()); // $ sensitive=private
259259

260260
sink(&info.gender); // $ MISSING: sensitive=private
261261
sink(info.genderString.as_str()); // $ MISSING: sensitive=private
@@ -270,22 +270,22 @@ fn test_private_info(
270270
sink(info.linkedPatientId); // $ MISSING: sensitive=private
271271
sink(info.patient_record.as_str()); // $ MISSING: sensitive=private
272272
sink(info.patient_record.trim()); // $ MISSING: sensitive=private
273-
sink(&info.medical_notes); // $ MISSING: sensitive=private
274-
sink(info.medical_notes[0].as_str()); // $ MISSING: sensitive=private
273+
sink(&info.medical_notes); // $ sensitive=private
274+
sink(info.medical_notes[0].as_str()); // $ sensitive=private
275275
for n in info.medical_notes.iter() {
276276
sink(n.as_str()); // $ MISSING: sensitive=private
277277
}
278278
sink(info.confidentialMessage.as_str()); // $ MISSING: sensitive=private
279279
sink(info.confidentialMessage.to_lowercase()); // $ MISSING: sensitive=private
280280

281-
sink(info.latitude); // $ MISSING: sensitive=private
281+
sink(info.latitude); // $ sensitive=private
282282
let x = info.longitude.unwrap();
283283
sink(x); // $ MISSING: sensitive=private
284284

285-
sink(info.financials.my_bank_account_number.as_str()); // $ MISSING: sensitive=private
286-
sink(info.financials.credit_card_no.as_str()); // $ MISSING: sensitive=private
287-
sink(info.financials.credit_rating); // $ MISSING: sensitive=private
288-
sink(info.financials.user_ccn.as_str()); // $ MISSING: sensitive=private
285+
sink(info.financials.my_bank_account_number.as_str()); // $ sensitive=private SPURIOUS: sensitive=id
286+
sink(info.financials.credit_card_no.as_str()); // $ sensitive=private
287+
sink(info.financials.credit_rating); // $ sensitive=private
288+
sink(info.financials.user_ccn.as_str()); // $ sensitive=private
289289
sink(info.financials.cvv.as_str()); // $ MISSING: sensitive=private
290290
sink(info.financials.beneficiary.as_str()); // $ MISSING: sensitive=private
291291
sink(info.financials.routing_number); // $ MISSING: sensitive=private
@@ -306,10 +306,10 @@ fn test_private_info(
306306
sink(modulesEx);
307307

308308
sink(info.financials.harmless.as_str());
309-
sink(info.financials.num_accounts);
310-
sink(info.financials.total_accounts);
311-
sink(info.financials.accounting);
312-
sink(info.financials.unaccounted);
309+
sink(info.financials.num_accounts); // $ SPURIOUS: sensitive=id
310+
sink(info.financials.total_accounts); // $ SPURIOUS: sensitive=id
311+
sink(info.financials.accounting); // $ SPURIOUS: sensitive=id
312+
sink(info.financials.unaccounted); // $ SPURIOUS: sensitive=id
313313
sink(info.financials.multiband);
314314

315315
sink(ContactDetails::FavouriteColor("blue".to_string()));

0 commit comments

Comments
 (0)