Skip to content

Commit 10c5a47

Browse files
committed
Allow query-specific MaD sanitizers
1 parent 1e8f00e commit 10c5a47

30 files changed

+96
-18
lines changed

go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ module AllocationSizeOverflow {
4545

4646
predicate isSink(DataFlow::Node sink) { isSinkWithAllocationSize(sink, _) }
4747

48-
predicate isBarrier(DataFlow::Node nd) { nd instanceof Sanitizer }
48+
predicate isBarrier(DataFlow::Node node) {
49+
node instanceof Sanitizer or
50+
barrierNode(node, "go/allocation-size-overflow")
51+
}
4952

5053
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
5154
additionalStep(pred, succ)

go/ql/lib/semmle/go/security/CleartextLogging.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ module CleartextLogging {
2424
predicate isBarrier(DataFlow::Node node) {
2525
node instanceof Barrier
2626
or
27+
barrierNode(node, "go/clear-text-logging")
28+
or
2729
exists(DataFlow::CallNode call | node = call.getResult() |
2830
call.getTarget() = Builtin::error().getType().getMethod("Error")
2931
or

go/ql/lib/semmle/go/security/CommandInjection.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ module CommandInjection {
2323
exists(Sink s | sink = s | not s.doubleDashIsSanitizing())
2424
}
2525

26-
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
26+
predicate isBarrier(DataFlow::Node node) {
27+
node instanceof Sanitizer or barrierNode(node, "go/command-injection")
28+
}
2729

2830
predicate observeDiffInformedIncrementalMode() { any() }
2931
}
@@ -80,6 +82,7 @@ module CommandInjection {
8082

8183
predicate isBarrier(DataFlow::Node node) {
8284
node instanceof Sanitizer or
85+
barrierNode(node, "go/command-injection") or
8386
node = any(ArgumentArrayWithDoubleDash array).getASanitizedElement()
8487
}
8588

go/ql/lib/semmle/go/security/CookieWithoutHttpOnly.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ private module SensitiveCookieNameConfig implements DataFlow::ConfigSig {
2323

2424
predicate isSink(DataFlow::Node sink) { isSink(sink, _) }
2525

26+
predicate isBarrier(DataFlow::Node node) { barrierNode(node, "go/cookie-httponly-not-set") }
27+
2628
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
2729
exists(Http::CookieOptionWrite co | co.getName() = pred and co.getCookieOutput() = succ)
2830
}

go/ql/lib/semmle/go/security/InsecureRandomness.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ module InsecureRandomness {
2424

2525
predicate isSink(DataFlow::Node sink) { isSinkWithKind(sink, _) }
2626

27-
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
27+
predicate isBarrier(DataFlow::Node node) {
28+
node instanceof Sanitizer or
29+
barrierNode(node, "go/insecure-randomness")
30+
}
2831

2932
predicate isBarrierOut(DataFlow::Node node) { isSink(node) }
3033

go/ql/lib/semmle/go/security/LogInjection.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ module LogInjection {
2020

2121
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
2222

23-
predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof Sanitizer }
23+
predicate isBarrier(DataFlow::Node node) {
24+
node instanceof Sanitizer or
25+
barrierNode(node, "go/log-injection")
26+
}
2427

2528
predicate observeDiffInformedIncrementalMode() { any() }
2629
}

go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ module MissingJwtSignatureCheck {
2020

2121
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
2222

23+
predicate isBarrier(DataFlow::Node node) { barrierNode(node, "go/missing-jwt-signature-check") }
24+
2325
predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
2426
any(AdditionalFlowStep s).step(nodeFrom, nodeTo)
2527
}

go/ql/lib/semmle/go/security/OpenUrlRedirect.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ module OpenUrlRedirect {
2222

2323
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
2424

25-
predicate isBarrier(DataFlow::Node node) { node instanceof Barrier }
25+
predicate isBarrier(DataFlow::Node node) {
26+
node instanceof Barrier or
27+
barrierNode(node, "go/unvalidated-url-redirection")
28+
}
2629

2730
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
2831
// taint steps that do not include flow through fields

go/ql/lib/semmle/go/security/ReflectedXss.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ module ReflectedXss {
2121

2222
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
2323

24-
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
24+
predicate isBarrier(DataFlow::Node node) {
25+
node instanceof Sanitizer or
26+
barrierNode(node, "go/reflected-xss")
27+
}
2528

2629
predicate observeDiffInformedIncrementalMode() { any() }
2730

go/ql/lib/semmle/go/security/RequestForgery.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ module RequestForgery {
2121

2222
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
2323

24-
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
24+
predicate isBarrier(DataFlow::Node node) {
25+
node instanceof Sanitizer or
26+
barrierNode(node, "go/request-forgery")
27+
}
2528

2629
predicate isBarrierOut(DataFlow::Node node) { node instanceof SanitizerEdge }
2730

0 commit comments

Comments
 (0)