Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Commit ba78eda

Browse files
committed
Add taint-tracking for encoding/asn1
1 parent 412ba12 commit ba78eda

3 files changed

Lines changed: 152 additions & 0 deletions

File tree

ql/src/semmle/go/frameworks/Stdlib.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import semmle.go.frameworks.stdlib.MimeMultipart
1717
import semmle.go.frameworks.stdlib.MimeQuotedprintable
1818
import semmle.go.frameworks.stdlib.Encoding
1919
import semmle.go.frameworks.stdlib.EncodingAscii85
20+
import semmle.go.frameworks.stdlib.EncodingAsn1
2021
import semmle.go.frameworks.stdlib.Path
2122
import semmle.go.frameworks.stdlib.PathFilepath
2223
import semmle.go.frameworks.stdlib.Reflect
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Provides classes modeling security-relevant aspects of the `encoding/asn1` package.
3+
*/
4+
5+
import go
6+
7+
/** Provides models of commonly used functions in the `encoding/asn1` package. */
8+
module EncodingAsn1 {
9+
private class FunctionModels extends TaintTracking::FunctionModel {
10+
FunctionInput inp;
11+
FunctionOutput outp;
12+
13+
FunctionModels() {
14+
// signature: func Marshal(val interface{}) ([]byte, error)
15+
hasQualifiedName("encoding/asn1", "Marshal") and
16+
(inp.isParameter(0) and outp.isResult(0))
17+
or
18+
// signature: func MarshalWithParams(val interface{}, params string) ([]byte, error)
19+
hasQualifiedName("encoding/asn1", "MarshalWithParams") and
20+
(inp.isParameter(_) and outp.isResult(0))
21+
or
22+
// signature: func Unmarshal(b []byte, val interface{}) (rest []byte, err error)
23+
hasQualifiedName("encoding/asn1", "Unmarshal") and
24+
(
25+
inp.isParameter(0) and
26+
(outp.isParameter(1) or outp.isResult(0))
27+
)
28+
or
29+
// signature: func UnmarshalWithParams(b []byte, val interface{}, params string) (rest []byte, err error)
30+
hasQualifiedName("encoding/asn1", "UnmarshalWithParams") and
31+
(
32+
inp.isParameter([0, 2]) and
33+
(outp.isParameter(1) or outp.isResult(0))
34+
)
35+
}
36+
37+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
38+
input = inp and output = outp
39+
}
40+
}
41+
}

ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/EncodingAsn1.go

Lines changed: 110 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)