mirror of
https://github.com/github/codeql.git
synced 2026-04-27 09:45:15 +02:00
make one ql file
This commit is contained in:
@@ -1,433 +0,0 @@
|
||||
/**
|
||||
* @name User-controlled file decompression
|
||||
* @description User-controlled data that flows into decompression library APIs could be dangerous
|
||||
* @kind path-problem
|
||||
* @problem.severity error
|
||||
* @security-severity 7.8
|
||||
* @precision high
|
||||
* @id rb/user-controlled-file-decompression
|
||||
* @tags security
|
||||
* experimental
|
||||
* external/cwe/cwe-409
|
||||
*/
|
||||
|
||||
import codeql.ruby.AST
|
||||
import codeql.ruby.ApiGraphs
|
||||
import codeql.ruby.DataFlow
|
||||
import codeql.ruby.dataflow.RemoteFlowSources
|
||||
import codeql.ruby.TaintTracking
|
||||
import DataFlow::PathGraph
|
||||
|
||||
module Zip {
|
||||
module InputStream {
|
||||
/**
|
||||
* `Zip::InputStream`
|
||||
*/
|
||||
private API::Node zipInputStream() {
|
||||
result = [API::getTopLevelMember("Zip").getMember("InputStream")]
|
||||
}
|
||||
|
||||
/**
|
||||
* An input in following
|
||||
* ```ruby
|
||||
* input = ip::InputStream.open(path)
|
||||
* Zip::InputStream.open(path) do |input|
|
||||
* ...
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
private API::Node instance() {
|
||||
result =
|
||||
zipInputStream().getMethod("open").(GetReturnOrGetBlock).getReturnOrGetBlockParameter()
|
||||
}
|
||||
|
||||
predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
exists(API::Node zipInputStreamOpen |
|
||||
zipInputStreamOpen = zipInputStream().getMethod("open")
|
||||
|
|
||||
nodeFrom = zipInputStreamOpen.getParameter(0).asSink() and
|
||||
nodeTo =
|
||||
[
|
||||
zipInputStreamOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.getMethod(_)
|
||||
.getReturn()
|
||||
.asSource()
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
DataFlow::Node isSink() {
|
||||
exists(string ioMethods | not ioMethods = "get_next_entry" |
|
||||
result = instance().getMethod(ioMethods).getReturn().asSource()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class AdditionalGlobStep extends API::Node {
|
||||
API::Node additionalGlobStepHelper() {
|
||||
result = this
|
||||
or
|
||||
result = this.getMethod("glob").getReturn()
|
||||
}
|
||||
}
|
||||
|
||||
class GetReturnOrGetBlock extends API::Node {
|
||||
API::Node getReturnOrGetBlockParameter() {
|
||||
result = this.getBlock().getParameter(0) or
|
||||
result = this.getReturn()
|
||||
}
|
||||
}
|
||||
|
||||
module File {
|
||||
/**
|
||||
* ```ruby
|
||||
* Zip::File.open(path)
|
||||
* # or
|
||||
* Zip::File.new(path)
|
||||
* ```
|
||||
*/
|
||||
module OpenAndNew {
|
||||
/**
|
||||
* myZip in following
|
||||
*
|
||||
* ```ruby
|
||||
* myZip = Zip::File.open(path)
|
||||
* # or
|
||||
* myZip = Zip::File.new(path)
|
||||
*
|
||||
* Zip::File.open(path) do |myZip|
|
||||
*
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
API::Node instance() {
|
||||
result =
|
||||
zipFile().getMethod(["open", "new"]).(GetReturnOrGetBlock).getReturnOrGetBlockParameter()
|
||||
}
|
||||
|
||||
/**
|
||||
* `extract` and `read` can be sink
|
||||
* ```ruby
|
||||
* ```
|
||||
*/
|
||||
DataFlow::Node isSink() {
|
||||
result =
|
||||
instance()
|
||||
.getMethod(["each", "each_entry", "first"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.getMethod(["extract", "read", "first"])
|
||||
.getReturn()
|
||||
.asSource()
|
||||
or
|
||||
result =
|
||||
instance()
|
||||
.getMethod(["each", "each_entry", "first"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.getMethod("get_input_stream")
|
||||
.getReturn()
|
||||
.asSource()
|
||||
or
|
||||
exists(string ioMethods | not ioMethods = ["each", "each_entry", "glob", "first"] |
|
||||
result = instance().getAMethodCall(ioMethods)
|
||||
)
|
||||
}
|
||||
|
||||
predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
exists(API::Node zipFileOpen, API::Node zipFileOpenGlob |
|
||||
zipFileOpen = zipFile().getMethod(["open", "new"])
|
||||
|
|
||||
nodeFrom = zipFileOpen.getParameter(0).asSink() and
|
||||
zipFileOpenGlob = zipFileOpen.(GetReturnOrGetBlock).getReturnOrGetBlockParameter() and
|
||||
nodeTo =
|
||||
[
|
||||
zipFileOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.(AdditionalGlobStep)
|
||||
.additionalGlobStepHelper()
|
||||
.asSource(),
|
||||
zipFileOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.(AdditionalGlobStep)
|
||||
.additionalGlobStepHelper()
|
||||
.getMethod(["read", "extract"])
|
||||
.getReturn()
|
||||
.asSource(),
|
||||
zipFileOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.(AdditionalGlobStep)
|
||||
.additionalGlobStepHelper()
|
||||
.getMethod(["each", "each_entry", "first"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.asSource(),
|
||||
isAdditionalTaintStepHelper(zipFileOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.(AdditionalGlobStep)
|
||||
.additionalGlobStepHelper()
|
||||
.getMethod(["each", "each_entry", "first"])
|
||||
.getBlock()
|
||||
.getParameter(0))
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* # Find specific entry with Zip::File.open(zipfile_path).glob(pattern)
|
||||
*/
|
||||
module Glob {
|
||||
/**
|
||||
* `extract` and `read` can be sink
|
||||
* ```ruby
|
||||
* ```
|
||||
*/
|
||||
DataFlow::Node isSink() {
|
||||
result =
|
||||
zipFile()
|
||||
.getMethod(["open", "new"])
|
||||
.getReturn()
|
||||
.getMethod("glob")
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.getMethod("get_input_stream")
|
||||
.getReturn()
|
||||
.asSource()
|
||||
or
|
||||
result =
|
||||
zipFile()
|
||||
.getMethod(["open", "new"])
|
||||
.getReturn()
|
||||
.getMethod("glob")
|
||||
.getReturn()
|
||||
.getMethod("get_input_stream")
|
||||
.getReturn()
|
||||
.asSource()
|
||||
or
|
||||
result =
|
||||
zipFile()
|
||||
.getMethod(["open", "new"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.getMethod("glob")
|
||||
.getReturn()
|
||||
.getMethod("first")
|
||||
.getReturn()
|
||||
.getMethod("get_input_stream")
|
||||
.getReturn()
|
||||
.asSource()
|
||||
}
|
||||
|
||||
predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
exists(API::Node zipFileOpen | zipFileOpen = zipFile().getMethod(["open", "new"]) |
|
||||
nodeFrom = zipFileOpen.getParameter(0).asSink() and
|
||||
nodeTo =
|
||||
isAdditionalTaintStepHelper(zipFileOpen
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter()
|
||||
.getMethod("glob")
|
||||
.(GetReturnOrGetBlock)
|
||||
.getReturnOrGetBlockParameter())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* `Zip::File`
|
||||
*/
|
||||
private API::Node zipFile() { result = API::getTopLevelMember("Zip").getMember("File") }
|
||||
|
||||
DataFlow::Node isAdditionalTaintStepHelper(API::Node nodeMiddle) {
|
||||
result = nodeMiddle.getMethod(_).getReturn().asSource() or
|
||||
result = nodeMiddle.getMethod(_).getReturn().getMethod(_).getReturn().asSource()
|
||||
}
|
||||
}
|
||||
|
||||
DataFlow::Node isSink() {
|
||||
result = [File::Glob::isSink(), File::OpenAndNew::isSink(), InputStream::isSink()]
|
||||
}
|
||||
|
||||
predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
File::Glob::isAdditionalTaintStep(nodeFrom, nodeTo)
|
||||
or
|
||||
File::OpenAndNew::isAdditionalTaintStep(nodeFrom, nodeTo)
|
||||
or
|
||||
InputStream::isAdditionalTaintStep(nodeFrom, nodeTo)
|
||||
}
|
||||
}
|
||||
|
||||
module Zlib {
|
||||
/**
|
||||
* `zlib::GzipReader`
|
||||
*/
|
||||
API::Node gzipReaderInstance() { result = API::getTopLevelMember("Zlib").getMember("GzipReader") }
|
||||
|
||||
API::Node gzipReaderOpen() {
|
||||
result =
|
||||
[
|
||||
gzipReaderInstance().getMethod("open").getReturn(),
|
||||
gzipReaderInstance().getMethod("open").getBlock().getParameter(0)
|
||||
]
|
||||
}
|
||||
|
||||
API::Node gzipReaderNew() { result = gzipReaderInstance().getMethod("new").getReturn() }
|
||||
|
||||
/**
|
||||
* `entry` and `read` can be sink
|
||||
* ```ruby
|
||||
*Zlib::GzipReader.open(gzip_path) do |uncompressedfile|
|
||||
* uncompressedfile.each do |entry|
|
||||
* entry
|
||||
* end
|
||||
*end
|
||||
*
|
||||
*uncompressedfile = Zlib::GzipReader.open(gzip_path)
|
||||
*uncompressedfile.each do |entry|
|
||||
* entry
|
||||
*end
|
||||
*
|
||||
*Zlib::GzipReader.new(File.open(gzip_path, 'rb')).read
|
||||
*Zlib::GzipReader.new(File.open(gzip_path, 'rb')).each do |entry|
|
||||
* entry
|
||||
*end
|
||||
* ```
|
||||
*/
|
||||
DataFlow::Node isSink() {
|
||||
result =
|
||||
gzipReaderOpen()
|
||||
.getMethod(["glob", "each", "each_entry"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.asSource()
|
||||
or
|
||||
result =
|
||||
gzipReaderNew()
|
||||
.getMethod(["glob", "each", "each_entry"])
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.asSource()
|
||||
or
|
||||
// _ is one of ["read", "readlines", "readpartial", "readline", "gets"] and more because gzipReader return an IO instance, there are a lot of methods and gzipReader is for reading gzip files, so there is low FP rate here if we use _ instead of exact IO method names
|
||||
exists(string ioMethods | not ioMethods = ["glob", "each", "each_entry"] |
|
||||
result = gzipReaderNew().getMethod(ioMethods).getReturn().asSource() or
|
||||
result = gzipReaderOpen().getMethod(ioMethods).getReturn().asSource()
|
||||
)
|
||||
or
|
||||
// no need for any other methods after opening gzip with zcat method
|
||||
result = gzipReaderInstance().getMethod("zcat").getParameter(0).asSink()
|
||||
}
|
||||
|
||||
predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
isAdditionalTaintStepCustomizeMiddleNode(nodeFrom, nodeTo, gzipReaderOpen()) or
|
||||
isAdditionalTaintStepCustomizeBeginningNode(nodeFrom, nodeTo, "open", gzipReaderInstance()) or
|
||||
isAdditionalTaintStepCustomizeMiddleNode(nodeFrom, nodeTo, gzipReaderNew()) or
|
||||
isAdditionalTaintStepCustomizeBeginningNode(nodeFrom, nodeTo, "new", gzipReaderInstance()) or
|
||||
isAdditionalTaintStepCustomizeBeginningNode(nodeFrom, nodeTo, "zcat", gzipReaderInstance())
|
||||
}
|
||||
|
||||
/**
|
||||
* `uncompressedfile` is nodeFrom/nodeMiddle
|
||||
*
|
||||
* `entry` is nodeTo
|
||||
*
|
||||
* ```ruby
|
||||
* Zlib::GzipReader.open(gzip_path) do |uncompressedfile|
|
||||
* uncompressedfile.each do |entry|
|
||||
* entry.bytes
|
||||
* end
|
||||
*end
|
||||
*uncompressedfile = Zlib::GzipReader.open(gzip_path)
|
||||
*uncompressedfile.each do |entry|
|
||||
* entry.read
|
||||
*end
|
||||
* ```
|
||||
*/
|
||||
predicate isAdditionalTaintStepCustomizeMiddleNode(
|
||||
DataFlow::Node nodeFrom, DataFlow::Node nodeTo, API::Node nodeMiddle
|
||||
) {
|
||||
nodeFrom = nodeMiddle.asSource() and
|
||||
nodeTo =
|
||||
nodeMiddle.getMethod(["glob", "each", "each_entry"]).getBlock().getParameter(0).asSource()
|
||||
}
|
||||
|
||||
/**
|
||||
* `gzip_path` is nodeFrom
|
||||
*
|
||||
* `compressed_file`/`Zlib::GzipReader.open(gzip_path)` are nodeTo
|
||||
*
|
||||
* `Zlib::GzipReader` is nodeInstance
|
||||
*
|
||||
* `open` is beginMethodName
|
||||
* ```ruby
|
||||
*Zlib::GzipReader.open(gzip_path) do |compressed_file|
|
||||
* compressed_file.each do |entry|
|
||||
* entry.bytes
|
||||
* end
|
||||
*end
|
||||
*```
|
||||
*/
|
||||
predicate isAdditionalTaintStepCustomizeBeginningNode(
|
||||
DataFlow::Node nodeFrom, DataFlow::Node nodeTo, string beginMethodName, API::Node nodeInstance
|
||||
) {
|
||||
nodeFrom = nodeInstance.getMethod(beginMethodName).getParameter(0).asSink() and
|
||||
nodeTo =
|
||||
[
|
||||
nodeInstance.getMethod(beginMethodName).getBlock().getParameter(0).asSource(),
|
||||
nodeInstance
|
||||
.getMethod(beginMethodName)
|
||||
.getBlock()
|
||||
.getParameter(0)
|
||||
.getMethod(_)
|
||||
.getReturn()
|
||||
.asSource(), nodeInstance.getMethod(beginMethodName).getReturn().asSource(),
|
||||
nodeInstance.getMethod(beginMethodName).getReturn().getMethod(_).getReturn().asSource()
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class Bombs extends TaintTracking::Configuration {
|
||||
Bombs() { this = "Decompression Bombs" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
source instanceof RemoteFlowSource or
|
||||
source instanceof DataFlow::LocalSourceNode
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) { sink = [Zip::isSink(), Zlib::isSink()] }
|
||||
|
||||
override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
|
||||
Zip::isAdditionalTaintStep(nodeFrom, nodeTo)
|
||||
or
|
||||
Zlib::isAdditionalTaintStep(nodeFrom, nodeTo)
|
||||
or
|
||||
exists(API::Node n | n = API::root().getMember("File").getMethod("open") |
|
||||
nodeFrom = n.getParameter(0).asSink() and
|
||||
nodeTo = n.getReturn().asSource()
|
||||
)
|
||||
or
|
||||
exists(API::Node n | n = API::root().getMember("StringIO").getMethod("new") |
|
||||
nodeFrom = n.getParameter(0).asSink() and
|
||||
nodeTo = n.getReturn().asSource()
|
||||
)
|
||||
or
|
||||
// following can be a global additional step
|
||||
exists(DataFlow::CallNode cn |
|
||||
cn.getMethodName() = "open" and cn.getReceiver().toString() = "self"
|
||||
|
|
||||
nodeFrom = cn.getArgument(0) and
|
||||
nodeTo = cn
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
from Bombs cfg, DataFlow::PathNode source, DataFlow::PathNode sink
|
||||
where cfg.hasFlowPath(source, sink)
|
||||
select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(),
|
||||
"potentially untrusted source"
|
||||
@@ -0,0 +1 @@
|
||||
experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql
|
||||
@@ -1,130 +0,0 @@
|
||||
WARNING: Unused predicate instance (/home/am/CodeQL-home/codeql-repo/ruby/ql/src/experimental/CWE-522-DecompressionBombs/BombsV1.ql:192,17-25)
|
||||
WARNING: Unused predicate oneBlockParameter (/home/am/CodeQL-home/codeql-repo/ruby/ql/src/experimental/CWE-522-DecompressionBombs/BombsV1.ql:270,15-32)
|
||||
WARNING: Unused predicate twoBlockParameter (/home/am/CodeQL-home/codeql-repo/ruby/ql/src/experimental/CWE-522-DecompressionBombs/BombsV1.ql:284,15-32)
|
||||
edges
|
||||
| file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:8:29:8:33 | entry |
|
||||
| file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:13:27:13:31 | entry |
|
||||
| file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:18:59:18:63 | entry |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:3:1:3:37 | call to read |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:4:23:4:31 | gzip_path |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:7:23:7:31 | gzip_path |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:12:1:12:16 | uncompressedfile |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:12:20:12:51 | call to open |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:17:1:17:53 | call to read |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:18:1:18:48 | call to new |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | gzipBombs.rb:22:23:22:37 | call to open |
|
||||
| gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:2:1:2:9 | gzip_path |
|
||||
| gzipBombs.rb:4:23:4:31 | gzip_path | gzipBombs.rb:5:8:5:28 | call to read |
|
||||
| gzipBombs.rb:7:23:7:31 | gzip_path | gzipBombs.rb:7:38:7:53 | uncompressedfile |
|
||||
| gzipBombs.rb:7:38:7:53 | uncompressedfile | gzipBombs.rb:8:3:8:18 | uncompressedfile |
|
||||
| gzipBombs.rb:7:38:7:53 | uncompressedfile | gzipBombs.rb:8:29:8:33 | entry |
|
||||
| gzipBombs.rb:8:3:8:18 | uncompressedfile | gzipBombs.rb:8:29:8:33 | entry |
|
||||
| gzipBombs.rb:12:1:12:16 | uncompressedfile | gzipBombs.rb:13:1:13:16 | uncompressedfile |
|
||||
| gzipBombs.rb:12:20:12:51 | call to open | gzipBombs.rb:12:1:12:16 | uncompressedfile |
|
||||
| gzipBombs.rb:12:20:12:51 | call to open | gzipBombs.rb:13:27:13:31 | entry |
|
||||
| gzipBombs.rb:13:1:13:16 | uncompressedfile | gzipBombs.rb:13:27:13:31 | entry |
|
||||
| gzipBombs.rb:17:22:17:47 | call to open | gzipBombs.rb:17:1:17:53 | call to read |
|
||||
| gzipBombs.rb:18:1:18:48 | call to new | gzipBombs.rb:18:59:18:63 | entry |
|
||||
| gzipBombs.rb:18:22:18:47 | call to open | gzipBombs.rb:18:1:18:48 | call to new |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:9:23:9:34 | zipfile_path |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:14:1:14:40 | call to read |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:15:1:15:49 | call to extract |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:17:16:17:27 | zipfile_path |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:29:27:29:38 | zipfile_path |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:36:16:36:27 | zipfile_path |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:48:6:48:27 | call to get_input_stream |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | zipBombs.rb:50:27:50:38 | zipfile_path |
|
||||
| zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:2:1:2:12 | zipfile_path |
|
||||
| zipBombs.rb:9:23:9:34 | zipfile_path | zipBombs.rb:10:3:10:12 | call to read |
|
||||
| zipBombs.rb:17:16:17:27 | zipfile_path | zipBombs.rb:23:5:23:17 | call to extract |
|
||||
| zipBombs.rb:17:16:17:27 | zipfile_path | zipBombs.rb:25:5:25:26 | call to get_input_stream |
|
||||
| zipBombs.rb:29:27:29:38 | zipfile_path | zipBombs.rb:31:3:31:15 | call to extract |
|
||||
| zipBombs.rb:29:27:29:38 | zipfile_path | zipBombs.rb:32:3:32:24 | call to get_input_stream |
|
||||
| zipBombs.rb:36:16:36:27 | zipfile_path | zipBombs.rb:38:5:38:29 | call to read |
|
||||
| zipBombs.rb:36:16:36:27 | zipfile_path | zipBombs.rb:43:8:43:29 | call to get_input_stream |
|
||||
| zipBombs.rb:50:27:50:38 | zipfile_path | zipBombs.rb:52:3:52:24 | call to get_input_stream |
|
||||
nodes
|
||||
| file://:0:0:0:0 | [summary param] self in each(0) | semmle.label | [summary param] self in each(0) |
|
||||
| gzipBombs.rb:2:1:2:9 | gzip_path | semmle.label | gzip_path |
|
||||
| gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | semmle.label | "Path/To/bomb.gz" |
|
||||
| gzipBombs.rb:3:1:3:37 | call to read | semmle.label | call to read |
|
||||
| gzipBombs.rb:4:23:4:31 | gzip_path | semmle.label | gzip_path |
|
||||
| gzipBombs.rb:5:8:5:28 | call to read | semmle.label | call to read |
|
||||
| gzipBombs.rb:7:23:7:31 | gzip_path | semmle.label | gzip_path |
|
||||
| gzipBombs.rb:7:38:7:53 | uncompressedfile | semmle.label | uncompressedfile |
|
||||
| gzipBombs.rb:8:3:8:18 | uncompressedfile | semmle.label | uncompressedfile |
|
||||
| gzipBombs.rb:8:29:8:33 | entry | semmle.label | entry |
|
||||
| gzipBombs.rb:12:1:12:16 | uncompressedfile | semmle.label | uncompressedfile |
|
||||
| gzipBombs.rb:12:20:12:51 | call to open | semmle.label | call to open |
|
||||
| gzipBombs.rb:13:1:13:16 | uncompressedfile | semmle.label | uncompressedfile |
|
||||
| gzipBombs.rb:13:27:13:31 | entry | semmle.label | entry |
|
||||
| gzipBombs.rb:17:1:17:53 | call to read | semmle.label | call to read |
|
||||
| gzipBombs.rb:17:22:17:47 | call to open | semmle.label | call to open |
|
||||
| gzipBombs.rb:18:1:18:48 | call to new | semmle.label | call to new |
|
||||
| gzipBombs.rb:18:22:18:47 | call to open | semmle.label | call to open |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | semmle.label | entry |
|
||||
| gzipBombs.rb:22:23:22:37 | call to open | semmle.label | call to open |
|
||||
| zipBombs.rb:2:1:2:12 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | semmle.label | "Path/To/bomb.zip" |
|
||||
| zipBombs.rb:9:23:9:34 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:10:3:10:12 | call to read | semmle.label | call to read |
|
||||
| zipBombs.rb:14:1:14:40 | call to read | semmle.label | call to read |
|
||||
| zipBombs.rb:15:1:15:49 | call to extract | semmle.label | call to extract |
|
||||
| zipBombs.rb:17:16:17:27 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:23:5:23:17 | call to extract | semmle.label | call to extract |
|
||||
| zipBombs.rb:25:5:25:26 | call to get_input_stream | semmle.label | call to get_input_stream |
|
||||
| zipBombs.rb:29:27:29:38 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:31:3:31:15 | call to extract | semmle.label | call to extract |
|
||||
| zipBombs.rb:32:3:32:24 | call to get_input_stream | semmle.label | call to get_input_stream |
|
||||
| zipBombs.rb:36:16:36:27 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:38:5:38:29 | call to read | semmle.label | call to read |
|
||||
| zipBombs.rb:43:8:43:29 | call to get_input_stream | semmle.label | call to get_input_stream |
|
||||
| zipBombs.rb:48:6:48:27 | call to get_input_stream | semmle.label | call to get_input_stream |
|
||||
| zipBombs.rb:50:27:50:38 | zipfile_path | semmle.label | zipfile_path |
|
||||
| zipBombs.rb:52:3:52:24 | call to get_input_stream | semmle.label | call to get_input_stream |
|
||||
subpaths
|
||||
#select
|
||||
| gzipBombs.rb:3:1:3:37 | call to read | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:3:1:3:37 | call to read | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:3:1:3:37 | call to read | gzipBombs.rb:3:1:3:37 | call to read | gzipBombs.rb:3:1:3:37 | call to read | This file extraction depends on a $@. | gzipBombs.rb:3:1:3:37 | call to read | potentially untrusted source |
|
||||
| gzipBombs.rb:5:8:5:28 | call to read | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:5:8:5:28 | call to read | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:5:8:5:28 | call to read | gzipBombs.rb:5:8:5:28 | call to read | gzipBombs.rb:5:8:5:28 | call to read | This file extraction depends on a $@. | gzipBombs.rb:5:8:5:28 | call to read | potentially untrusted source |
|
||||
| gzipBombs.rb:8:29:8:33 | entry | file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:8:29:8:33 | entry | This file extraction depends on a $@. | file://:0:0:0:0 | [summary param] self in each(0) | potentially untrusted source |
|
||||
| gzipBombs.rb:8:29:8:33 | entry | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:8:29:8:33 | entry | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:8:29:8:33 | entry | gzipBombs.rb:7:38:7:53 | uncompressedfile | gzipBombs.rb:8:29:8:33 | entry | This file extraction depends on a $@. | gzipBombs.rb:7:38:7:53 | uncompressedfile | potentially untrusted source |
|
||||
| gzipBombs.rb:8:29:8:33 | entry | gzipBombs.rb:8:29:8:33 | entry | gzipBombs.rb:8:29:8:33 | entry | This file extraction depends on a $@. | gzipBombs.rb:8:29:8:33 | entry | potentially untrusted source |
|
||||
| gzipBombs.rb:13:27:13:31 | entry | file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:13:27:13:31 | entry | This file extraction depends on a $@. | file://:0:0:0:0 | [summary param] self in each(0) | potentially untrusted source |
|
||||
| gzipBombs.rb:13:27:13:31 | entry | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:13:27:13:31 | entry | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:13:27:13:31 | entry | gzipBombs.rb:12:20:12:51 | call to open | gzipBombs.rb:13:27:13:31 | entry | This file extraction depends on a $@. | gzipBombs.rb:12:20:12:51 | call to open | potentially untrusted source |
|
||||
| gzipBombs.rb:13:27:13:31 | entry | gzipBombs.rb:13:27:13:31 | entry | gzipBombs.rb:13:27:13:31 | entry | This file extraction depends on a $@. | gzipBombs.rb:13:27:13:31 | entry | potentially untrusted source |
|
||||
| gzipBombs.rb:17:1:17:53 | call to read | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:17:1:17:53 | call to read | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:17:1:17:53 | call to read | gzipBombs.rb:17:1:17:53 | call to read | gzipBombs.rb:17:1:17:53 | call to read | This file extraction depends on a $@. | gzipBombs.rb:17:1:17:53 | call to read | potentially untrusted source |
|
||||
| gzipBombs.rb:17:1:17:53 | call to read | gzipBombs.rb:17:22:17:47 | call to open | gzipBombs.rb:17:1:17:53 | call to read | This file extraction depends on a $@. | gzipBombs.rb:17:22:17:47 | call to open | potentially untrusted source |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | file://:0:0:0:0 | [summary param] self in each(0) | gzipBombs.rb:18:59:18:63 | entry | This file extraction depends on a $@. | file://:0:0:0:0 | [summary param] self in each(0) | potentially untrusted source |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:18:59:18:63 | entry | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | gzipBombs.rb:18:1:18:48 | call to new | gzipBombs.rb:18:59:18:63 | entry | This file extraction depends on a $@. | gzipBombs.rb:18:1:18:48 | call to new | potentially untrusted source |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | gzipBombs.rb:18:22:18:47 | call to open | gzipBombs.rb:18:59:18:63 | entry | This file extraction depends on a $@. | gzipBombs.rb:18:22:18:47 | call to open | potentially untrusted source |
|
||||
| gzipBombs.rb:18:59:18:63 | entry | gzipBombs.rb:18:59:18:63 | entry | gzipBombs.rb:18:59:18:63 | entry | This file extraction depends on a $@. | gzipBombs.rb:18:59:18:63 | entry | potentially untrusted source |
|
||||
| gzipBombs.rb:22:23:22:37 | call to open | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | gzipBombs.rb:22:23:22:37 | call to open | This file extraction depends on a $@. | gzipBombs.rb:2:13:2:29 | "Path/To/bomb.gz" | potentially untrusted source |
|
||||
| gzipBombs.rb:22:23:22:37 | call to open | gzipBombs.rb:22:23:22:37 | call to open | gzipBombs.rb:22:23:22:37 | call to open | This file extraction depends on a $@. | gzipBombs.rb:22:23:22:37 | call to open | potentially untrusted source |
|
||||
| zipBombs.rb:10:3:10:12 | call to read | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:10:3:10:12 | call to read | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:10:3:10:12 | call to read | zipBombs.rb:10:3:10:12 | call to read | zipBombs.rb:10:3:10:12 | call to read | This file extraction depends on a $@. | zipBombs.rb:10:3:10:12 | call to read | potentially untrusted source |
|
||||
| zipBombs.rb:14:1:14:40 | call to read | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:14:1:14:40 | call to read | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:14:1:14:40 | call to read | zipBombs.rb:14:1:14:40 | call to read | zipBombs.rb:14:1:14:40 | call to read | This file extraction depends on a $@. | zipBombs.rb:14:1:14:40 | call to read | potentially untrusted source |
|
||||
| zipBombs.rb:15:1:15:49 | call to extract | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:15:1:15:49 | call to extract | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:15:1:15:49 | call to extract | zipBombs.rb:15:1:15:49 | call to extract | zipBombs.rb:15:1:15:49 | call to extract | This file extraction depends on a $@. | zipBombs.rb:15:1:15:49 | call to extract | potentially untrusted source |
|
||||
| zipBombs.rb:23:5:23:17 | call to extract | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:23:5:23:17 | call to extract | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:23:5:23:17 | call to extract | zipBombs.rb:23:5:23:17 | call to extract | zipBombs.rb:23:5:23:17 | call to extract | This file extraction depends on a $@. | zipBombs.rb:23:5:23:17 | call to extract | potentially untrusted source |
|
||||
| zipBombs.rb:25:5:25:26 | call to get_input_stream | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:25:5:25:26 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:25:5:25:26 | call to get_input_stream | zipBombs.rb:25:5:25:26 | call to get_input_stream | zipBombs.rb:25:5:25:26 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:25:5:25:26 | call to get_input_stream | potentially untrusted source |
|
||||
| zipBombs.rb:31:3:31:15 | call to extract | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:31:3:31:15 | call to extract | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:31:3:31:15 | call to extract | zipBombs.rb:31:3:31:15 | call to extract | zipBombs.rb:31:3:31:15 | call to extract | This file extraction depends on a $@. | zipBombs.rb:31:3:31:15 | call to extract | potentially untrusted source |
|
||||
| zipBombs.rb:32:3:32:24 | call to get_input_stream | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:32:3:32:24 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:32:3:32:24 | call to get_input_stream | zipBombs.rb:32:3:32:24 | call to get_input_stream | zipBombs.rb:32:3:32:24 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:32:3:32:24 | call to get_input_stream | potentially untrusted source |
|
||||
| zipBombs.rb:38:5:38:29 | call to read | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:38:5:38:29 | call to read | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:38:5:38:29 | call to read | zipBombs.rb:38:5:38:29 | call to read | zipBombs.rb:38:5:38:29 | call to read | This file extraction depends on a $@. | zipBombs.rb:38:5:38:29 | call to read | potentially untrusted source |
|
||||
| zipBombs.rb:43:8:43:29 | call to get_input_stream | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:43:8:43:29 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:43:8:43:29 | call to get_input_stream | zipBombs.rb:43:8:43:29 | call to get_input_stream | zipBombs.rb:43:8:43:29 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:43:8:43:29 | call to get_input_stream | potentially untrusted source |
|
||||
| zipBombs.rb:48:6:48:27 | call to get_input_stream | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:48:6:48:27 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:48:6:48:27 | call to get_input_stream | zipBombs.rb:48:6:48:27 | call to get_input_stream | zipBombs.rb:48:6:48:27 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:48:6:48:27 | call to get_input_stream | potentially untrusted source |
|
||||
| zipBombs.rb:52:3:52:24 | call to get_input_stream | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | zipBombs.rb:52:3:52:24 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:2:16:2:33 | "Path/To/bomb.zip" | potentially untrusted source |
|
||||
| zipBombs.rb:52:3:52:24 | call to get_input_stream | zipBombs.rb:52:3:52:24 | call to get_input_stream | zipBombs.rb:52:3:52:24 | call to get_input_stream | This file extraction depends on a $@. | zipBombs.rb:52:3:52:24 | call to get_input_stream | potentially untrusted source |
|
||||
@@ -1 +0,0 @@
|
||||
experimental/CWE-522-DecompressionBombs/BombsV1.ql
|
||||
@@ -1 +0,0 @@
|
||||
experimental/CWE-522-DecompressionBombs/BombsV2.ql
|
||||
Reference in New Issue
Block a user