mirror of
https://github.com/github/codeql.git
synced 2026-04-26 01:05:15 +02:00
Merge pull request #10177 from atorralba/atorralba/path-sanitizer
Java: Promote `PathSanitizer.qll` from experimental
This commit is contained in:
@@ -361,19 +361,7 @@ private class SummaryModelCsvBase extends SummaryModelCsv {
|
||||
"java.net;URI;false;toURL;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.net;URI;false;toString;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.net;URI;false;toAsciiString;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;toURI;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;toPath;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;getAbsoluteFile;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;getCanonicalFile;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;getAbsolutePath;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;File;true;getCanonicalPath;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio;ByteBuffer;false;array;();;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio.file;Path;true;normalize;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint;manual",
|
||||
"java.nio.file;Path;false;toFile;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio.file;Path;true;toString;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio.file;Path;true;toUri;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.nio.file;Paths;true;get;;;Argument[0..1];ReturnValue;taint;manual",
|
||||
"java.io;BufferedReader;true;readLine;;;Argument[-1];ReturnValue;taint;manual",
|
||||
"java.io;Reader;true;read;();;Argument[-1];ReturnValue;taint;manual",
|
||||
// arg to return
|
||||
@@ -400,8 +388,6 @@ private class SummaryModelCsvBase extends SummaryModelCsv {
|
||||
// arg to arg
|
||||
"java.lang;System;false;arraycopy;;;Argument[0];Argument[2];taint;manual",
|
||||
// constructor flow
|
||||
"java.io;File;false;File;;;Argument[0];Argument[-1];taint;manual",
|
||||
"java.io;File;false;File;;;Argument[1];Argument[-1];taint;manual",
|
||||
"java.net;URI;false;URI;(String);;Argument[0];Argument[-1];taint;manual",
|
||||
"java.net;URL;false;URL;(String);;Argument[0];Argument[-1];taint;manual",
|
||||
"javax.xml.transform.stream;StreamSource;false;StreamSource;;;Argument[0];Argument[-1];taint;manual",
|
||||
|
||||
@@ -33,6 +33,57 @@ predicate localExprTaint(Expr src, Expr sink) {
|
||||
localTaint(DataFlow::exprNode(src), DataFlow::exprNode(sink))
|
||||
}
|
||||
|
||||
/** Holds if `node` is an endpoint for local taint flow. */
|
||||
signature predicate nodeSig(DataFlow::Node node);
|
||||
|
||||
/** Provides local taint flow restricted to a given set of sources and sinks. */
|
||||
module LocalTaintFlow<nodeSig/1 source, nodeSig/1 sink> {
|
||||
private predicate reachRev(DataFlow::Node n) {
|
||||
sink(n)
|
||||
or
|
||||
exists(DataFlow::Node mid |
|
||||
localTaintStep(n, mid) and
|
||||
reachRev(mid)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate reachFwd(DataFlow::Node n) {
|
||||
reachRev(n) and
|
||||
(
|
||||
source(n)
|
||||
or
|
||||
exists(DataFlow::Node mid |
|
||||
localTaintStep(mid, n) and
|
||||
reachFwd(mid)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate step(DataFlow::Node n1, DataFlow::Node n2) {
|
||||
localTaintStep(n1, n2) and
|
||||
reachFwd(n1) and
|
||||
reachFwd(n2)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if taint can flow from `n1` to `n2` in zero or more local
|
||||
* (intra-procedural) steps that are restricted to be part of a path between
|
||||
* `source` and `sink`.
|
||||
*/
|
||||
pragma[inline]
|
||||
predicate hasFlow(DataFlow::Node n1, DataFlow::Node n2) { step*(n1, n2) }
|
||||
|
||||
/**
|
||||
* Holds if taint can flow from `n1` to `n2` in zero or more local
|
||||
* (intra-procedural) steps that are restricted to be part of a path between
|
||||
* `source` and `sink`.
|
||||
*/
|
||||
pragma[inline]
|
||||
predicate hasExprFlow(Expr n1, Expr n2) {
|
||||
hasFlow(DataFlow::exprNode(n1), DataFlow::exprNode(n2))
|
||||
}
|
||||
}
|
||||
|
||||
cached
|
||||
private module Cached {
|
||||
private import DataFlowImplCommon as DataFlowImplCommon
|
||||
|
||||
Reference in New Issue
Block a user