44 * @kind path-problem
55 * @problem.severity error
66 * @security-severity 7.8
7- * @precision medium
7+ * @precision high
88 * @id go/uncontrolled-file-decompression
99 * @tags security
1010 * experimental
@@ -24,50 +24,8 @@ module DecompressionBombs implements DataFlow::StateConfigSig {
2424 source instanceof UntrustedFlowSource
2525 or
2626 source instanceof CmdLineFlowSource
27- // or
28- // exists(Parameter p | p.getARead() = source | p.hasQualifiedName("io", "Reader"))
2927 ) and
3028 state = ""
31- or
32- exists ( DataFlow:: Function f |
33- (
34- f .hasQualifiedName ( "archive/zip" , [ "OpenReader" , "NewReader" ] )
35- or
36- f .hasQualifiedName ( "github.com/klauspost/compress/zip" , [ "NewReader" , "OpenReader" ] )
37- or
38- f .hasQualifiedName ( "github.com/ulikunitz/xz" , "NewReader" )
39- or
40- f .hasQualifiedName ( [
41- "compress/gzip" , "github.com/klauspost/compress/gzip" , "github.com/klauspost/pgzip"
42- ] , "NewReader" )
43- or
44- f .hasQualifiedName ( [
45- "compress/bzip2" , "github.com/dsnet/compress/bzip2" , "github.com/cosnicolaou/pbzip2"
46- ] , "NewReader" )
47- or
48- f .hasQualifiedName ( [ "github.com/dsnet/compress/flate" ] , "NewReader" )
49- or
50- f .hasQualifiedName ( [ "compress/flate" , "github.com/klauspost/compress/flate" ] ,
51- [ "NewReaderDict" , "NewReader" ] )
52- or
53- f .hasQualifiedName ( [ "compress/zlib" , "github.com/klauspost/compress/zlib" ] , "NewReader" )
54- or
55- f .hasQualifiedName ( [ "github.com/klauspost/compress/zstd" , "github.com/DataDog/zstd" ] ,
56- "NewReader" )
57- or
58- f .hasQualifiedName ( [ "github.com/golang/snappy" , "github.com/klauspost/compress/snappy" ] ,
59- "NewReader" )
60- or
61- f .hasQualifiedName ( "github.com/klauspost/compress/s2" , "NewReader" )
62- ) and
63- source = f .getACall ( ) .getResult ( 0 ) and
64- not TaintTracking:: localExprTaint ( any ( StringLit c ) , source .asExpr ( ) ) and
65- state =
66- [
67- "ZstdNewReader" , "XzNewReader" , "GzipNewReader" , "S2NewReader" , "SnapyNewReader" ,
68- "ZlibNewReader" , "FlateNewReader" , "Bzip2NewReader" , "ZipOpenReader" , "ZipKlauspost"
69- ]
70- )
7129 }
7230
7331 predicate isSink ( DataFlow:: Node sink , FlowState state ) {
0 commit comments