Skip to content

Commit 78c0cdf

Browse files
atorralbaowen-mc
andcommitted
Apply suggestions from code review
co-authored-by: Owen Mansel-Chan <[email protected]>
1 parent 3534f69 commit 78c0cdf

File tree

3 files changed

+99
-17
lines changed

3 files changed

+99
-17
lines changed

go/ql/lib/semmle/go/frameworks/stdlib/Log.qll

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,38 @@ import go
88
module Log {
99
private class LogFunction extends Function {
1010
LogFunction() {
11-
exists(string fn | fn.matches(["Fatal%", "Panic%", "Print%", "Output"]) |
11+
exists(string fn | fn.matches(["Fatal%", "Panic%", "Print%"]) |
1212
this.hasQualifiedName("log", fn)
1313
or
1414
this.(Method).hasQualifiedName("log", "Logger", fn)
1515
)
1616
}
1717
}
1818

19+
private class LogOutput extends Method {
20+
LogOutput() { this.hasQualifiedName("log", "Logger", "Output") }
21+
}
22+
1923
private class LogFormatter extends StringOps::Formatting::Range instanceof LogFunction {
2024
LogFormatter() { this.getName().matches("%f") }
2125

2226
override int getFormatStringIndex() { result = 0 }
2327
}
2428

2529
private class LogCall extends LoggerCall::Range, DataFlow::CallNode {
26-
LogCall() { this = any(LogFunction f).getACall() }
30+
DataFlow::Node messageComponent;
31+
32+
LogCall() {
33+
exists(Function f | this = f.getACall() |
34+
f instanceof LogFunction and
35+
messageComponent = this.getASyntacticArgument()
36+
or
37+
f instanceof LogOutput and
38+
messageComponent = this.getSyntacticArgument(1)
39+
)
40+
}
2741

28-
override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() }
42+
override DataFlow::Node getAMessageComponent() { result = messageComponent }
2943
}
3044

3145
/** A fatal log function, which calls `os.Exit`. */

go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ edges
66
| klog.go:21:11:21:16 | definition of header | klog.go:22:15:22:20 | header |
77
| klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] |
88
| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get |
9-
| main.go:20:2:20:7 | definition of fields | main.go:22:29:22:34 | fields |
10-
| main.go:21:19:21:26 | password | main.go:20:2:20:7 | definition of fields |
119
| overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String |
1210
| passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x |
1311
| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x |
@@ -63,13 +61,34 @@ nodes
6361
| klog.go:22:15:22:20 | header | semmle.label | header |
6462
| klog.go:28:13:28:20 | selection of Header | semmle.label | selection of Header |
6563
| klog.go:28:13:28:41 | call to Get | semmle.label | call to Get |
66-
| main.go:15:14:15:21 | password | semmle.label | password |
67-
| main.go:17:12:17:19 | password | semmle.label | password |
68-
| main.go:18:17:18:24 | password | semmle.label | password |
69-
| main.go:20:2:20:7 | definition of fields | semmle.label | definition of fields |
70-
| main.go:21:19:21:26 | password | semmle.label | password |
71-
| main.go:22:29:22:34 | fields | semmle.label | fields |
72-
| main.go:25:35:25:42 | password | semmle.label | password |
64+
| main.go:15:12:15:19 | password | semmle.label | password |
65+
| main.go:16:17:16:24 | password | semmle.label | password |
66+
| main.go:17:13:17:20 | password | semmle.label | password |
67+
| main.go:18:14:18:21 | password | semmle.label | password |
68+
| main.go:19:12:19:19 | password | semmle.label | password |
69+
| main.go:20:17:20:24 | password | semmle.label | password |
70+
| main.go:21:13:21:20 | password | semmle.label | password |
71+
| main.go:22:14:22:21 | password | semmle.label | password |
72+
| main.go:23:12:23:19 | password | semmle.label | password |
73+
| main.go:24:17:24:24 | password | semmle.label | password |
74+
| main.go:25:13:25:20 | password | semmle.label | password |
75+
| main.go:26:14:26:21 | password | semmle.label | password |
76+
| main.go:29:10:29:17 | password | semmle.label | password |
77+
| main.go:30:15:30:22 | password | semmle.label | password |
78+
| main.go:31:11:31:18 | password | semmle.label | password |
79+
| main.go:32:12:32:19 | password | semmle.label | password |
80+
| main.go:33:10:33:17 | password | semmle.label | password |
81+
| main.go:34:15:34:22 | password | semmle.label | password |
82+
| main.go:35:11:35:18 | password | semmle.label | password |
83+
| main.go:36:12:36:19 | password | semmle.label | password |
84+
| main.go:37:10:37:17 | password | semmle.label | password |
85+
| main.go:38:15:38:22 | password | semmle.label | password |
86+
| main.go:39:11:39:18 | password | semmle.label | password |
87+
| main.go:40:12:40:19 | password | semmle.label | password |
88+
| main.go:41:14:41:21 | password | semmle.label | password |
89+
| main.go:43:12:43:19 | password | semmle.label | password |
90+
| main.go:44:17:44:24 | password | semmle.label | password |
91+
| main.go:51:35:51:42 | password | semmle.label | password |
7392
| overrides.go:9:9:9:16 | password | semmle.label | password |
7493
| overrides.go:13:14:13:23 | call to String | semmle.label | call to String |
7594
| passwords.go:8:12:8:12 | definition of x | semmle.label | definition of x |
@@ -139,11 +158,34 @@ subpaths
139158
#select
140159
| klog.go:22:15:22:20 | header | klog.go:20:30:20:37 | selection of Header | klog.go:22:15:22:20 | header | $@ flows to a logging call. | klog.go:20:30:20:37 | selection of Header | Sensitive data returned by HTTP request headers |
141160
| klog.go:28:13:28:41 | call to Get | klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | $@ flows to a logging call. | klog.go:28:13:28:20 | selection of Header | Sensitive data returned by HTTP request headers |
142-
| main.go:15:14:15:21 | password | main.go:15:14:15:21 | password | main.go:15:14:15:21 | password | $@ flows to a logging call. | main.go:15:14:15:21 | password | Sensitive data returned by an access to password |
143-
| main.go:17:12:17:19 | password | main.go:17:12:17:19 | password | main.go:17:12:17:19 | password | $@ flows to a logging call. | main.go:17:12:17:19 | password | Sensitive data returned by an access to password |
144-
| main.go:18:17:18:24 | password | main.go:18:17:18:24 | password | main.go:18:17:18:24 | password | $@ flows to a logging call. | main.go:18:17:18:24 | password | Sensitive data returned by an access to password |
145-
| main.go:22:29:22:34 | fields | main.go:21:19:21:26 | password | main.go:22:29:22:34 | fields | $@ flows to a logging call. | main.go:21:19:21:26 | password | Sensitive data returned by an access to password |
146-
| main.go:25:35:25:42 | password | main.go:25:35:25:42 | password | main.go:25:35:25:42 | password | $@ flows to a logging call. | main.go:25:35:25:42 | password | Sensitive data returned by an access to password |
161+
| main.go:15:12:15:19 | password | main.go:15:12:15:19 | password | main.go:15:12:15:19 | password | $@ flows to a logging call. | main.go:15:12:15:19 | password | Sensitive data returned by an access to password |
162+
| main.go:16:17:16:24 | password | main.go:16:17:16:24 | password | main.go:16:17:16:24 | password | $@ flows to a logging call. | main.go:16:17:16:24 | password | Sensitive data returned by an access to password |
163+
| main.go:17:13:17:20 | password | main.go:17:13:17:20 | password | main.go:17:13:17:20 | password | $@ flows to a logging call. | main.go:17:13:17:20 | password | Sensitive data returned by an access to password |
164+
| main.go:18:14:18:21 | password | main.go:18:14:18:21 | password | main.go:18:14:18:21 | password | $@ flows to a logging call. | main.go:18:14:18:21 | password | Sensitive data returned by an access to password |
165+
| main.go:19:12:19:19 | password | main.go:19:12:19:19 | password | main.go:19:12:19:19 | password | $@ flows to a logging call. | main.go:19:12:19:19 | password | Sensitive data returned by an access to password |
166+
| main.go:20:17:20:24 | password | main.go:20:17:20:24 | password | main.go:20:17:20:24 | password | $@ flows to a logging call. | main.go:20:17:20:24 | password | Sensitive data returned by an access to password |
167+
| main.go:21:13:21:20 | password | main.go:21:13:21:20 | password | main.go:21:13:21:20 | password | $@ flows to a logging call. | main.go:21:13:21:20 | password | Sensitive data returned by an access to password |
168+
| main.go:22:14:22:21 | password | main.go:22:14:22:21 | password | main.go:22:14:22:21 | password | $@ flows to a logging call. | main.go:22:14:22:21 | password | Sensitive data returned by an access to password |
169+
| main.go:23:12:23:19 | password | main.go:23:12:23:19 | password | main.go:23:12:23:19 | password | $@ flows to a logging call. | main.go:23:12:23:19 | password | Sensitive data returned by an access to password |
170+
| main.go:24:17:24:24 | password | main.go:24:17:24:24 | password | main.go:24:17:24:24 | password | $@ flows to a logging call. | main.go:24:17:24:24 | password | Sensitive data returned by an access to password |
171+
| main.go:25:13:25:20 | password | main.go:25:13:25:20 | password | main.go:25:13:25:20 | password | $@ flows to a logging call. | main.go:25:13:25:20 | password | Sensitive data returned by an access to password |
172+
| main.go:26:14:26:21 | password | main.go:26:14:26:21 | password | main.go:26:14:26:21 | password | $@ flows to a logging call. | main.go:26:14:26:21 | password | Sensitive data returned by an access to password |
173+
| main.go:29:10:29:17 | password | main.go:29:10:29:17 | password | main.go:29:10:29:17 | password | $@ flows to a logging call. | main.go:29:10:29:17 | password | Sensitive data returned by an access to password |
174+
| main.go:30:15:30:22 | password | main.go:30:15:30:22 | password | main.go:30:15:30:22 | password | $@ flows to a logging call. | main.go:30:15:30:22 | password | Sensitive data returned by an access to password |
175+
| main.go:31:11:31:18 | password | main.go:31:11:31:18 | password | main.go:31:11:31:18 | password | $@ flows to a logging call. | main.go:31:11:31:18 | password | Sensitive data returned by an access to password |
176+
| main.go:32:12:32:19 | password | main.go:32:12:32:19 | password | main.go:32:12:32:19 | password | $@ flows to a logging call. | main.go:32:12:32:19 | password | Sensitive data returned by an access to password |
177+
| main.go:33:10:33:17 | password | main.go:33:10:33:17 | password | main.go:33:10:33:17 | password | $@ flows to a logging call. | main.go:33:10:33:17 | password | Sensitive data returned by an access to password |
178+
| main.go:34:15:34:22 | password | main.go:34:15:34:22 | password | main.go:34:15:34:22 | password | $@ flows to a logging call. | main.go:34:15:34:22 | password | Sensitive data returned by an access to password |
179+
| main.go:35:11:35:18 | password | main.go:35:11:35:18 | password | main.go:35:11:35:18 | password | $@ flows to a logging call. | main.go:35:11:35:18 | password | Sensitive data returned by an access to password |
180+
| main.go:36:12:36:19 | password | main.go:36:12:36:19 | password | main.go:36:12:36:19 | password | $@ flows to a logging call. | main.go:36:12:36:19 | password | Sensitive data returned by an access to password |
181+
| main.go:37:10:37:17 | password | main.go:37:10:37:17 | password | main.go:37:10:37:17 | password | $@ flows to a logging call. | main.go:37:10:37:17 | password | Sensitive data returned by an access to password |
182+
| main.go:38:15:38:22 | password | main.go:38:15:38:22 | password | main.go:38:15:38:22 | password | $@ flows to a logging call. | main.go:38:15:38:22 | password | Sensitive data returned by an access to password |
183+
| main.go:39:11:39:18 | password | main.go:39:11:39:18 | password | main.go:39:11:39:18 | password | $@ flows to a logging call. | main.go:39:11:39:18 | password | Sensitive data returned by an access to password |
184+
| main.go:40:12:40:19 | password | main.go:40:12:40:19 | password | main.go:40:12:40:19 | password | $@ flows to a logging call. | main.go:40:12:40:19 | password | Sensitive data returned by an access to password |
185+
| main.go:41:14:41:21 | password | main.go:41:14:41:21 | password | main.go:41:14:41:21 | password | $@ flows to a logging call. | main.go:41:14:41:21 | password | Sensitive data returned by an access to password |
186+
| main.go:43:12:43:19 | password | main.go:43:12:43:19 | password | main.go:43:12:43:19 | password | $@ flows to a logging call. | main.go:43:12:43:19 | password | Sensitive data returned by an access to password |
187+
| main.go:44:17:44:24 | password | main.go:44:17:44:24 | password | main.go:44:17:44:24 | password | $@ flows to a logging call. | main.go:44:17:44:24 | password | Sensitive data returned by an access to password |
188+
| main.go:51:35:51:42 | password | main.go:51:35:51:42 | password | main.go:51:35:51:42 | password | $@ flows to a logging call. | main.go:51:35:51:42 | password | Sensitive data returned by an access to password |
147189
| overrides.go:13:14:13:23 | call to String | overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | $@ flows to a logging call. | overrides.go:9:9:9:16 | password | Sensitive data returned by an access to password |
148190
| passwords.go:9:14:9:14 | x | passwords.go:30:8:30:15 | password | passwords.go:9:14:9:14 | x | $@ flows to a logging call. | passwords.go:30:8:30:15 | password | Sensitive data returned by an access to password |
149191
| passwords.go:25:14:25:21 | password | passwords.go:25:14:25:21 | password | passwords.go:25:14:25:21 | password | $@ flows to a logging call. | passwords.go:25:14:25:21 | password | Sensitive data returned by an access to password |

go/ql/test/query-tests/Security/CWE-312/main.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,33 @@ import (
1212
func main() {
1313
password := "P4ssw0rd"
1414

15+
log.Print(password)
16+
log.Printf("", password)
17+
log.Printf(password, "")
1518
log.Println(password)
19+
log.Fatal(password)
20+
log.Fatalf("", password)
21+
log.Fatalf(password, "")
22+
log.Fatalln(password)
23+
log.Panic(password)
24+
log.Panicf("", password)
25+
log.Panicf(password, "")
26+
log.Panicln(password)
27+
28+
l := log.Default()
29+
l.Print(password)
30+
l.Printf("", password)
31+
l.Printf(password, "")
32+
l.Println(password)
33+
l.Fatal(password)
34+
l.Fatalf("", password)
35+
l.Fatalf(password, "")
36+
l.Fatalln(password)
37+
l.Panic(password)
38+
l.Panicf("", password)
39+
l.Panicf(password, "")
40+
l.Panicln(password)
41+
l.Output(0, password)
1642

1743
glog.Info(password)
1844
logrus.Warning(password)

0 commit comments

Comments
 (0)