@@ -3,13 +3,6 @@ import go
3
3
module DecompressionBombs {
4
4
class FlowState = DataFlow:: FlowState ;
5
5
6
- /**
7
- * The Sinks of uncontrolled data decompression
8
- */
9
- class Sink extends DataFlow:: Node {
10
- Sink ( ) { this = any ( Range r ) .sink ( ) }
11
- }
12
-
13
6
/**
14
7
* The additional taint steps that need for creating taint tracking or dataflow.
15
8
*/
@@ -30,30 +23,20 @@ module DecompressionBombs {
30
23
}
31
24
32
25
/**
33
- * A abstract class responsible for extending new decompression sinks
26
+ * The Sinks of uncontrolled data decompression
34
27
*/
35
- abstract private class Range extends DataFlow:: Node {
36
- /**
37
- * Gets the sink of responsible for decompression node
38
- *
39
- * it can be a path, stream of compressed data,
40
- * or a call to function that use pipe
41
- */
42
- abstract DataFlow:: Node sink ( ) ;
43
- }
28
+ abstract class Sink extends DataFlow:: Node { }
44
29
45
30
/**
46
31
* Provides Decompression Sinks and additional flow steps for `github.com/DataDog/zstd` package
47
32
*/
48
33
module DataDogZstd {
49
- class TheSink extends Range {
34
+ class TheSink extends Sink {
50
35
TheSink ( ) {
51
36
exists ( Method f | f .hasQualifiedName ( "github.com/DataDog/zstd" , "reader" , "Read" ) |
52
37
this = f .getACall ( ) .getReceiver ( )
53
38
)
54
39
}
55
-
56
- override DataFlow:: Node sink ( ) { result = this }
57
40
}
58
41
59
42
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -83,7 +66,7 @@ module DecompressionBombs {
83
66
* Provides Decompression Sinks and additional flow steps for `github.com/klauspost/compress/zstd` package
84
67
*/
85
68
module KlauspostZstd {
86
- class TheSink extends Range {
69
+ class TheSink extends Sink {
87
70
TheSink ( ) {
88
71
exists ( Method f |
89
72
f .hasQualifiedName ( "github.com/klauspost/compress/zstd" , "Decoder" ,
@@ -98,8 +81,6 @@ module DecompressionBombs {
98
81
this = f .getACall ( ) .getReceiver ( )
99
82
)
100
83
}
101
-
102
- override DataFlow:: Node sink ( ) { result = this }
103
84
}
104
85
105
86
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -195,14 +176,12 @@ module DecompressionBombs {
195
176
* Provides Decompression Sinks and additional taint steps for `github.com/ulikunitz/xz` package
196
177
*/
197
178
module UlikunitzXz {
198
- class TheSink extends Range {
179
+ class TheSink extends Sink {
199
180
TheSink ( ) {
200
181
exists ( Method f | f .hasQualifiedName ( "github.com/ulikunitz/xz" , "Reader" , "Read" ) |
201
182
this = f .getACall ( ) .getReceiver ( )
202
183
)
203
184
}
204
-
205
- override DataFlow:: Node sink ( ) { result = this }
206
185
}
207
186
208
187
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -231,14 +210,12 @@ module DecompressionBombs {
231
210
* Provides Decompression Sinks and additional taint steps for `compress/gzip` package
232
211
*/
233
212
module CompressGzip {
234
- class TheSink extends Range {
213
+ class TheSink extends Sink {
235
214
TheSink ( ) {
236
215
exists ( Method f | f .hasQualifiedName ( "compress/gzip" , "Reader" , "Read" ) |
237
216
this = f .getACall ( ) .getReceiver ( )
238
217
)
239
218
}
240
-
241
- override DataFlow:: Node sink ( ) { result = this }
242
219
}
243
220
244
221
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -268,7 +245,7 @@ module DecompressionBombs {
268
245
* Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/gzip` package
269
246
*/
270
247
module KlauspostGzip {
271
- class TheSink extends Range {
248
+ class TheSink extends Sink {
272
249
TheSink ( ) {
273
250
exists ( Method f |
274
251
f .hasQualifiedName ( "github.com/klauspost/compress/gzip" , "Reader" , "Read" )
@@ -283,8 +260,6 @@ module DecompressionBombs {
283
260
this = f .getACall ( ) .getReceiver ( )
284
261
)
285
262
}
286
-
287
- override DataFlow:: Node sink ( ) { result = this }
288
263
}
289
264
290
265
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -315,14 +290,12 @@ module DecompressionBombs {
315
290
* Provides Decompression Sinks and additional taint steps for `compress/bzip2` package
316
291
*/
317
292
module CompressBzip2 {
318
- class TheSink extends Range {
293
+ class TheSink extends Sink {
319
294
TheSink ( ) {
320
295
exists ( Method f | f .hasQualifiedName ( "compress/bzip2" , "reader" , "Read" ) |
321
296
this = f .getACall ( ) .getReceiver ( )
322
297
)
323
298
}
324
-
325
- override DataFlow:: Node sink ( ) { result = this }
326
299
}
327
300
328
301
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -352,14 +325,12 @@ module DecompressionBombs {
352
325
* Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/bzip2` package
353
326
*/
354
327
module DsnetBzip2 {
355
- class TheSink extends Range {
328
+ class TheSink extends Sink {
356
329
TheSink ( ) {
357
330
exists ( Method f | f .hasQualifiedName ( "github.com/dsnet/compress/bzip2" , "Reader" , "Read" ) |
358
331
this = f .getACall ( ) .getReceiver ( )
359
332
)
360
333
}
361
-
362
- override DataFlow:: Node sink ( ) { result = this }
363
334
}
364
335
365
336
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -389,14 +360,12 @@ module DecompressionBombs {
389
360
* Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/flate` package
390
361
*/
391
362
module DsnetFlate {
392
- class TheSink extends Range {
363
+ class TheSink extends Sink {
393
364
TheSink ( ) {
394
365
exists ( Method f | f .hasQualifiedName ( "github.com/dsnet/compress/flate" , "Reader" , "Read" ) |
395
366
this = f .getACall ( ) .getReceiver ( )
396
367
)
397
368
}
398
-
399
- override DataFlow:: Node sink ( ) { result = this }
400
369
}
401
370
402
371
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -426,14 +395,12 @@ module DecompressionBombs {
426
395
* Provides Decompression Sinks and additional taint steps for `compress/flate` package
427
396
*/
428
397
module CompressFlate {
429
- class TheSink extends Range {
398
+ class TheSink extends Sink {
430
399
TheSink ( ) {
431
400
exists ( Method f | f .hasQualifiedName ( "compress/flate" , "decompressor" , "Read" ) |
432
401
this = f .getACall ( ) .getReceiver ( )
433
402
)
434
403
}
435
-
436
- override DataFlow:: Node sink ( ) { result = this }
437
404
}
438
405
439
406
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -463,16 +430,14 @@ module DecompressionBombs {
463
430
* Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/flate` package
464
431
*/
465
432
module KlauspostFlate {
466
- class TheSink extends Range {
433
+ class TheSink extends Sink {
467
434
TheSink ( ) {
468
435
exists ( Method f |
469
436
f .hasQualifiedName ( "github.com/klauspost/compress/flate" , "decompressor" , "Read" )
470
437
|
471
438
this = f .getACall ( ) .getReceiver ( )
472
439
)
473
440
}
474
-
475
- override DataFlow:: Node sink ( ) { result = this }
476
441
}
477
442
478
443
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -482,7 +447,7 @@ module DecompressionBombs {
482
447
DataFlow:: Node fromNode , FlowState fromState , DataFlow:: Node toNode , FlowState toState
483
448
) {
484
449
exists ( Function f , DataFlow:: CallNode call |
485
- f .hasQualifiedName ( [ "github.com/klauspost/compress/flate" ] , [ "NewReaderDict" , "NewReader" ] ) and
450
+ f .hasQualifiedName ( "github.com/klauspost/compress/flate" , [ "NewReaderDict" , "NewReader" ] ) and
486
451
call = f .getACall ( )
487
452
|
488
453
fromNode = call .getArgument ( 0 ) and
@@ -502,16 +467,14 @@ module DecompressionBombs {
502
467
* Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/zlib` package
503
468
*/
504
469
module KlauspostZlib {
505
- class TheSink extends Range {
470
+ class TheSink extends Sink {
506
471
TheSink ( ) {
507
472
exists ( Method f |
508
473
f .hasQualifiedName ( "github.com/klauspost/compress/zlib" , "reader" , "Read" )
509
474
|
510
475
this = f .getACall ( ) .getReceiver ( )
511
476
)
512
477
}
513
-
514
- override DataFlow:: Node sink ( ) { result = this }
515
478
}
516
479
517
480
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -541,14 +504,12 @@ module DecompressionBombs {
541
504
* Provides Decompression Sinks and additional taint steps for `compress/zlib` package
542
505
*/
543
506
module CompressZlib {
544
- class TheSink extends Range {
507
+ class TheSink extends Sink {
545
508
TheSink ( ) {
546
509
exists ( Method f | f .hasQualifiedName ( "compress/zlib" , "reader" , "Read" ) |
547
510
this = f .getACall ( ) .getReceiver ( )
548
511
)
549
512
}
550
-
551
- override DataFlow:: Node sink ( ) { result = this }
552
513
}
553
514
554
515
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -578,16 +539,14 @@ module DecompressionBombs {
578
539
* Provides Decompression Sinks and additional taint steps for `github.com/golang/snappy` package
579
540
*/
580
541
module GolangSnappy {
581
- class TheSink extends Range {
542
+ class TheSink extends Sink {
582
543
TheSink ( ) {
583
544
exists ( Method f |
584
545
f .hasQualifiedName ( "github.com/golang/snappy" , "Reader" , [ "Read" , "ReadByte" ] )
585
546
|
586
547
this = f .getACall ( ) .getReceiver ( )
587
548
)
588
549
}
589
-
590
- override DataFlow:: Node sink ( ) { result = this }
591
550
}
592
551
593
552
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -644,7 +603,7 @@ module DecompressionBombs {
644
603
* Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package
645
604
*/
646
605
module KlauspostS2 {
647
- class TheSink extends Range {
606
+ class TheSink extends Sink {
648
607
TheSink ( ) {
649
608
exists ( Method m |
650
609
m .hasQualifiedName ( "github.com/klauspost/compress/s2" , "Reader" ,
@@ -653,8 +612,6 @@ module DecompressionBombs {
653
612
this = m .getACall ( ) .getReceiver ( )
654
613
)
655
614
}
656
-
657
- override DataFlow:: Node sink ( ) { result = this }
658
615
}
659
616
660
617
class TheAdditionalTaintStep extends AdditionalTaintStep {
@@ -684,22 +641,20 @@ module DecompressionBombs {
684
641
* Provides Decompression Sinks for `"archive/tar` package
685
642
*/
686
643
module ArchiveTar {
687
- class TheSink extends Range {
644
+ class TheSink extends Sink {
688
645
TheSink ( ) {
689
646
exists ( Method f | f .hasQualifiedName ( "archive/tar" , "Reader" , "Read" ) |
690
647
this = f .getACall ( ) .getReceiver ( )
691
648
)
692
649
}
693
-
694
- override DataFlow:: Node sink ( ) { result = this }
695
650
}
696
651
}
697
652
698
653
/**
699
654
* Provides Decompression Sinks for packages that use some standard IO interfaces/methods for reading decompressed data
700
655
*/
701
656
module GeneralReadIoSink {
702
- class TheSink extends Range {
657
+ class TheSink extends Sink {
703
658
TheSink ( ) {
704
659
exists ( Function f | f .hasQualifiedName ( "io" , [ "Copy" , "CopyBuffer" , "CopyN" ] ) |
705
660
this = f .getACall ( ) .getArgument ( 1 )
@@ -726,8 +681,6 @@ module DecompressionBombs {
726
681
this = f .getACall ( ) .getArgument ( 0 )
727
682
)
728
683
}
729
-
730
- override DataFlow:: Node sink ( ) { result = this }
731
684
}
732
685
}
733
686
}
0 commit comments