59 KiB
4.2.0
Major Analysis Improvements
- Java: The generated JDK 17 models have been updated.
Minor Analysis Improvements
- Java
build-mode=none
extraction now packages the Maven plugin used to examine project dependencies. This means that dependency identification is more likely to succeed, and therefore analysis quality may rise, in scenarios where Maven Central is not reachable.
4.1.1
No user-facing changes.
4.1.0
Deprecated APIs
- The
Field.getSourceDeclaration()
predicate has been deprecated. The result was always the original field, so calls to it can simply be removed. - The
Field.isSourceDeclaration()
predicate has been deprecated. It always holds. - The
RefType.nestedName()
predicate has been deprecated, andRefType.getNestedName()
added to replace it. - The class
ThreatModelFlowSource
has been renamed toActiveThreatModelSource
to more clearly reflect it only contains the currently active threat model sources.ThreatModelFlowSource
has been marked as deprecated.
New Features
- The Java extractor and QL libraries now support Java 23.
- Kotlin versions up to 2.1.0\ x are now supported.
4.0.0
Breaking Changes
- Deleted the deprecated
ProcessBuilderConstructor
,MethodProcessBuilderCommand
, andMethodRuntimeExec
fromJDK.qll
. - Deleted the deprecated
explorationLimit
predicate fromDataFlow::Configuration
, useFlowExploration<explorationLimit>
instead. - Deleted many deprecated taint-tracking configurations based on
TaintTracking::Configuration
. - Deleted the deprecated
getURI
predicate fromCamelJavaDslToDecl
andSpringCamelXmlToElement
, usegetUri
instead. - Deleted the deprecated
ExecCallable
class fromExternalProcess.qll
. - Deleted many deprecated dataflow configurations based on
DataFlow::Configuration
. - Deleted the deprecated
PathCreation.qll
file. - Deleted the deprecated
WebviewDubuggingEnabledQuery.qll
file.
Major Analysis Improvements
- A generated (Models as Data) summary model is no longer used, if there exists a source code alternative. This primarily affects the analysis, when the analysis includes generated models for the source code being analysed.
3.0.2
No user-facing changes.
3.0.1
Minor Analysis Improvements
- Threat-model for
System.in
changed fromcommandargs
to newly createdstdin
(both subgroups oflocal
).
Bug Fixes
- Fixed an issue where analysis in
build-mode: none
may very occasionally throw aCoderMalfunctionError
while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. - Fixed an issue where Java analysis in
build-mode: none
would fail to resolve dependencies using theexecutable-war
Maven artifact type. - Fixed an issue where analysis in
build-mode: none
may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example,someproject-1.2.3-tests.jar
, which has the classifiertests
.
3.0.0
Breaking Changes
- The Java and Kotlin extractors no longer support the
SOURCE_ARCHIVE
andTRAP_FOLDER
legacy environment variable.
New Features
- Java support for
build-mode: none
is now out of beta, and generally available.
Major Analysis Improvements
- We previously considered reverse DNS resolutions (IP address -> domain name) as sources of untrusted data, since compromised/malicious DNS servers could potentially return malicious responses to arbitrary requests. We have now removed this source from the default set of untrusted sources and made a new threat model kind for them, called "reverse-dns". You can optionally include other threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see Analyzing your code with CodeQL queries and Customizing your advanced setup for code scanning.
Minor Analysis Improvements
- Added flow through some methods of the class
java.net.URL
by ensuring that the fields of a URL are tainted. - Added path-injection sinks for
org.apache.tools.ant.taskdefs.Property.setFile
andorg.apache.tools.ant.taskdefs.Property.setResource
. - Adds models for request handlers using the
org.lastaflute.web
web framework.
2.0.0
Breaking Changes
- The Java extractor no longer supports the
SEMMLE_DIST
legacy environment variable.
Deprecated APIs
- The predicate
isAndroid
from the modulesemmle.code.java.security.AndroidCertificatePinningQuery
has been deprecated. Usesemmle.code.java.frameworks.android.Android::inAndroidApplication(File)
instead.
New Features
- Kotlin support is now out of beta, and generally available
- Kotlin versions up to 2.0.2x are now supported.
Minor Analysis Improvements
- Added a path-injection sink for
hudson.FilePath.exists()
. - Added summary models for
org.apache.commons.io.IOUtils.toByteArray
. - Java build-mode
none
analyses now only report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review.
1.1.2
Minor Analysis Improvements
-
Added models for the following packages:
- io.undertow.server.handlers.resource
- jakarta.faces.context
- javax.faces.context
- javax.servlet
- org.jboss.vfs
- org.springframework.core.io
-
A bug has been fixed in the heuristic identification of uncertain control flow, which is used to filter data flow in order to improve performance and reduce false positives. This fix means that slightly more code is identified and hence pruned from data flow.
-
Excluded reverse DNS from the loopback address as a source of untrusted data.
Bug Fixes
- Support for
codeql test run
for Kotlin sources has been fixed.
1.1.1
No user-facing changes.
1.1.0
Major Analysis Improvements
- The precision of virtual dispatch has been improved. This increases precision in general for all data flow queries.
Minor Analysis Improvements
- Support for Eclipse Compiler for Java (ecj) has been fixed to work with (a) runs that don't pass
-noExit
and (b) runs that use post-Java-9 command-line arguments.
1.0.0
Breaking Changes
- CodeQL package management is now generally available, and all GitHub-produced CodeQL packages have had their version numbers increased to 1.0.0.
Major Analysis Improvements
- Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated.
Minor Analysis Improvements
- JDK version detection based on Gradle projects has been improved. Java extraction using build-modes
autobuild
ornone
is more likely to pick an appropriate JDK version, particularly when the Android Gradle Plugin or Spring Boot Plugin are in use.
0.11.0
Breaking Changes
- The Java extractor no longer supports the
ODASA_JAVA_LAYOUT
,ODASA_TOOLS
andODASA_HOME
legacy environment variables. - The Java extractor no longer supports the
ODASA_BUILD_ERROR_DIR
legacy environment variable.
0.10.0
Breaking Changes
- Deleted the deprecated
AssignLShiftExpr
,AssignRShiftExpr
,AssignURShiftExpr
,LShiftExpr
,RShiftExpr
, andURShiftExpr
aliases.
0.9.1
Minor Analysis Improvements
- About 6,700 summary models and 6,800 neutral summary models for the JDK that were generated using data flow have been added. This may lead to new alerts being reported.
0.9.0
Breaking Changes
- The Java extractor no longer supports the
ODASA_SNAPSHOT
legacy environment variable.
Minor Analysis Improvements
- Increased the precision of some dataflow models of the class
java.net.URL
by distinguishing the parts of a URL. - The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns.
- Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The
PatternCase
class gains the newgetPatternAtIndex
andgetAPattern
predicates, and deprecatesgetPattern
. - Added a
path-injection
sink for theopen
methods of theandroid.os.ParcelFileDescriptor
class.
0.8.12
No user-facing changes.
0.8.11
No user-facing changes.
0.8.10
Minor Analysis Improvements
- Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL
ErrorType
more often.
Bug Fixes
- Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper
mvnw
is in use and themaven-wrapper.jar
file is not present in the repository. - Some flow steps related to
android.text.Editable.toString
that were accidentally disabled have been re-enabled.
0.8.9
Deprecated APIs
- The
PathCreation
class inPathCreation.qll
has been deprecated.
Minor Analysis Improvements
-
An extension point for sanitizers of the query
java/unvalidated-url-redirection
has been added. -
Added models for the following packages:
- java.io
- java.lang
- java.net
- java.net.http
- java.nio.file
- java.util.zip
- javax.servlet
- org.apache.commons.io
- org.apache.hadoop.fs
- org.apache.hadoop.fs.s3a
- org.eclipse.jetty.client
- org.gradle.api.file
0.8.8
Minor Analysis Improvements
-
Added models for the following packages:
- com.fasterxml.jackson.databind
- javax.servlet
-
Added the
java.util.Date
andjava.util.UUID
classes to the list of types in theSimpleTypeSanitizer
class insemmle.code.java.security.Sanitizers
.
0.8.7
New Features
- Added a new library
semmle.code.java.security.Sanitizers
which contains a new sanitizer classSimpleTypeSanitizer
, which represents nodes which cannot realistically carry taint for most queries (e.g. primitives, their boxed equivalents, and numeric types). - Converted definitions of
isBarrier
and sanitizer classes to useSimpleTypeSanitizer
instead of checking ifnode.getType()
isPrimitiveType
orBoxedType
.
Minor Analysis Improvements
- Deleted many deprecated predicates and classes with uppercase
EJB
,JMX
,NFE
,DNS
etc. in their names. Use the PascalCased versions instead. - Deleted the deprecated
semmle/code/java/security/OverlyLargeRangeQuery.qll
,semmle/code/java/security/regexp/ExponentialBackTracking.qll
,semmle/code/java/security/regexp/NfaUtils.qll
, andsemmle/code/java/security/regexp/NfaUtils.qll
files. - Improved models for
java.lang.Throwable
andjava.lang.Exception
, and thevalueOf
method ofjava.lang.String
. - Added taint tracking for the following GSON methods:
com.google.gson.stream.JsonReader
constructorcom.google.gson.stream.JsonWriter
constructorcom.google.gson.JsonObject.getAsJsonArray
com.google.gson.JsonObject.getAsJsonObject
com.google.gson.JsonObject.getAsJsonPrimitive
com.google.gson.JsonParser.parseReader
com.google.gson.JsonParser.parseString
- Added a dataflow model for
java.awt.Desktop.browse(URI)
.
Bug Fixes
- Fixed regular expressions containing flags not being parsed correctly in some cases.
0.8.6
Deprecated APIs
- Imports of the old dataflow libraries (e.g.
semmle.code.java.dataflow.DataFlow2
) have been deprecated in the libraries under thesemmle.code.java.security
namespace.
Minor Analysis Improvements
-
Added the
Map#replace
andMap#replaceAll
methods to theMapMutator
class insemmle.code.java.Maps
. -
Taint tracking now understands Kotlin's
Array.get
andArray.set
methods. -
Added a sink model for the
createRelative
method of theorg.springframework.core.io.Resource
interface. -
Added source models for methods of the
org.springframework.web.util.UrlPathHelper
class and removed their taint flow models. -
Added models for the following packages:
- com.google.common.io
- hudson
- hudson.console
- java.lang
- java.net
- java.util.logging
- javax.imageio.stream
- org.apache.commons.io
- org.apache.hadoop.hive.ql.exec
- org.apache.hadoop.hive.ql.metadata
- org.apache.tools.ant.taskdefs
-
Added models for the following packages:
- com.alibaba.druid.sql.repository
- jakarta.persistence
- jakarta.persistence.criteria
- liquibase.database.jvm
- liquibase.statement.core
- org.apache.ibatis.mapping
- org.keycloak.models.map.storage
0.8.5
No user-facing changes.
0.8.4
Minor Analysis Improvements
- The diagnostic query
java/diagnostics/successfully-extracted-files
, and therefore the Code Scanning UI measure of scanned Java files, now considers any Java file seen during extraction, even one with some errors, to be extracted / scanned. - Switch cases using binding patterns and
case null[, default]
are now supported. ClassesPatternCase
andNullDefaultCase
are introduced to represent new kinds of case statement. - Both switch cases and instanceof expressions using record patterns are now supported. The new class
RecordPatternExpr
is introduced to represent record patterns, andInstanceOfExpr
gainsgetPattern
to replacegetLocalVariableDeclExpr
. - The control-flow graph and therefore dominance information regarding switch blocks in statement context but with an expression rule (e.g.
switch(...) { case 1 -> System.out.println("Hello world!") }
) has been fixed. This reduces false positives and negatives from various queries relating to functions featuring such statements.
0.8.3
Deprecated APIs
- In
SensitiveApi.qll
,javaApiCallablePasswordParam
,javaApiCallableUsernameParam
,javaApiCallableCryptoKeyParam
, andotherApiCallableCredentialParam
predicates have been deprecated. They have been replaced with a new classCredentialsSinkNode
and its child classesPasswordSink
,UsernameSink
, andCryptoKeySink
. The predicates have been changed to using the new classes, so there may be minor changes in results relying on these predicates.
Minor Analysis Improvements
- The types
java.util.SequencedCollection
,SequencedSet
andSequencedMap
, as well as the relatedCollections.unmodifiableSequenced*
methods are now modelled. This means alerts may be raised relating to data flow through these types and methods.
0.8.2
Minor Analysis Improvements
-
Java classes
MethodAccess
,LValue
andRValue
were renamed toMethodCall
,VarWrite
andVarRead
respectively, along with related predicates and class names. The old names remain usable for the time being but are deprecated and should be replaced. -
New class
NewClassExpr
was added to represent specifically an explicitnew ClassName(...)
invocation, in contrast toClassInstanceExpr
which also includes expressions that implicitly instantiate classes, such as defining a lambda or taking a method reference. -
Added up to date models related to Spring Framework 6's
org.springframework.http.ResponseEntity
. -
Added models for the following packages:
- com.alibaba.fastjson2
- javax.management
- org.apache.http.client.utils
0.8.1
New Features
- Added predicate
MemberRefExpr::getReceiverExpr
Minor Analysis Improvements
- The
isBarrier
,isBarrierIn
,isBarrierOut
, andisAdditionalFlowStep
methods of the taint-tracking configurations for local queries in theArithmeticTaintedLocalQuery
,ExternallyControlledFormatStringLocalQuery
,ImproperValidationOfArrayIndexQuery
,NumericCastTaintedQuery
,ResponseSplittingLocalQuery
,SqlTaintedLocalQuery
, andXssLocalQuery
libraries have been changed to match their remote counterpart configurations. - Deleted the deprecated
isBarrierGuard
predicate from the dataflow library and its uses, useisBarrier
and theBarrierGuard
module instead. - Deleted the deprecated
getAValue
predicate from theAnnotation
class. - Deleted the deprecated alias
FloatingPointLiteral
, useFloatLiteral
instead. - Deleted the deprecated
getASuppressedWarningLiteral
predicate from theSuppressWarningsAnnotation
class. - Deleted the deprecated
getATargetExpression
predicate form theTargetAnnotation
class. - Deleted the deprecated
getRetentionPolicyExpression
predicate from theRetentionAnnotation
class. - Deleted the deprecated
conditionCheck
predicate fromPreconditions.qll
. - Deleted the deprecated
semmle.code.java.security.performance
folder, usesemmle.code.java.security.regexp
instead. - Deleted the deprecated
ExternalAPI
class fromExternalApi.qll
, useExternalApi
instead. - Modified the
EnvInput
class insemmle.code.java.dataflow.FlowSources
to includeenvironment
andfile
source nodes. There are no changes to results unless you add source models using theenvironment
orfile
source kinds. - Added
environment
source models for the following methods:java.lang.System#getenv
java.lang.System#getProperties
java.lang.System#getProperty
java.util.Properties#get
java.util.Properties#getProperty
- Added
file
source models for the following methods:- the
java.io.FileInputStream
constructor hudson.FilePath#newInputStreamDenyingSymlinkAsNeeded
hudson.FilePath#openInputStream
hudson.FilePath#read
hudson.FilePath#readFromOffset
hudson.FilePath#readToString
- the
- Modified the
DatabaseInput
class insemmle.code.java.dataflow.FlowSources
to includedatabase
source nodes. There are no changes to results unless you add source models using thedatabase
source kind. - Added
database
source models for the following method:java.sql.ResultSet#getString
0.8.0
New Features
- Kotlin versions up to 1.9.20 are now supported.
Minor Analysis Improvements
- Fixed a control-flow bug where case rule statements would incorrectly include a fall-through edge.
- Added support for default cases as proper guards in switch expressions to match switch statements.
- Improved the class
ArithExpr
of theOverflow.qll
module to also include compound operators. Because of this, new alerts may be raised in queries related to overflows/underflows. - Added new dataflow models for the Apache CXF framework.
- Regular expressions containing multiple parse mode flags are now interpretted correctly. For example
"(?is)abc.*"
with both thei
ands
flags.
Bug Fixes
- The regular expressions library no longer incorrectly matches mode flag characters against the input.
0.7.5
No user-facing changes.
0.7.4
New Features
- Kotlin versions up to 1.9.10 are now supported.
Minor Analysis Improvements
- Fixed the MaD signature specifications to use proper nested type names.
- Added new sanitizer to Java command injection model
- Added more dataflow models for JAX-RS.
- The predicate
JaxWsEndpoint::getARemoteMethod
no longer requires the result to be annotated with@WebMethod
. Instead, the requirements listed in the JAX-RPC Specification 1.1 for required parameter and return types are used. Applications using JAX-RS may see an increase in results.
0.7.3
Major Analysis Improvements
- Improved support for flow through captured variables that properly adheres to inter-procedural control flow.
Minor Analysis Improvements
- Modified the
getSecureAlgorithmName
predicate inEncryption.qll
to also includeSHA-256
andSHA-512
. Previously only the versions of the names without dashes were considered secure. - Add support for
WithElement
andWithoutElement
for MaD access paths.
0.7.2
New Features
- A
Diagnostic.getCompilationInfo()
predicate has been added.
Minor Analysis Improvements
- Fixed a typo in the
StdlibRandomSource
class inRandomDataSource.qll
, which caused the class to improperly model calls to thenextBytes
method. Queries relying onStdlibRandomSource
may see an increase in results. - Improved the precision of virtual dispatch of
java.io.InputStream
methods. Now, calls to these methods will not dispatch to arbitrary implementations ofInputStream
if there is a high-confidence alternative (like a models-as-data summary). - Added more dataflow steps for
java.io.InputStream
s that wrap otherjava.io.InputStream
s. - Added models for the Struts 2 framework.
- Improved the modeling of Struts 2 sources of untrusted data by tainting the whole object graph of the objects unmarshaled from an HTTP request.
0.7.1
New Features
- The
DataFlow::StateConfigSig
signature module has gained default implementations forisBarrier/2
andisAdditionalFlowStep/4
. Hence it is no longer needed to providenone()
implementations of these predicates if they are not needed. - A
Class.isFileClass()
predicate, to identify Kotlin file classes, has been added.
Minor Analysis Improvements
-
Data flow configurations can now include a predicate
neverSkip(Node node)
in order to ensure inclusion of certain nodes in the path explanations. The predicate defaults to the end-points of the additional flow steps provided in the configuration, which means that such steps now always are visible by default in path explanations. -
Added models for Apache Commons Lang3
ToStringBuilder.reflectionToString
method. -
Added support for the Kotlin method
apply
. -
Added models for the following packages:
- java.io
- java.lang
- java.net
- java.nio.channels
- java.nio.file
- java.util.zip
- okhttp3
- org.gradle.api.file
- retrofit2
0.7.0
Deprecated APIs
- The
ExecCallable
class inExternalProcess.qll
has been deprecated.
Major Analysis Improvements
- The data flow library now performs type strengthening. This increases precision for all data flow queries by excluding paths that can be inferred to be impossible due to incompatible types.
Minor Analysis Improvements
- Added automatically-generated dataflow models for
javax.portlet
. - Added a missing summary model for the method
java.net.URL.toString
. - Added automatically-generated dataflow models for the following frameworks and libraries:
hudson
jenkins
net.sf.json
stapler
- Added more models for the Hudson framework.
- Added more models for the Stapler framework.
0.6.4
No user-facing changes.
0.6.3
New Features
- Kotlin versions up to 1.9.0 are now supported.
Minor Analysis Improvements
-
Added flow through the block arguments of
kotlin.io.use
andkotlin.with
. -
Added models for the following packages:
- com.alibaba.druid.sql
- com.fasterxml.jackson.databind
- com.jcraft.jsch
- io.netty.handler.ssl
- okhttp3
- org.antlr.runtime
- org.fusesource.leveldbjni
- org.influxdb
- org.springframework.core.io
- org.yaml.snakeyaml
-
Deleted the deprecated
getRHS
predicate from theLValue
class, usegetRhs
instead. -
Deleted the deprecated
getCFGNode
predicate from theSsaVariable
class, usegetCfgNode
instead. -
Deleted many deprecated predicates and classes with uppercase
XML
,JSON
,URL
,API
, etc. in their names. Use the PascalCased versions instead. -
Added models for the following packages:
- java.lang
- java.nio.file
-
Added dataflow models for the Gson deserialization library.
-
Added models for the following packages:
- okhttp3
-
Added more dataflow models for the Play Framework.
-
Modified the models related to
java.nio.file.Files.copy
so that generic[Input|Output]Stream
arguments are not considered file-related sinks. -
Dataflow analysis has a new flow step through constructors of transitive subtypes of
java.io.InputStream
that wrap an underlying data source. Previously, the step only existed for direct subtypes ofjava.io.InputStream
. -
Path creation sinks modeled in
PathCreation.qll
have been added to the models-as-data sink kindpath-injection
. -
Updated the regular expression in the
HostnameSanitizer
sanitizer in thesemmle.code.java.security.RequestForgery
library to better detect strings prefixed with a hostname. -
Changed the
android-widget
Java source kind toremote
. Any custom data extensions that use theandroid-widget
source kind will need to be updated accordingly in order to continue working. -
Updated the following Java sink kind names. Any custom data extensions will need to be updated accordingly in order to continue working.
sql
tosql-injection
url-redirect
tourl-redirection
xpath
toxpath-injection
ssti
totemplate-injection
logging
tolog-injection
groovy
togroovy-injection
jexl
tojexl-injection
mvel
tomvel-injection
xslt
toxslt-injection
ldap
toldap-injection
pending-intent-sent
topending-intents
intent-start
tointent-redirection
set-hostname-verifier
tohostname-verification
header-splitting
toresponse-splitting
xss
tohtml-injection
andjs-injection
write-file
tofile-system-store
create-file
andread-file
topath-injection
open-url
andjdbc-url
torequest-forgery
0.6.2
Minor Analysis Improvements
-
Added SQL injection sinks for Spring JDBC's
NamedParameterJdbcOperations
. -
Added models for the following packages:
- org.apache.hadoop.fs
-
Added the
ArithmeticCommon.qll
library to provide predicates for reasoning about arithmetic operations. -
Added the
ArithmeticTaintedLocalQuery.qll
library to provide theArithmeticTaintedLocalOverflowFlow
andArithmeticTaintedLocalUnderflowFlow
taint-tracking modules to reason about arithmetic with unvalidated user input. -
Added the
ArithmeticTaintedQuery.qll
library to provide theRemoteUserInputOverflow
andRemoteUserInputUnderflow
taint-tracking modules to reason about arithmetic with unvalidated user input. -
Added the
ArithmeticUncontrolledQuery.qll
library to provide theArithmeticUncontrolledOverflowFlow
andArithmeticUncontrolledUnderflowFlow
taint-tracking modules to reason about arithmetic with uncontrolled user input. -
Added the
ArithmeticWithExtremeValuesQuery.qll
library to provide theMaxValueFlow
andMinValueFlow
dataflow modules to reason about arithmetic with extreme values. -
Added the
BrokenCryptoAlgorithmQuery.qll
library to provide theInsecureCryptoFlow
taint-tracking module to reason about broken cryptographic algorithm vulnerabilities. -
Added the
ExecTaintedLocalQuery.qll
library to provide theLocalUserInputToArgumentToExecFlow
taint-tracking module to reason about command injection vulnerabilities caused by local data flow. -
Added the
ExternallyControlledFormatStringLocalQuery.qll
library to provide theExternallyControlledFormatStringLocalFlow
taint-tracking module to reason about format string vulnerabilities caused by local data flow. -
Added the
ImproperValidationOfArrayConstructionCodeSpecifiedQuery.qll
library to provide theBoundedFlowSourceFlow
dataflow module to reason about improper validation of code-specified sizes used for array construction. -
Added the
ImproperValidationOfArrayConstructionLocalQuery.qll
library to provide theImproperValidationOfArrayConstructionLocalFlow
taint-tracking module to reason about improper validation of local user-provided sizes used for array construction caused by local data flow. -
Added the
ImproperValidationOfArrayConstructionQuery.qll
library to provide theImproperValidationOfArrayConstructionFlow
taint-tracking module to reason about improper validation of user-provided size used for array construction. -
Added the
ImproperValidationOfArrayIndexCodeSpecifiedQuery.qll
library to provide theBoundedFlowSourceFlow
data flow module to reason about about improper validation of code-specified array index. -
Added the
ImproperValidationOfArrayIndexLocalQuery.qll
library to provide theImproperValidationOfArrayIndexLocalFlow
taint-tracking module to reason about improper validation of a local user-provided array index. -
Added the
ImproperValidationOfArrayIndexQuery.qll
library to provide theImproperValidationOfArrayIndexFlow
taint-tracking module to reason about improper validation of user-provided array index. -
Added the
InsecureCookieQuery.qll
library to provide theSecureCookieFlow
taint-tracking module to reason about insecure cookie vulnerabilities. -
Added the
MaybeBrokenCryptoAlgorithmQuery.qll
library to provide theInsecureCryptoFlow
taint-tracking module to reason about broken cryptographic algorithm vulnerabilities. -
Added the
NumericCastTaintedQuery.qll
library to provide theNumericCastTaintedFlow
taint-tracking module to reason about numeric cast vulnerabilities. -
Added the
ResponseSplittingLocalQuery.qll
library to provide theResponseSplittingLocalFlow
taint-tracking module to reason about response splitting vulnerabilities caused by local data flow. -
Added the
SqlConcatenatedQuery.qll
library to provide theUncontrolledStringBuilderSourceFlow
taint-tracking module to reason about SQL injection vulnerabilities caused by concatenating untrusted strings. -
Added the
SqlTaintedLocalQuery.qll
library to provide theLocalUserInputToArgumentToSqlFlow
taint-tracking module to reason about SQL injection vulnerabilities caused by local data flow. -
Added the
StackTraceExposureQuery.qll
library to provide theprintsStackExternally
,stringifiedStackFlowsExternally
, andgetMessageFlowsExternally
predicates to reason about stack trace exposure vulnerabilities. -
Added the
TaintedPermissionQuery.qll
library to provide theTaintedPermissionFlow
taint-tracking module to reason about tainted permission vulnerabilities. -
Added the
TempDirLocalInformationDisclosureQuery.qll
library to provide theTempDirSystemGetPropertyToCreate
taint-tracking module to reason about local information disclosure vulnerabilities caused by local data flow. -
Added the
UnsafeHostnameVerificationQuery.qll
library to provide theTrustAllHostnameVerifierFlow
taint-tracking module to reason about insecure hostname verification vulnerabilities. -
Added the
UrlRedirectLocalQuery.qll
library to provide theUrlRedirectLocalFlow
taint-tracking module to reason about URL redirection vulnerabilities caused by local data flow. -
Added the
UrlRedirectQuery.qll
library to provide theUrlRedirectFlow
taint-tracking module to reason about URL redirection vulnerabilities. -
Added the
XPathInjectionQuery.qll
library to provide theXPathInjectionFlow
taint-tracking module to reason about XPath injection vulnerabilities. -
Added the
XssLocalQuery.qll
library to provide theXssLocalFlow
taint-tracking module to reason about XSS vulnerabilities caused by local data flow. -
Moved the
url-open-stream
sink models to experimental and removedurl-open-stream
as a sink option from the Customizing Library Models for Java documentation. -
Added models for the Apache Commons Net library.
-
Updated the
neutralModel
extensible predicate to include akind
column. -
Added models for the
io.jsonwebtoken
library.
0.6.1
Deprecated APIs
- The
sensitiveResultReceiver
predicate inSensitiveResultReceiverQuery.qll
has been deprecated and replaced withisSensitiveResultReceiver
in order to use the new dataflow API.
Minor Analysis Improvements
- Changed some models of Spring's
FileCopyUtils.copy
to be path injection sinks instead of summaries. - Added models for the following packages:
- java.nio.file
- Added models for Apache HttpComponents versions 4 and 5.
- Added sanitizers that recognize line breaks to the query
java/log-injection
. - Added new flow steps for
java.util.StringJoiner
.
0.6.0
Deprecated APIs
- The
execTainted
predicate inCommandLineQuery.qll
has been deprecated and replaced with the predicateexecIsTainted
. - The recently introduced new data flow and taint tracking APIs have had a number of module and predicate renamings. The old APIs remain in place for now.
- The
WebViewDubuggingQuery
library has been renamed toWebViewDebuggingQuery
to fix the typo in the file name.WebViewDubuggingQuery
is now deprecated.
New Features
- Predicates
Compilation.getExpandedArgument
andCompilation.getAnExpandedArgument
has been added.
Minor Analysis Improvements
- Fixed a bug in the regular expression used to identify sensitive information in
SensitiveActions::getCommonSensitiveInfoRegex
. This may affect the results of the queriesjava/android/sensitive-communication
,java/android/sensitive-keyboard-cache
, andjava/sensitive-log
. - Added a summary model for the
java.lang.UnsupportedOperationException(String)
constructor. - The filenames embedded in
Compilation.toString()
now use/
as the path separator on all platforms. - Added models for the following packages:
java.lang
java.net
java.nio.file
java.io
java.lang.module
org.apache.commons.httpclient.util
org.apache.commons.io
org.apache.http.client
org.eclipse.jetty.client
com.google.common.io
kotlin.io
- Added the
TaintedPathQuery.qll
library to provide theTaintedPathFlow
andTaintedPathLocalFlow
taint-tracking modules to reason about tainted path vulnerabilities. - Added the
ZipSlipQuery.qll
library to provide theZipSlipFlow
taint-tracking module to reason about zip-slip vulnerabilities. - Added the
InsecureBeanValidationQuery.qll
library to provide theBeanValidationFlow
taint-tracking module to reason about bean validation vulnerabilities. - Added the
XssQuery.qll
library to provide theXssFlow
taint-tracking module to reason about cross site scripting vulnerabilities. - Added the
LdapInjectionQuery.qll
library to provide theLdapInjectionFlow
taint-tracking module to reason about LDAP injection vulnerabilities. - Added the
ResponseSplittingQuery.qll
library to provide theResponseSplittingFlow
taint-tracking module to reason about response splitting vulnerabilities. - Added the
ExternallyControlledFormatStringQuery.qll
library to provide theExternallyControlledFormatStringFlow
taint-tracking module to reason about externally controlled format string vulnerabilities. - Improved the handling of addition in the range analysis. This can cause in minor changes to the results produced by
java/index-out-of-bounds
andjava/constant-comparison
. - A new models as data sink kind
command-injection
has been added. - The queries
java/command-line-injection
andjava/concatenated-command-line
now can be extended using thecommand-injection
models as data sink kind. - Added more sink and summary dataflow models for the following packages:
java.net
java.nio.file
javax.imageio.stream
javax.naming
javax.servlet
org.geogebra.web.full.main
hudson
hudson.cli
hudson.lifecycle
hudson.model
hudson.scm
hudson.util
hudson.util.io
- Added the extensible abstract class
JndiInjectionSanitizer
. Now this class can be extended to add more sanitizers to thejava/jndi-injection
query. - Added a summary model for the
nativeSQL
method of thejava.sql.Connection
interface. - Added sink and summary dataflow models for the Jenkins and Netty frameworks.
- The Models as Data syntax for selecting the qualifier has been changed from
-1
tothis
(e.g.Argument[-1]
is now written asArgument[this]
). - Added sources and flow step models for the Netty framework up to version 4.1.
- Added more dataflow models for frequently-used JDK APIs.
Bug Fixes
- Fixed some accidental predicate visibility in the backwards-compatible wrapper for data flow configurations. In particular
DataFlow::hasFlowPath
,DataFlow::hasFlow
,DataFlow::hasFlowTo
, andDataFlow::hasFlowToExpr
were accidentally exposed in a single version.
0.5.6
No user-facing changes.
0.5.5
New Features
- Added support for merging two
PathGraph
s via disjoint union to allow results from multiple data flow computations in a singlepath-problem
query.
Major Analysis Improvements
- Removed low-confidence call edges to known neutral call targets from the call graph used in data flow analysis. This includes, for example, custom
List.contains
implementations when the best inferrable type at the call site is simplyList
. - Added more sink and summary dataflow models for the following packages:
java.io
java.lang
java.sql
javafx.scene.web
org.apache.commons.compress.archivers.tar
org.apache.http.client.utils
org.codehaus.cargo.container.installer
- The main data flow and taint tracking APIs have been changed. The old APIs remain in place for now and translate to the new through a backwards-compatible wrapper. If multiple configurations are in scope simultaneously, then this may affect results slightly. The new API is quite similar to the old, but makes use of a configuration module instead of a configuration class.
Minor Analysis Improvements
- Deleted the deprecated
getPath
andgetFolder
predicates from theXmlFile
class. - Deleted the deprecated
getRepresentedString
predicate from theStringLiteral
class. - Deleted the deprecated
ServletWriterSource
class. - Deleted the deprecated
getGroupID
,getArtefactID
, andartefactMatches
predicates from theMavenRepoJar
class.
0.5.4
Minor Analysis Improvements
- Added new sinks for
java/hardcoded-credential-api-call
to identify the use of hardcoded secrets in the creation and verification of JWT tokens usingcom.auth0.jwt
. These sinks are from an experimental query submitted by @luchua. - The Java extractor now supports builds against JDK 20.
- The query
java/hardcoded-credential-api-call
now recognizes methods that accept user and password from the SQLServerDataSource class of the Microsoft JDBC Driver for SQL Server.
0.5.3
New Features
- Kotlin versions up to 1.8.20 are now supported.
Minor Analysis Improvements
- Removed the first argument of
java.nio.file.Files#createTempDirectory(String,FileAttribute[])
as a "create-file" sink. - Added the first argument of
java.nio.file.Files#copy
as a "read-file" sink for thejava/path-injection
query. - The data flow library now disregards flow through code that is dead based on some basic constant propagation, for example, guards like
if (1+1>3)
.
0.5.2
Minor Analysis Improvements
- Added sink models for the
createQuery
,createNativeQuery
, andcreateSQLQuery
methods of theorg.hibernate.query.QueryProducer
interface.
0.5.1
Minor Analysis Improvements
- Added sink models for the constructors of
org.springframework.jdbc.object.MappingSqlQuery
andorg.springframework.jdbc.object.MappingSqlQueryWithParameters
. - Added more dataflow models for frequently-used JDK APIs.
- Removed summary model for
java.lang.String#endsWith(String)
and added neutral model for this API. - Added additional taint step for
java.lang.String#endsWith(String)
toConditionalBypassFlowConfig
. - Added
AllowContentAccessMethod
to represent thesetAllowContentAccess
method of theandroid.webkit.WebSettings
class. - Added an external flow source for the parameters of methods annotated with
android.webkit.JavascriptInterface
.
0.5.0
Minor Analysis Improvements
- Added more dataflow models for frequently-used JDK APIs.
- The extraction of Kotlin extension methods has been improved when default parameter values are present. The dispatch and extension receiver parameters are extracted in the correct order. The
ExtensionMethod::getExtensionReceiverParameterIndex
predicate has been introduced to facilitate getting the correct extension parameter index. - The query
java/insecure-cookie
now uses global dataflow to track secure cookies being set to the HTTP response object. - The library
PathSanitizer.qll
has been improved to detect more path validation patterns in Kotlin. - Models as Data models for Java are defined as data extensions instead of being inlined in the code. New models should be added in the
lib/ext
folder. - Added a taint model for the method
java.nio.file.Path.getParent
. - Fixed a problem in the taint model for the method
java.nio.file.Paths.get
. - Deleted the deprecated
LocalClassDeclStmtNode
andLocalClassDeclStmt
classes fromPrintAst.qll
andStatement.qll
respectively. - Deleted the deprecated
getLocalClass
predicate fromLocalTypeDeclStmt
, and the deprecatedgetLocalClassDeclStmt
predicate fromLocalClassOrInterface
. - Added support for Android Manifest
<activity-aliases>
elements in data flow sources.
Bug Fixes
- We now correctly handle empty block comments, like
/**/
. Previously these could be mistaken for Javadoc comments and led to attribution of Javadoc tags to the wrong declaration.
0.4.6
No user-facing changes.
0.4.5
No user-facing changes.
0.4.4
New Features
- Kotlin support is now in beta. This means that Java analyses will also include Kotlin code by default. Kotlin support can be disabled by setting
CODEQL_EXTRACTOR_JAVA_AGENT_DISABLE_KOTLIN
totrue
in the environment. - The new
string Compilation.getInfo(string)
predicate provides access to some information about compilations.
Minor Analysis Improvements
- The ReDoS libraries in
semmle.code.java.security.regexp
has been moved to a shared pack inside theshared/
folder, and the previous location has been deprecated. - Added data flow summaries for tainted Android intents sent to activities via
Activity.startActivities
.
0.4.3
No user-facing changes.
0.4.2
Deprecated APIs
- Deprecated
ContextStartActivityMethod
. UseStartActivityMethod
instead.
New Features
- Added a new predicate,
hasIncompletePermissions
, in theAndroidProviderXmlElement
class. This predicate detects if a provider element does not provide both read and write permissions.
Minor Analysis Improvements
- Added support for common patterns involving
Stream.collect
and common collectors likeCollectors.toList()
. - The class
TypeVariable
now also extendsModifiable
. - Added data flow steps for tainted Android intents that are sent to services and receivers.
- Improved the data flow step for tainted Android intents that are sent to activities so that more cases are covered.
0.4.1
Minor Analysis Improvements
- Added external flow sources for the intents received in exported Android services.
0.4.0
Breaking Changes
- The
Member.getQualifiedName()
predicate result now includes the qualified name of the declaring type.
Deprecated APIs
- The predicate
Annotation.getAValue()
has been deprecated because it might lead to obtaining the value of the wrong annotation element by accident.getValue(string)
(or one of the value type specific predicates) should be used to explicitly specify the name of the annotation element. - The predicate
Annotation.getAValue(string)
has been renamed togetAnArrayValue(string)
. - The predicate
SuppressWarningsAnnotation.getASuppressedWarningLiteral()
has been deprecated because it unnecessarily restricts the result type;getASuppressedWarning()
should be used instead. - The predicates
TargetAnnotation.getATargetExpression()
andRetentionAnnotation.getRetentionPolicyExpression()
have been deprecated because getting the enum constant read expression is rarely useful, instead the corresponding predicates for getting the name of the referenced enum constants should be used.
New Features
- Added a new predicate,
allowsBackup
, in theAndroidApplicationXmlElement
class. This predicate detects if the application element does not disable theandroid:allowBackup
attribute. - The predicates of the CodeQL class
Annotation
have been improved:- Convenience value type specific predicates have been added, such as
getEnumConstantValue(string)
orgetStringValue(string)
. - Convenience predicates for elements with array values have been added, such as
getAnEnumConstantArrayValue(string)
. While the behavior of the existing predicates has not changed, usage of them should be reviewed (or replaced with the newly added predicate) to make sure they work correctly for elements with array values. - Some internal CodeQL usage of the
Annotation
predicates has been adjusted and corrected; this might affect the results of some queries.
- Convenience value type specific predicates have been added, such as
- New predicates have been added to the CodeQL class
Annotatable
to support getting declared and associated annotations. As part of that,hasAnnotation()
has been changed to also consider inherited annotations, to be consistent withhasAnnotation(string, string)
andgetAnAnnotation()
. The newly added predicatehasDeclaredAnnotation()
can be used as replacement for the old functionality. - New predicates have been added to the CodeQL class
AnnotationType
to simplify getting information about usage of JDK meta-annotations, such as@Retention
.
Major Analysis Improvements
- The virtual dispatch relation used in data flow now favors summary models over source code for dispatch to interface methods from
java.util
unless there is evidence that a specific source implementation is reachable. This should provide increased precision for any projects that include, for example, customList
orMap
implementations.
Minor Analysis Improvements
- Added new sinks to the query
java/android/implicit-pendingintents
to take into account the classesandroidx.core.app.NotificationManagerCompat
andandroidx.core.app.AlarmManagerCompat
. - Added new flow steps for
androidx.core.app.NotificationCompat
and its inner classes. - Added flow sinks, sources and summaries for the Kotlin standard library.
- Added flow summary for
org.springframework.data.repository.CrudRepository.save()
. - Added new flow steps for the following Android classes:
android.content.ContentResolver
android.content.ContentProviderClient
android.content.ContentProviderOperation
android.content.ContentProviderOperation$Builder
android.content.ContentProviderResult
android.database.Cursor
- Added taint flow models for the
java.lang.String.(charAt|getBytes)
methods. - Improved taint flow models for the
java.lang.String.(replace|replaceFirst|replaceAll)
methods. Additional results may be found where users do not properly sanitize their inputs.
Bug Fixes
- Fixed an issue in the taint tracking analysis where implicit reads were not allowed by default in sinks or additional taint steps that used flow states.
0.3.5
0.3.4
Deprecated APIs
- Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias.
- The utility files previously in the
semmle.code.java.security.performance
package have been moved to thesemmle.code.java.security.regexp
package.
The previous files still exist as deprecated aliases.
New Features
- Added a new predicate,
requiresPermissions
, in theAndroidComponentXmlElement
andAndroidApplicationXmlElement
classes to detect if the element has explicitly set a value for itsandroid:permission
attribute. - Added a new predicate,
hasAnIntentFilterElement
, in theAndroidComponentXmlElement
class to detect if a component contains an intent filter element. - Added a new predicate,
hasExportedAttribute
, in theAndroidComponentXmlElement
class to detect if a component has anandroid:exported
attribute. - Added a new class,
AndroidCategoryXmlElement
, to represent a category element in an Android manifest file. - Added a new predicate,
getACategoryElement
, in theAndroidIntentFilterXmlElement
class to get a category element of an intent filter. - Added a new predicate,
isInBuildDirectory
, in theAndroidManifestXmlFile
class. This predicate detects if the manifest file is located in a build directory. - Added a new predicate,
isDebuggable
, in theAndroidApplicationXmlElement
class. This predicate detects if the application element has itsandroid:debuggable
attribute enabled.
Minor Analysis Improvements
- Added new flow steps for the classes
java.nio.file.Path
andjava.nio.file.Paths
. - The class
AndroidFragment
now also models the Android Jetpack version of theFragment
class (androidx.fragment.app.Fragment
). - Java 19 builds can now be extracted. There are no non-preview new language features in this release, so the only user-visible change is that the CodeQL extractor will now correctly trace compilations using the JDK 19 release of
javac
. - Classes and methods that are seen with several different paths during the extraction process (for example, packaged into different JAR files) now report an arbitrarily selected location via their
getLocation
andhasLocationInfo
predicates, rather than reporting all of them. This may lead to reduced alert duplication. - The query
java/hardcoded-credential-api-call
now recognises methods that consume usernames, passwords and keys from the JSch, Ganymed, Apache SSHD, sshj, Trilead SSH-2, Apache FTPClient and MongoDB projects.
0.3.3
Minor Analysis Improvements
- Improved analysis of the Android class
AsyncTask
so that data can properly flow through its methods according to the life-cycle steps described here: https://developer.android.com/reference/android/os/AsyncTask#the-4-steps. - Added a data-flow model for the
setProperty
method ofjava.util.Properties
. Additional results may be found where relevant data is stored in and then retrieved from aProperties
instance.
0.3.2
New Features
- The QL predicate
Expr::getUnderlyingExpr
has been added. It can be used to look through casts and not-null expressions and obtain the underlying expression to which they apply.
Minor Analysis Improvements
- The JUnit5 version of
AssertNotNull
is now recognized, which removes related false positives in the nullness queries. - Added data flow models for
java.util.Scanner
.
0.3.1
New Features
- Added an
ErrorType
class. An instance of this class will be used if an extractor is unable to extract a type, or if an up/downgrade script is unable to provide a type.
Minor Analysis Improvements
- Added data-flow models for
java.util.Properties
. Additional results may be found where relevant data is stored in and then retrieved from aProperties
instance. - Added
Modifier.isInline()
. - Removed Kotlin-specific database and QL structures for loops and
break
/continue
statements. The Kotlin extractor was changed to reuse the Java structures for these constructs. - Added additional flow sources for uses of external storage on Android.
0.3.0
Deprecated APIs
- The
BarrierGuard
class has been deprecated. Such barriers and sanitizers can now instead be created using the newBarrierGuard
parameterized module.
Minor Analysis Improvements
Added a flow step for String.valueOf
calls on tainted android.text.Editable
objects.
0.2.3
0.2.2
Deprecated APIs
- The QL class
FloatingPointLiteral
has been renamed toFloatLiteral
.
Minor Analysis Improvements
- Fixed a sanitizer of the query
java/android/intent-redirection
. Now, for an intent to be considered safe against intent redirection, both its package name and class name must be checked.
0.2.1
New Features
- A number of new classes and methods related to the upcoming Kotlin
support have been added. These are not yet stable, as Kotlin support
is still under development.
File::isSourceFile
File::isJavaSourceFile
File::isKotlinSourceFile
Member::getKotlinType
Element::isCompilerGenerated
Expr::getKotlinType
LambdaExpr::isKotlinFunctionN
Callable::getReturnKotlinType
Callable::getParameterKotlinType
Method::isLocal
Method::getKotlinName
Field::getKotlinType
Modifiable::isSealedKotlin
Modifiable::isInternal
Variable::getKotlinType
LocalVariableDecl::getKotlinType
Parameter::getKotlinType
Parameter::isExtensionParameter
Compilation
classDiagnostic
classKtInitializerAssignExpr
classValueEQExpr
classValueNEExpr
classValueOrReferenceEqualsExpr
classValueOrReferenceNotEqualsExpr
classReferenceEqualityTest
classCastingExpr
classSafeCastExpr
classImplicitCastExpr
classImplicitNotNullExpr
classImplicitCoercionToUnitExpr
classUnsafeCoerceExpr
classPropertyRefExpr
classNotInstanceOfExpr
classExtensionReceiverAccess
classWhenExpr
classWhenBranch
classClassExpr
classStmtExpr
classStringTemplateExpr
classNotNullExpr
classTypeNullPointerException
classKtComment
classKtCommentSection
classKotlinType
classKotlinNullableType
classKotlinNotnullType
classKotlinTypeAlias
classProperty
classDelegatedProperty
classExtensionMethod
classKtInitializerNode
classKtLoopStmt
classKtBreakContinueStmt
classKtBreakStmt
classKtContinueStmt
classClassObject
classCompanionObject
classLiveLiteral
classLiveLiteralMethod
classCastConversionContext
renamed toCastingConversionContext
- The QL class
ValueDiscardingExpr
has been added, representing expressions for which the value of the expression as a whole is discarded.
Minor Analysis Improvements
- Added models for the libraries OkHttp and Retrofit.
- Add taint models for the following
File
methods:File::getAbsoluteFile
File::getCanonicalFile
File::getAbsolutePath
File::getCanonicalPath
- Added a flow step for
toString
calls on taintedandroid.text.Editable
objects. - Added a data flow step for tainted Android intents that are sent to other activities and accessed there via
getIntent()
. - Added modeling of MyBatis (
org.apache.ibatis
) Providers, resulting in additional sinks for the queriesjava/ognl-injection
,java/sql-injection
,java/sql-injection-local
andjava/concatenated-sql-query
.
0.2.0
Breaking Changes
- The signature of
allowImplicitRead
onDataFlow::Configuration
andTaintTracking::Configuration
has changed fromallowImplicitRead(DataFlow::Node node, DataFlow::Content c)
toallowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)
.
Minor Analysis Improvements
- Improved the data flow support for the Android class
SharedPreferences$Editor
. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow.- Added flow sources and steps for JMS versions 1 and 2.
- Added flow sources and steps for RabbitMQ.
- Added flow steps for
java.io.DataInput
andjava.io.ObjectInput
implementations.
- Added data-flow models for the Spring Framework component
spring-beans
.
Bug Fixes
- The QL class
JumpStmt
has been made the superclass ofBreakStmt
,ContinueStmt
andYieldStmt
. This allows directly using its inherited predicates without having to explicitly cast toJumpStmt
first.
0.1.0
Breaking Changes
- The recently added flow-state versions of
isBarrierIn
,isBarrierOut
,isSanitizerIn
, andisSanitizerOut
in the data flow and taint tracking libraries have been removed. - The
getUrl
predicate ofDeclaredRepository
inMavenPom.qll
has been renamed togetRepositoryUrl
.
New Features
- There are now QL classes ErrorExpr and ErrorStmt. These may be generated by upgrade or downgrade scripts when databases cannot be fully converted.
Minor Analysis Improvements
- Added guard precondition support for assertion methods for popular testing libraries (e.g. Junit 4, Junit 5, TestNG).
0.0.13
0.0.12
Breaking Changes
- The flow state variants of
isBarrier
andisAdditionalFlowStep
are no longer exposed in the taint tracking library. TheisSanitizer
andisAdditionalTaintStep
predicates should be used instead.
Deprecated APIs
- Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. The old name still exists as a deprecated alias.
New Features
- The data flow and taint tracking libraries have been extended with versions of
isBarrierIn
,isBarrierOut
, andisBarrierGuard
, respectivelyisSanitizerIn
,isSanitizerOut
, andisSanitizerGuard
, that support flow states.
Minor Analysis Improvements
- Added new guards
IsWindowsGuard
,IsSpecificWindowsVariant
,IsUnixGuard
, andIsSpecificUnixVariant
to detect OS specific guards. - Added a new predicate
getSystemProperty
that gets all expressions that retrieve system properties from a variety of sources (eg. alternative JDK API's, Google Guava, Apache Commons, Apache IO, etc.). - Added support for detection of SSRF via JDBC database URLs, including connections made using the standard library (
java.sql
), Hikari Connection Pool, JDBI and Spring JDBC. - Re-removed support for
CharacterLiteral
fromCompileTimeConstantExpr.getStringValue()
to restore the convention that that predicate only applies toString
-typed constants. - All deprecated predicates/classes/modules that have been deprecated for over a year have been deleted.
0.0.11
New Features
- Added
hasDescendant(RefType anc, Type sub)
- Added
RefType.getADescendant()
- Added
RefType.getAStrictAncestor()
Minor Analysis Improvements
- Add support for
CharacterLiteral
inCompileTimeConstantExpr.getStringValue()
0.0.10
New Features
- Added predicates
ClassOrInterface.getAPermittedSubtype
andisSealed
exposing information about sealed classes.
0.0.9
0.0.8
Deprecated APIs
- The
codeql/java-upgrades
CodeQL pack has been removed. All upgrades scripts have been merged into thecodeql/java-all
CodeQL pack.
0.0.7
0.0.6
Major Analysis Improvements
- Data flow now propagates taint from remote source
Parameter
types to read steps of their fields (e.g.tainted.publicField
ortainted.getField()
). This also applies to their subtypes and the types of their fields, recursively.
0.0.5
Bug Fixes
CharacterLiteral
'sgetCodePointValue
predicate now returns the correct value for UTF-16 surrogates.- The
RangeAnalysis
module now properly handles comparisons with Unicode surrogate character literals.
0.0.4
Bug Fixes
CharacterLiteral
'sgetCodePointValue
predicate now returns the correct value for UTF-16 surrogates.- The
RangeAnalysis
module and thejava/constant-comparison
queries no longer raise false alerts regarding comparisons with Unicode surrogate character literals. - The predicate
Method.overrides(Method)
was accidentally transitive. This has been fixed. This fix also affectsMethod.overridesOrInstantiates(Method)
andMethod.getASourceOverriddenMethod()
.