CodeQL 2.26.3 (2026-08-12)¶
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.26.3 runs a total of 497 security queries when configured with the Default suite (covering 170 CWE). The Extended suite enables an additional 131 queries (covering 32 more CWE).
CodeQL CLI¶
Bug Fixes¶
Fixed the pack upload format to comply with the OCI-image-manifest specification, by ensuring that all required fields are present/valid, and that no extraneous/non-compliant fields are included.
Fixed path canonicalization on Windows so that paths located on
substed drives are always resolved to their underlying target paths. Previously,substed drives were not handled consistently by the CodeQL CLI and the language-specific extractors.
Improvements¶
Commands that accept a
--ramoption now report a clear error when given a value that is far too large to be a sensible amount of memory in megabytes (for example, a number of bytes passed by mistake), instead of failing with a cryptic “is not an int” message.
Miscellaneous¶
Upgraded Jackson from 2.18.6 to 2.18.9.
Query Packs¶
Bug Fixes¶
GitHub Actions¶
The
actions/output-clobbering/highquery now provides messages tailored to the affected output channel and includes expanded documentation and recommendations.The
actions/cache-poisoning/poisonable-stepandactions/untrusted-checkout/criticalqueries now start paths at the expressions that control untrusted checkouts and link their alert messages to those expressions.Fixed a performance issue in the
actions/output-clobbering/highquery caused by using unescaped source-code input in a regular expression.
Minor Analysis Improvements¶
JavaScript/TypeScript¶
The
js/missing-rate-limitingquery now recognizes the@fastify/rate-limitpackage as a rate limiter.
GitHub Actions¶
The
actions/output-clobbering/highquery no longer reports simplejqpath filters when their output remains JSON-encoded. Raw-output modes, complex filters, and unrecognized options remain reportable.GitHub Actions queries now correctly classify the
scheduleevent when determining whether a workflow is externally triggerable.The
actions/envvar-injection/criticalquery now requires the untrusted source and privileged context to originate from the same trigger event. The environment variable injection queries also no longer treat pull request head labels as injection-capable because they cannot contain newlines.The
actions/cache-poisoning/code-injection,actions/cache-poisoning/direct-cache, andactions/cache-poisoning/poisonable-stepqueries now account for read-only cache access on low-trust triggers that run in the default branch scope. Results are retained for triggers that GitHub allows to write to that cache scope.
Query Metadata Changes¶
GitHub Actions¶
The name and alert message of the
actions/cache-poisoning/code-injectionquery have been reworded for clarity.
Language Libraries¶
Breaking Changes¶
GitHub Actions¶
The
codeql.actions.security.SelfHostedQuerymodule has been removed because runner labels do not reliably distinguish self-hosted runners from managed runners.
Major Analysis Improvements¶
JavaScript/TypeScript¶
It is now possible for custom models to refer to specific files in the codebase, using a package name of form
file:<path>. The model should describe the public exports of that file. This can be used to derive sources and sinks in code that imports the file, but note that sources and sinks will not generally be placed within the file itself. For example, a source model['file:lib/service.js', 'Member[getData].ReturnValue', 'remote']could identifyrequire('../lib/service').getData()as a source.
Minor Analysis Improvements¶
C/C++¶
Added flow source models for
RegQueryValueand related functions from thewinreg.hWindows header.
JavaScript/TypeScript¶
JavaScript security queries using the
responsethreat model now track promise-wrapped client response data into promise fulfillment values. This may improve results for queries such asjs/xsswhen response data is consumed through.then(...)chains.The route object returned by Vue Router’s
useRoute()Composition API is now recognized as a client-side remote flow source, covering itsquery,params,path,fullPath, andhashmembers. These members are additionally reported under the correspondingbrowser-url-query,browser-url-path, andbrowser-url-fragmentthreat models.Added flow models for Vue’s
ref,shallowRef,toRef,reactive, andcomputedComposition API helpers.Added support for treating declared
inputsproperties in Sails Action2 controller files as remote flow sources. This may improve results for security queries such asjs/path-injection.
Ruby¶
Removed library input to vendored gems from the set of taint sources. This should reduce false positives for
rb/polynomial-redos,rb/regex/badly-anchored-regexp,rb/unsafe-code-construction,rb/html-constructed-from-input, andrb/shell-command-constructed-from-inputwhenever vendoring is used.
GitHub Actions¶
GitHub Actions analysis now recognizes untrusted data in
github.event.merge_groupfor workflows triggered by themerge_groupevent.