CodeQL 2.20.4 (2025-02-06)¶
This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the code scanning section on the GitHub blog, relevant GitHub Changelog updates, changes in the CodeQL extension for Visual Studio Code, and the CodeQL Action changelog.
Security Coverage¶
CodeQL 2.20.4 runs a total of 454 security queries when configured with the Default suite (covering 168 CWE). The Extended suite enables an additional 128 queries (covering 34 more CWE).
CodeQL CLI¶
Bug Fixes¶
Fixed a bug where CodeQL for Java would fail with an SSL exception while trying to download
maven.
New Features¶
Using the
actionslanguage (for analysis of GitHub Actions workflows) no longer requires theCODEQL_ENABLE_EXPERIMENTAL_FEATURESenvironment variable to be set. Support for analysis of GitHub Actions workflows remains in public preview.
Miscellaneous¶
The build of the logback-core library that is used for logging in the CodeQL CLI has been updated to version 1.3.15.
Query Packs¶
Bug Fixes¶
JavaScript/TypeScript¶
Fixed a bug that would occur when TypeScript code was found in an HTML-like file, such as a
.vuefile, but where it could not be associated with anytsconfig.jsonfile. Previously the embedded code was not extracted in this case, but should now be extracted properly.
Major Analysis Improvements¶
JavaScript/TypeScript¶
Improved support for NestJS applications that make use of dependency injection with custom providers. Calls to methods on an injected service should now be resolved properly.
TypeScript extraction is now better at analyzing projects where the main
tsconfig.jsonfile does not include any source files, but references othertsconfig.json-like files that do include source files.The
js/incorrect-suffix-checkquery now recognises some good patterns of the formorigin.indexOf("." + allowedOrigin)that were previously falsely flagged.Added a new threat model kind called
view-component-input, which can enabled with advanced setup. When enabled, all React props, Vue props, and input fields in an Angular component are seen as taint sources, even if none of the corresponding instantiation sites appear to pass in a tainted value. Some users may prefer this as a “defense in depth” option but note that it may result in false positives. Regardless of whether the threat model is enabled, CodeQL will propagate taint from the instantiation sites of such components into the components themselves.
Minor Analysis Improvements¶
C/C++¶
The “Wrong type of arguments to formatting function” query (
cpp/wrong-type-format-argument) now produces fewer FPs if the formatting function has multiple definitions.The “Call to memory access function may overflow buffer” query (
cpp/overflow-buffer) now produces fewer FPs involving non-static member variables.
C#¶
All experimental queries have been deprecated. The queries are instead available as part of the default query suite in CodeQL-Community-Packs.
Java/Kotlin¶
All experimental queries have been deprecated. The queries are instead available as part of the default query suite in CodeQL-Community-Packs.
Language Libraries¶
Bug Fixes¶
GitHub Actions¶
Fixed data for vulnerable versions of
actions/download-artifactandrlespinasse/github-slug-action(following GHSA-cxww-7g56-2vh6 and GHSA-6q4m-7476-932w).Improved
untrustedGhCommandDataModelregex forgh pr viewand Bash taint analysis in GitHub Actions.
Breaking Changes¶
C/C++¶
Deleted the deprecated
getAllocatorCallpredicate fromDeleteOrDeleteArrayExpr, usegetDeallocatorCallinstead.
C#¶
Deleted the deprecated
getInstanceTypepredicate from theUnboundGenericTypeclass.Deleted the deprecated
getElementpredicate from theNodeclass inControlFlowGraph.qll, usegetAstNodeinstead.
Golang¶
Deleted the deprecated
describeBitSizepredicate fromIncorrectIntegerConversionLib.qll
Java/Kotlin¶
Deleted the deprecated
isLValueandisRValuepredicates from theVarAccessclass, useisVarWriteandisVarReadrespectively instead.Deleted the deprecated
getRhspredicate from theVarWriteclass, usegetASourceinstead.Deleted the deprecated
LValueandRValueclasses, useVarWriteandVarReadrespectively instead.Deleted a lot of deprecated classes ending in
*Access, use the corresponding*Callclasses instead.Deleted a lot of deprecated predicates ending in
*Access, use the corresponding*Callpredicates instead.Deleted the deprecated
EnvInputandDatabaseInputclasses fromFlowSources.qll, use the threat models feature instead.Deleted some deprecated API predicates from
SensitiveApi.qll, use the Sink classes from that file instead.
Python¶
Deleted the old deprecated TypeTracking library.
Deleted the deprecated
classRefpredicate from theFieldStoragemodule, usesubclassRefinstead.Deleted a lot of deprecated modules and predicates from
Stdlib.qll, use API-graphs directly instead.
Ruby¶
Deleted the deprecated
getCallNodepredicate fromAPI::Node, useasCall()instead.Deleted the deprecated
getASubclass,getAnImmediateSubclass,getASuccessor,getAPredecessor,getASuccessor,getDepth, andgetPathpredicates fromAPI::Node.Deleted the deprecated
Root,Use, andDefclasses fromApiGraphs.qll.Deleted the deprecated
Labelmodule fromApiGraphs.qll.Deleted the deprecated
getAUse,getAnImmediateUse,getARhs, andgetAValueReachingRhspredicates fromAPI::Node, usegetAValueReachableFromSource,asSource,asSink, andgetAValueReachingSinkinstead.Deleted the deprecated
getAVariablepredicate from theExprNodeclass, usegetVariableinstead.Deleted the deprecated
getAPotentialFieldAccessMethodpredicate from theActiveRecordModelClassclass.Deleted the deprecated
ActiveRecordModelClassMethodCallclass fromActiveRecord.qll, useActiveRecordModelClass.getClassNode().trackModule().getMethod()instead.Deleted the deprecated
PotentiallyUnsafeSqlExecutingMethodCallclass fromActiveRecord.qll, use theSqlExecutionconcept instead.Deleted the deprecated
ModelClassandModelInstanceclasses fromActiveResource.qll, useModelClassNodeandModelClassNode.getAnInstanceReference()instead.Deleted the deprecated
Collectionclass fromActiveResource.qll, useCollectionSourceinstead.Deleted the deprecated
ServiceInstantiationandClientInstantiationclasses fromTwirp.qll.Deleted a lot of deprecated dataflow modules from
*Query.qllfiles.Deleted the old deprecated TypeTracking library.
Swift¶
Deleted the deprecated
ArrayContentclass from the dataflow library, useCollectionContentinstead.Deleted the deprecated
getOptionsInput,getRegexInput, andgetStringInputpredicates from the regexp library, usegetAnOptionsInput,getRegexInputNode, andgetStringInputNodeinstead.
Major Analysis Improvements¶
JavaScript/TypeScript¶
Added new XSS sink where
innerHTMLorouterHTMLis assigned to with the Angular Renderer2 API, plus modeled this API as a general attribute setter
Minor Analysis Improvements¶
C#¶
C# 13: Added MaD models for some overload implementations using
ReadOnlySpanparameters (likeString.Format(System.String, System.ReadOnlySpan<System.Object>))).C# 13: Added support for the overload resolution priority attribute (
OverloadResolutionPriority). Usages of the attribute and the corresponding priority can be found using the QL classSystemRuntimeCompilerServicesOverloadResolutionPriorityAttribute.C# 13: Added support for partial properties and indexers.
Golang¶
Models-as-data models using “Parameter”, “Parameter[n]” or “Parameter[n1..n2]” as the output now work correctly.
By implementing
ImplicitFieldReadNodeit is now possible to declare a dataflow node that reads any content (fields, array members, map keys and values). For example, this is appropriate for modelling a serialization method that flattens a potentially deep data structure into a string or byte array.The
Template.Execute[Template]methods of thetext/templatepackage now correctly convey taint from any nested fields to their result. This may produce more results from any taint-tracking query when thetext/templatepackage is in use.Added the rs cors library to the CorsMisconfiguration.ql query
Java/Kotlin¶
We now allow classes which don’t have any JAX-RS annotations to inherit JAX-RS annotations from superclasses or interfaces. This is not allowed in the JAX-RS specification, but some implementations, like Apache CXF, allow it. This may lead to more alerts being found.
Python¶
Additional data flow models for the builtin functions
map,filter,zip, andenumeratehave been added.
New Features¶
C/C++¶
A new predicate
getOffsetInClasswas added to theFieldclass, which computes the byte offset of a field relative to a givenClass.New classes
PreprocessorElifdefandPreprocessorElifndefwere introduced, which represents the C23/C++23#elifdefand#elifndefpreprocessor directives.A new class
TypeLibraryImportwas introduced, which represents the#importpreprocessor directive as used by the Microsoft Visual C++ for importing type libraries.