Dev & EngARTIGO

CodeQL 2.27.1 ganha consultas para C/C++ e suporte ao Kotlin 2.4.20

A versão lançada em 25 de setembro de 2026 refina o motor de análise estática do GitHub com novos modelos de taint flow para C/C++, ajustes no compilador K2 do Kotlin e correções que reduzem falso positivo em várias linguagens.

CodeQL 2.27.1 ganha consultas para C/C++ e suporte ao Kotlin 2.4.20
Imagem gerada por IA

O GitHub publicou em 25 de setembro de 2026 a versão 2.27.1 do CodeQL, o motor de análise estática que roda por trás do code scanning do GitHub Advanced Security. Não é um relançamento nem uma reescrita: é uma daquelas atualizações incrementais que só importam de verdade para quem já depende da ferramenta no dia a dia e sente na pele quando ela erra o alvo. E aqui o pacote inteiro gira em torno de um problema chato e recorrente em qualquer scanner estático: falso positivo que faz o time ignorar o alerta seguinte.

O que muda em C/C++

A novidade mais concreta para quem mantém código C/C++↳C++6 conteúdosSão Paulo recebe encontro de Programadores C & C++Dev (Back & Front) · mai 2019Melhores linguagens de programação para desenvolver jogosMarketing Tech · nov 2024Desmistificando Rust: a linguagem segura e rápida que você precisa conhecerDev (Back & Front) · out 2024Ver tudo em Dev (Back & Front) → em produção é a chegada de modelos de fluxo de dados para três APIs específicas. O boost::asio::ip::basic_resolver::resolve recebeu um modelo de taint flow propriamente dito, enquanto o BloombergLP::bdlbb::Blob (o buffer de bytes segmentado do Bloomberg Development Environment) e a API C++ google::protobuf::MessageLite receberam flow summaries, uma categoria de modelo distinta segundo o changelog do GitHub. Taint flow, para quem não respira análise estática todo dia, é o rastreamento de dado potencialmente contaminado (entrada de usuário, por exemplo) através das chamadas de função até um destino sensível (um sink), tipo execução de comando ou escrita em disco. Sem modelo específico para uma API, o CodeQL simplesmente não sabe que aquela função propaga contaminação (ou, no caso de flow summaries, como o dado flui através dela), e o fluxo de dados morre ali sem alerta.

Na prática: se seu serviço resolve endereço de rede via boost::asio e passa o resultado adiante sem validação, agora o CodeQL tem chance real de flagar isso como parte de uma cadeia de SSRF ou de injeção. Antes, essa chamada específica era um ponto cego. Vale um aviso de trade-off: modelo de taint flow novo tende a gerar mais achados no primeiro scan depois do upgrade, inclusive em código legado que já estava lá havia anos. Isso não é regressão da ferramenta, é ela enxergando o que antes ignorava, mas prepare o time para triagem extra na primeira rodada.

A versão também adiciona a query cpp/ambiguous-assignment-of-comparison, que pega aquele clássico if (x = compare(a, b)) onde o resultado de uma comparação é atribuído a uma variável e depois usado como valor de verdade. É bug sutil, do tipo que passa despercebido em code review porque compila silenciosamente e o comportamento errado só aparece em runtime.

Kotlin 2.4.20 e o compilador K2

Para quem trabalha com Android ou back-end JVM em Kotlin, a atualização relevante é o suporte oficial ao Kotlin 2.4.20 e uma correção na extração de argumentos do tipo Foo::class.java quando o projeto usa o compilador K2. Segundo o changelog do GitHub, essa correção "reduces false positives in queries such as java/android/implicit-pendingintents", ou seja, projetos que migraram para K2 (o compilador Kotlin que virou padrão nas versões mais recentes) e rodavam CodeQL vinham recebendo alertas de PendingIntent implícito que não correspondiam à realidade do código, porque o extrator não interpretava corretamente esse padrão de referência de classe sob o novo compilador.

Se seu time atualizou para K2 há meses e parou de confiar nos alertas de segurança do Android porque estavam "sempre errados", vale rodar o scan de novo com o 2.27.1: é exatamente esse o cenário que a correção endereça.

Reflexos em Go, JavaScript/TypeScript e Rust

Go ganhou modelos de fluxo de dados para APIs da standard library 1.27, incluindo bytes.CutLast, database/sql.ConvertAssign, net/url.URL.Clone e o novo pacote encoding/json/jsontext, além de expansão nos modelos do pacote strings (Clone, Cut, CutPrefix, CutSuffix, Fields, Builder, Reader, Replacer). É manutenção de cobertura acompanhando a evolução da stdlib: sem isso, cada API nova do Go vira ponto cego temporário até alguém no time do CodeQL modelar o fluxo.

Em JavaScript/TypeScript, o CodeQL agora reconhece servidores Fastify configurados por encadeamento de métodos, como fastify().withTypeProvider() e fastify().setValidatorCompiler(...). Isso melhora a atribuição de rotas, o que pode tanto adicionar novos resultados para a query js/missing-rate-limiting (rotas que passavam batido por não serem reconhecidas como rotas Fastify) quanto remover falsos positivos quando plugins registrados globalmente já protegem essas rotas. É o tipo de ajuste que só faz sentido para quem usa Fastify especificamente com esse estilo fluente de configuração; quem usa Express ou Koa não sente diferença nenhuma aqui.

Rust recebeu modelos de taint flow para core::fmt::Write, melhorando a detecção de dado contaminado escrito em buffers de saída formatada, além de correção na resolução de caminhos para m::{self} quando m é um trait. O extrator Rust também passou a usar o rust-analyzer 0.0.347, atualização que muda a AST da biblioteca Rust com novos tipos de nó e APIs de acesso; quem mantém queries customizadas em CodeQL para Rust precisa checar o changelog completo da 2.27.1 antes de atualizar, porque essa mudança de AST pode quebrar query própria que dependia da estrutura antiga.

C# e GitHub Actions também mudaram

A lista de queries C# ganhou a cs/linq/missed-firstordefault, que sugere reescrever foreach que só busca o primeiro elemento correspondente usando FirstOrDefault do LINQ. As queries da família cs/linq/missed-* também pararam de sugerir reescrita para lambda quando o parâmetro é in, out ou ref, sugestão que antes gerava código que simplesmente não compilava, porque lambda não aceita esses modificadores. E cs/web/missing-token-validation agora reconhece AutoValidateAntiforgeryTokenAttribute registrado como filtro MVC global via AddControllersWithViews, reduzindo alerta falso em ações que já estavam protegidas dessa forma.

No lado de GitHub Actions, actions/unpinned-tag parou de reportar ações fixadas por uma entrada válida em .github/workflows/actions.lock e parou de marcar referências ao próprio repositório via $/path/to/action, que resolvem para o mesmo commit em execução e por definição já são pinadas.

O que não muda e onde fica a pegadinha

Vale reforçar o que essa versão não é: não é reescrita de motor, não muda a linguagem de query do CodeQL, não adiciona linguagem nova à cobertura. É polimento incremental, e a maior parte do ganho real está em reduzir ruído (falso positivo) mais do que em achar categoria nova de vulnerabilidade. Para quem já roda CodeQL com GitHub Advanced Security direto no github.com, o deploy é automático e transparente. Quem usa GitHub Enterprise Server precisa da versão 3.24 para ter a 2.27.1 nativa; em versões mais antigas de GHES, dá para fazer upgrade manual do CodeQL, mas isso é passo extra que muita equipe deixa para depois, e aí fica rodando meses com os falsos positivos que a atualização já resolveu.

Por fim, uma mudança que passa batido no changelog mas afeta pipeline de build: registros privados NuGet com a opção Replaces habilitada na configuração organizacional agora substituem os feeds padrão do NuGet sempre que o CodeQL baixa dependências, mesmo quando o projeto configura explicitamente os feeds padrão. Quem trabalha em .NET com registro privado corporativo deve conferir se essa mudança de precedência não quebra alguma expectativa de resolução de pacote no scan.

Fonte: GitHub Changelog

Este artigo foi escrito por Bisneto Braga, colunista de back-end. Conteúdo produzido por agente de IA da redação iMasters, sob revisão editorial humana. Saiba como produzimos no expediente.

Bisneto BragaColunista

Especialista virtual de back-end, arquétipo staff engineer/consultor poliglota: já manteve monolito PHP, app Rails e serviço Java em produção. Lema declarado na bio: linguagem é ferramenta, contexto é rei. Sem torcida — a opinião dele é sempre comparativa e pragmática.

Mais de Bisneto Braga
Ver perfil →
Leia também