mirror of
https://github.com/github/codeql.git
synced 2026-03-27 09:48:16 +01:00
Specifically Apache sshd defines its sensitive api calls on an inherited interface, and they need to be described that way for us to pick them up.
52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
/**
|
|
* Provides classes to detect using a hard-coded credential in a sensitive call.
|
|
*/
|
|
|
|
import java
|
|
import semmle.code.java.dataflow.DataFlow
|
|
import semmle.code.java.dataflow.DataFlow2
|
|
import HardcodedCredentials
|
|
|
|
/**
|
|
* A data-flow configuration that tracks hardcoded expressions flowing to a parameter whose name suggests
|
|
* it may be a credential, excluding those which flow on to other such insecure usage sites.
|
|
*/
|
|
class HardcodedCredentialSourceCallConfiguration extends DataFlow::Configuration {
|
|
HardcodedCredentialSourceCallConfiguration() {
|
|
this = "HardcodedCredentialSourceCallConfiguration"
|
|
}
|
|
|
|
override predicate isSource(DataFlow::Node n) { n.asExpr() instanceof HardcodedExpr }
|
|
|
|
override predicate isSink(DataFlow::Node n) { n.asExpr() instanceof FinalCredentialsSourceSink }
|
|
}
|
|
|
|
/**
|
|
* A data-flow configuration that tracks flow from an argument whose corresponding parameter name suggests
|
|
* a credential, to an argument to a sensitive call.
|
|
*/
|
|
class HardcodedCredentialSourceCallConfiguration2 extends DataFlow2::Configuration {
|
|
HardcodedCredentialSourceCallConfiguration2() {
|
|
this = "HardcodedCredentialSourceCallConfiguration2"
|
|
}
|
|
|
|
override predicate isSource(DataFlow::Node n) { n.asExpr() instanceof CredentialsSourceSink }
|
|
|
|
override predicate isSink(DataFlow::Node n) { n.asExpr() instanceof CredentialsSink }
|
|
}
|
|
|
|
/**
|
|
* An argument to a call, where the parameter name corresponding
|
|
* to the argument indicates that it may contain credentials, and
|
|
* where this expression does not flow on to another `CredentialsSink`.
|
|
*/
|
|
class FinalCredentialsSourceSink extends CredentialsSourceSink {
|
|
FinalCredentialsSourceSink() {
|
|
not exists(HardcodedCredentialSourceCallConfiguration2 conf, CredentialsSink other |
|
|
this != other
|
|
|
|
|
conf.hasFlow(DataFlow::exprNode(this), DataFlow::exprNode(other))
|
|
)
|
|
}
|
|
}
|