Skip to content

Commit fd4c9fd

Browse files
committed
Cover a missing @tag security when @security-severity is used
1 parent 82b2fd2 commit fd4c9fd

17 files changed

+69
-34
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* @name Missing security metadata
3+
* @description Security queries should have both a `@tag security` and a `@security-severity` tag.
4+
* @kind problem
5+
* @problem.severity warning
6+
* @precision very-high
7+
* @id ql/missing-security-metadata
8+
* @tags correctness
9+
*/
10+
11+
import ql
12+
13+
predicate missingSecuritySeverity(QLDoc doc) {
14+
exists(string s | s = doc.getContents() |
15+
exists(string securityTag | securityTag = s.splitAt("@") |
16+
securityTag.matches("tags%security%")
17+
) and
18+
exists(string precisionTag | precisionTag = s.splitAt("@") |
19+
precisionTag.matches("precision %")
20+
) and
21+
not exists(string securitySeverity | securitySeverity = s.splitAt("@") |
22+
securitySeverity.matches("security-severity %")
23+
)
24+
)
25+
}
26+
27+
predicate missingSecurityTag(QLDoc doc) {
28+
exists(string s | s = doc.getContents() |
29+
exists(string securitySeverity | securitySeverity = s.splitAt("@") |
30+
securitySeverity.matches("security-severity %")
31+
) and
32+
exists(string precisionTag | precisionTag = s.splitAt("@") |
33+
precisionTag.matches("precision %")
34+
) and
35+
not exists(string securityTag | securityTag = s.splitAt("@") |
36+
securityTag.matches("tags%security%")
37+
)
38+
)
39+
}
40+
41+
from TopLevel t, string msg
42+
where
43+
t.getLocation().getFile().getBaseName().matches("%.ql") and
44+
not t.getLocation().getFile().getRelativePath().matches(["%/experimental/%", "%/examples/%"]) and
45+
(
46+
missingSecuritySeverity(t.getQLDoc()) and
47+
msg = "This query file is missing a `@security-severity` tag."
48+
or
49+
missingSecurityTag(t.getQLDoc()) and msg = "This query file is missing a `@tag security`."
50+
)
51+
select t, msg

ql/ql/src/queries/style/MissingSecuritySeverity.ql

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| testcases/BadNoSecurity.ql:1:1:15:9 | TopLevel | This query file is missing a `@tag security`. |
2+
| testcases/BadNoSeverity.ql:1:1:15:9 | TopLevel | This query file is missing a `@security-severity` tag. |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
queries/style/MissingSecurityMetadata.ql
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @name Some query
3+
* @description Some description
4+
* @kind problem
5+
* @problem.severity warning
6+
* @security-severity 10.0
7+
* @precision very-high
8+
* @id ql/some-query
9+
* @tags quality
10+
*/
11+
12+
import ql
13+
14+
from Class c
15+
select c

0 commit comments

Comments
 (0)