mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
25 KiB
25 KiB
4.2.5
No user-facing changes.
4.2.4
No user-facing changes.
4.2.3
Minor Analysis Improvements
- Local source models for APIs reading from databases have been added for
github.com/gogf/gf/database/gdbandgithub.com/uptrace/bun.
4.2.2
Minor Analysis Improvements
- We no longer track taint into a
sync.Mapvia the key of a key-value pair, since we do not model any way in which keys can be read from async.Map. databasesource models have been added for v1 and v2 of thegithub.com/couchbase/gocbpackage.- Added
databasesource models for thegithub.com/Masterminds/squirrelORM package.
4.2.1
No user-facing changes.
4.2.0
Deprecated APIs
- The member predicate
hasLocationInfohas been deprecated on the following classes:BasicBlock,Callable,Content,ContentSet,ControlFlow::Node,DataFlowCallable,DataFlow::Node,Entity,GVN,HtmlTemplate::TemplateStmt,IR:WriteTarget,SourceSinkInterpretationInput::SourceOrSinkElement,SourceSinkInterpretationInput::InterpretNode,SsaVariable,SsaDefinition,SsaWithFields,StringOps::ConcatenationElement,Type, andVariableWithFields. UsegetLocation()instead.
Minor Analysis Improvements
- The location info for the following classes has been changed slightly to match a location that is in the database:
BasicBlock,ControlFlow::EntryNode,ControlFlow::ExitNode,ControlFlow::ConditionGuardNode,IR::ImplicitLiteralElementIndexInstruction,IR::EvalImplicitTrueInstruction,SsaImplicitDefinition,SsaPhiNode. - Added
databasesource models for thegithub.com/rqlite/gorqlitepackage. - Added
databasesource models for database methods from thego.mongodb.org/mongo-driver/mongopackage.
4.1.0
Deprecated APIs
- The class
NamedTypehas been deprecated. Use the new classDefinedTypeinstead. This better matches the terminology used in the Go language specification, which was changed in Go 1.9. - The member predicate
getNamedTypeonGoMicro::ServiceInterfaceTypehas been deprecated. Use the new member predicategetDefinedTypeinstead. - The member predicate
getNamedTypeonTwirp::ServiceInterfaceTypehas been deprecated. Use the new member predicategetDefinedTypeinstead.
Major Analysis Improvements
- Go 1.24 is now supported. This includes the new language feature of generic type aliases.
Minor Analysis Improvements
- Taint models have been added for the
weakpackage, which was added in Go 1.24. - Taint models have been added for the interfaces
TextAppenderandBinaryAppenderin theencodingpackage, which were added in Go 1.24.
4.0.0
Breaking Changes
- Deleted the deprecated
describeBitSizepredicate fromIncorrectIntegerConversionLib.qll
Minor Analysis Improvements
- 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
3.0.2
Minor Analysis Improvements
databaselocal source models have been added for the Beego ORM package.databaselocal source models have been added for thegithub.com/jmoiron/sqlxpackage.- Added
databasesource models for database methods from thegorm.io/gormpackage. databaselocal source models have been added for thedatabase/sqlanddatabase/sql/driverpackages.
3.0.1
Minor Analysis Improvements
- Added a
commandargslocal source model for theos.Argsvariable.
3.0.0
Breaking Changes
- Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API.
Minor Analysis Improvements
- A call to a method whose name starts with "Debug", "Error", "Fatal", "Info", "Log", "Output", "Panic", "Print", "Trace", "Warn" or "With" defined on an interface whose name ends in "logger" or "Logger" is now considered a LoggerCall. In particular, it is a sink for
go/clear-text-loggingandgo/log-injection. This may lead to some more alerts in those queries.
Bug Fixes
- Fixed a bug which meant that promoted fields and methods were missing when the embedded parent was not promoted due to a name clash.
2.1.3
Minor Analysis Improvements
- The
subtypescolumn has been set to true in all models-as-data models except some tests. This means that existing models will apply in some cases where they didn't before, which may lead to more alerts.
Bug Fixes
- The behaviour of the
subtypescolumn in models-as-data now matches other languages more closely. - Fixed a bug which meant that some qualified names for promoted methods were not being recognised in some very specific circumstances.
2.1.2
Minor Analysis Improvements
- The AST viewer now shows type parameter declarations in the correct place in the AST.
2.1.1
Minor Analysis Improvements
- Added member predicates
StructTag.hasOwnFieldWithTagandField.getTag, which enable CodeQL queries to examine struct field tags. - Added member predicate
InterfaceType.hasPrivateMethodWithQualifiedName, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. - Local source models with the
stdinsource kind have been added for the variableos.Stdinand the functionsfmt.Scan,fmt.Scanfandfmt.Scanln. You can optionally include 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.
2.1.0
Deprecated APIs
- The class
ThreatModelFlowSourcehas been renamed toActiveThreatModelSourceto more clearly reflect it only contains the currently active threat model sources.ThreatModelFlowSourcehas been marked as deprecated.
Minor Analysis Improvements
- A method in the method set of an embedded field of a struct should not be promoted to the method set of the struct if the struct has a method with the same name. This was not being enforced, which meant that there were two methods with the same qualified name, and models were sometimes being applied when they shouldn't have been. This has now been fixed.
2.0.0
Breaking Changes
- Deleted many deprecated taint-tracking configurations based on
TaintTracking::Configuration. - Deleted the deprecated
explorationLimitpredicate fromDataFlow::Configuration, useFlowExploration<explorationLimit>instead.
Minor Analysis Improvements
- When a function or type has more than one anonymous type parameters, they were mistakenly being treated as the same type parameter. This has now been fixed.
- Local source models for reading and parsing environment variables have been added for the following libraries:
- os
- syscall
- github.com/caarlos0/env
- github.com/gobuffalo/envy
- github.com/hashicorp/go-envparse
- github.com/joho/godotenv
- github.com/kelseyhightower/envconfig
- Local source models have been added for the APIs which open files in the
io/fs,io/ioutilandospackages in the Go standard library. You can optionally include 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.
Bug Fixes
- Golang vendor directories not at the root of a repository are now correctly excluded from the baseline Go file count. This means code coverage information will be more accurate.
1.2.0
Major Analysis Improvements
- Go 1.23 is now supported.
1.1.5
Bug Fixes
- Fixed an issue where
io/ioutil.WriteFile's non-path arguments incorrectly generatedgo/path-injectionalerts when untrusted data was written to a file, or controlled the file's mode.
1.1.4
No user-facing changes.
1.1.3
Minor Analysis Improvements
- There was a bug which meant that the built-in function
clearwas considered as a sanitizer in some cases when it shouldn't have been. This has now been fixed, which may lead to more alerts.
1.1.2
Minor Analysis Improvements
- DataFlow queries which previously used
RemoteFlowSourceto define their sources have been modified to instead useThreatModelFlowSource. This means these queries will now respect threat model configurations. The default threat model configuration is equivalent toRemoteFlowSource, so there should be no change in results for users using the default. - Added the
ThreatModelFlowSourceclass toFlowSources.qll. TheThreatModelFlowSourceclass can be used to include sources which match the current threat model configuration. This is the first step in supporting threat modeling for Go.
Bug Fixes
- Fixed dataflow via global variables other than via a direct write: for example, via a side-effect on a global, such as
io.copy(SomeGlobal, ...)or via assignment to a field or array or slice cell of a global. This means that any data-flow query may return more results where global variables are involved.
1.1.1
No user-facing changes.
1.1.0
New Features
- When writing models-as-data models, the receiver is now referred to as
Argument[receiver]rather thanArgument[-1]. - Neutral models are now supported. They have no effect except that a manual neutral summary model will stop a generated summary model from having any effect.
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.
Minor Analysis Improvements
- A bug has been fixed which meant that the query
go/incorrect-integer-conversiondid not consider type assertions and type switches which use a defined type whose underlying type is an integer type. This may lead to fewer false positive alerts. - A bug has been fixed which meant flow was not followed through some ranged for loops. This may lead to more alerts being found.
- Added value flow models for the built-in functions
append,copy,maxandminusing Models-as-Data. Removed the old-style models formaxandmin.
0.8.1
Minor Analysis Improvements
- Fixed a bug that stopped built-in functions from being referenced using the predicate
hasQualifiedNamebecause technically they do not belong to any package. Now you can use the empty string as the package, e.g.f.hasQualifiedName("", "len"). - Fixed a bug that stopped data flow models for built-in functions from having any effect because the package "" was not parsed correctly.
- Fixed a bug that stopped data flow from being followed through variadic arguments to built-in functions or to functions called using a variable.
0.8.0
Breaking Changes
- Deleted the deprecated
CsvRemoteSourcealias. UseMaDRemoteSourceinstead.
Deprecated APIs
- To make Go consistent with other language libraries, the
UntrustedFlowSourcename has been deprecated throughout. UseRemoteFlowSourceinstead, which replaces it. - Where modules have classes named
UntrustedFlowAsSource, these are also deprecated and theSourceclass in the same module or theRemoteFlowSourceclass should be used instead.
0.7.14
Minor Analysis Improvements
- Data flow through variables declared in statements of the form
x := y.(type)at the beginning of type switches has been fixed, which may result in more alerts. - Added strings.ReplaceAll, http.ParseMultipartForm sanitizers and remove path sanitizer.
0.7.13
Minor Analysis Improvements
- The
CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFOoption, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. - Added dataflow sources for the package
gopkg.in/macaron.v1.
0.7.12
No user-facing changes.
0.7.11
No user-facing changes.
0.7.10
Major Analysis Improvements
- We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed.
- Go 1.22 has been included in the range of supported Go versions.
Bug Fixes
- Fixed dataflow out of a
mapusing arangestatement.
0.7.9
No user-facing changes.
0.7.8
No user-facing changes.
0.7.7
Deprecated APIs
- The class
Fmt::AppenderOrSprinterof theFmt.qllmodule has been deprecated. Use the newFmt::AppenderOrSprinterFuncclass instead. Its taint flow features have been migrated to models-as-data.
Minor Analysis Improvements
- Deleted many deprecated predicates and classes with uppercase
TLD,HTTP,SQL,URLetc. in their names. Use the PascalCased versions instead. - Deleted the deprecated and unused
Sourceclass from theSharedXssmodule ofXss.qll - Support for flow sources in AWS Lambda function handlers has been added.
- Support for the fasthttp framework has been added.
0.7.6
Minor Analysis Improvements
- The diagnostic query
go/diagnostics/successfully-extracted-files, and therefore the Code Scanning UI measure of scanned Go files, now considers any Go file seen during extraction, even one with some errors, to be extracted / scanned. - The XPath library, which is used for the XPath injection query (
go/xml/xpath-injection), now includes support forParsersinks from the libxml2 package. CallNode::getACalleeand related predicates now recognise more callees accessed via a function variable, in particular when the callee is stored into a global variable or is captured by an anonymous function. This may lead to new alerts where data-flow into such a callee is relevant.
0.7.5
No user-facing changes.
0.7.4
Bug Fixes
- A bug has been fixed that meant that value flow through a slice expression was not tracked correctly. Taint flow was tracked correctly.
0.7.3
Minor Analysis Improvements
- Added the gin-contrib/cors library to the experimental query "CORS misconfiguration" (
go/cors-misconfiguration).
Bug Fixes
- A bug has been fixed that meant that value flow through an array was not tracked correctly in some circumstances. Taint flow was tracked correctly.
0.7.2
Minor Analysis Improvements
- Added Request.Cookie to reflected XSS sanitizers.
Bug Fixes
- Fixed a bug where data flow nodes in files that are not in the project being analyzed (such as libraries) and are not contained within a function were not given an enclosing
Callable. Note that for nodes that are not contained within a function, the enclosing callable is considered to be the file itself. This may cause some minor changes to results.
0.7.1
Minor Analysis Improvements
- Deleted the deprecated
isBarrierGuardpredicate from the dataflow library and its uses, useisBarrierand theBarrierGuardmodule instead. - Support has been added for file system access sinks in the following libraries: net/http, Afero, beego, Echo, Fiber, Gin, Iris.
- Added
GoKit.qlltogo.qllenabling the GoKit framework by default
0.7.0
Minor Analysis Improvements
- Added Numeric and Boolean types to SQL injection sanitzers.
0.6.5
No user-facing changes.
0.6.4
Minor Analysis Improvements
- Added http.Error to XSS sanitzers.
0.6.3
No user-facing changes.
0.6.2
Minor Analysis Improvements
- Logrus'
WithContextmethods are no longer treated as if they output the values stored in that context to a log message.
0.6.1
New Features
- The
DataFlow::StateConfigSigsignature module has gained default implementations forisBarrier/2andisAdditionalFlowStep/4. Hence it is no longer needed to providenone()implementations of these predicates if they are not needed.
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. - Parameter nodes now exist for unused parameters as well as used parameters.
- Add support for v4 of the Go Micro framework.
- Support for the Bun framework has been added.
- Support for gqlgen has been added.
- Support for the go-pg framework has been improved.
0.6.0
Deprecated APIs
- The
LogInjection::Configurationtaint flow configuration class has been deprecated. Use theLogInjection::Flowmodule instead.
Minor Analysis Improvements
- When a result of path query flows through a function modeled using
DataFlow::FunctionModelorTaintTracking::FunctionModel, the path now includes nodes corresponding to the input and output to the function. This brings it in line with functions modeled using Models-as-Data.
0.5.4
No user-facing changes.
0.5.3
No user-facing changes.
0.5.2
Minor Analysis Improvements
- Fixed data flow through variadic function parameters. The arguments corresponding to a variadic parameter are no longer returned by
CallNode.getArgument(int i)andCallNode.getAnArgument(), and hence aren'tArgumentNodes. They now have one result, which is anImplicitVarargsSlicenode. For example, a callf(a, b, c)to a functionf(T...)is treated likef([]T{a, b, c}). The old behaviour is preserved byCallNode.getSyntacticArgument(int i)andCallNode.getASyntacticArgument().CallExpr.getArgument(int i)andCallExpr.getAnArgument()are unchanged, and will still have three results in the example given.
0.5.1
Minor Analysis Improvements
- Taking a slice is now considered a sanitizer for
SafeUrlFlow.
0.5.0
Deprecated APIs
- 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.
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::hasFlowToExprwere accidentally exposed in a single version.
0.4.6
No user-facing changes.
0.4.5
New Features
- Added support for merging two
PathGraphs via disjoint union to allow results from multiple data flow computations in a singlepath-problemquery.
Major Analysis Improvements
- 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.
0.4.4
No user-facing changes.
0.4.3
New Features
- Go 1.20 is now supported. The extractor now functions as expected when Go 1.20 is installed; the definition of
implementsComparablehas been updated according to Go 1.20's new, more-liberal rules; and taint flow models have been added for relevant, new standard-library functions.
Minor Analysis Improvements
- Support for the Twirp framework has been added.
0.4.2
No user-facing changes.
0.4.1
No user-facing changes.
0.4.0
Breaking Changes
- The signature of
allowImplicitReadonDataFlow::ConfigurationandTaintTracking::Configurationhas changed fromallowImplicitRead(DataFlow::Node node, DataFlow::Content c)toallowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c).
Deprecated APIs
- The
BarrierGuardclass has been deprecated. Such barriers and sanitizers can now instead be created using the newBarrierGuardparameterized module.
Minor Analysis Improvements
- The predicate
getNumParameteronFuncTypeExprhas been changed to actually give the number of parameters. It previously gave the number of parameter declarations.getNumParameterDeclhas been introduced to preserve this functionality. - The definition of
mayHaveSideEffectsforReturnStmtwas incorrect when more than one expression was being returned. Such return statements were effectively considered to never have side effects. This has now been fixed. In rare circumstancesglobalValueNumbermay have incorrectly treated two values as the same when they were in fact distinct. - Queries that care about SQL, such as
go/sql-injection, now recognise SQL-consuming functions belonging to thegorqliteandGoFramepackages. rsynchas been added to the list of commands which may evaluate its parameters as a shell command.
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.6
No user-facing changes.
0.3.5
No user-facing changes.
0.3.4
No user-facing changes.
0.3.3
No user-facing changes.
0.3.2
No user-facing changes.
0.3.1
Minor Analysis Improvements
- Added support for
BeegoInput.RequestBodyas a source of untrusted data.
0.3.0
Deprecated APIs
- Some classes/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.
0.2.5
0.2.4
Minor Analysis Improvements
- Go 1.19 is now supported, including adding new taint propagation steps for new standard-library functions introduced in this release.
- Most deprecated predicates/classes/modules that have been deprecated for over a year have been deleted.
- Fixed data-flow to captured variable references.
- We now assume that if a channel-typed field is only referred to twice in the user codebase, once in a send operation and once in a receive, then data flows from the send to the receive statement. This enables finding some cross-goroutine flow.
0.2.3
0.2.2
0.2.1
0.2.0
Deprecated APIs
- The
BarrierGuardclass has been deprecated. Such barriers and sanitizers can now instead be created using the newBarrierGuardparameterized module.
0.1.4
0.1.3
0.1.2
New Features
- Go 1.18 generics are now extracted and can be explored using the new CodeQL classes
TypeParamDecl,GenericFunctionInstantiationExpr,GenericTypeInstantiationExpr,TypeSetTerm, andTypeSetLiteralType, as well as using new predicates defined on the existingInterfaceType. Class- and predicate-level documentation can be found in the Go CodeQL library reference.
0.1.1
Minor Analysis Improvements
- The method predicate
getACalleeIncludingExternalsonDataFlow::CallNodeand the functionviableCallableinDataFlowDispatchnow also work for calls to functions via a variable, where the function can be determined using local flow.
0.1.0
Minor Analysis Improvements
- Fixed a bug where dataflow steps were ignored if both ends were inside the initialiser routine of a file-level variable.
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
Deprecated APIs
- The
codeql/go-upgradesCodeQL pack has been removed. All database upgrade scripts have been merged into thecodeql/go-allCodeQL pack.
Bug Fixes
Function's predicategetACallnow returns more results in some situations. It now always returns callers that may call a method indirectly via an interface method that it implements. Previously this only happened if the method was in the source code being analysed.