Skip to content

Commit a1688f6

Browse files
authored
Merge pull request #17240 from knewbury01/knewbury01/fix-helmetrequiredsetting-model
Update JS helmet model structure
2 parents bd69b96 + 7dcdad0 commit a1688f6

File tree

4 files changed

+44
-25
lines changed

4 files changed

+44
-25
lines changed

javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
extensions:
22
- addsTo:
3-
pack: codeql/javascript-queries
3+
pack: codeql/javascript-all
44
extensible: requiredHelmetSecuritySetting
55
data:
66
- ["frameguard"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Provides classes for working with Helmet
3+
*/
4+
5+
private import javascript
6+
7+
/**
8+
* A write to a property of a route handler from the "helmet" module.
9+
*/
10+
class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite {
11+
ExpressLibraries::HelmetRouteHandler helmet;
12+
13+
HelmetProperty() {
14+
this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite()
15+
}
16+
17+
/**
18+
* Gets the route handler associated to this property.
19+
*/
20+
ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet }
21+
22+
/**
23+
* Gets the boolean value of this property, if it may evaluate to a `Boolean`.
24+
*/
25+
predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) }
26+
27+
/**
28+
* Gets the name of the `HelmetProperty`.
29+
*/
30+
string getName() { result = DataFlow::PropWrite.super.getPropertyName() }
31+
32+
/**
33+
* read from data extensions to allow enforcing custom settings
34+
*/
35+
predicate isImportantSecuritySetting() { requiredHelmetSecuritySetting(this.getName()) }
36+
}
37+
38+
/**
39+
* defaults are located in `javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml`
40+
*/
41+
extensible predicate requiredHelmetSecuritySetting(string name);

javascript/ql/src/Security/CWE-693/CUSTOMIZING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ A suitable [model pack](https://docs.github.com/en/code-security/codeql-cli/usin
2424
name: my-org/javascript-helmet-insecure-config-model-pack
2525
version: 1.0.0
2626
extensionTargets:
27-
codeql/java-all: '*'
27+
codeql/javascript-all: '*'
2828
dataExtensions:
2929
- models/**/*.yml
3030
```

javascript/ql/src/Security/CWE-693/InsecureHelmet.ql

+1-23
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,8 @@
1212
*/
1313

1414
import javascript
15-
import DataFlow
1615
import semmle.javascript.frameworks.ExpressModules
17-
18-
class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite {
19-
ExpressLibraries::HelmetRouteHandler helmet;
20-
21-
HelmetProperty() {
22-
this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite()
23-
}
24-
25-
ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet }
26-
27-
predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) }
28-
29-
string getName() { result = DataFlow::PropWrite.super.getPropertyName() }
30-
31-
predicate isImportantSecuritySetting() {
32-
// read from data extensions to allow enforcing custom settings
33-
// defaults are located in javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml
34-
requiredHelmetSecuritySetting(this.getName())
35-
}
36-
}
37-
38-
extensible predicate requiredHelmetSecuritySetting(string name);
16+
import semmle.javascript.frameworks.helmet.Helmet
3917

4018
from HelmetProperty helmetProperty, ExpressLibraries::HelmetRouteHandler helmet
4119
where

0 commit comments

Comments
 (0)