
CVE-2025-53652: Análise do Git Parameter do Jenkins
Esta vulnerabilidade surge porque a entrada controlada pelo usuário, proveniente dos parâmetros de build do Jenkins, é injetada de forma insegura no comando Git checkout.
A entrada do usuário é fornecida como um parâmetro de build (ex.: gitParameters), que pode conter comandos shell maliciosos.
Este parâmetro é encapsulado em um GitParameterValue (estendendo StringParameterValue), cujo método buildEnvironment() o expõe como uma variável de ambiente no contexto do build, sem sanitização.
Durante o processo de checkout do SCM, o Jenkins carrega as variáveis de ambiente do build por meio de build.getEnvironment().
O nome do branch usado para o checkout (localBranchName) é obtido dessas variáveis de ambiente.
O nome do branch é então passado diretamente ao método CheckoutCommand.branch().
Por fim, CheckoutCommand.execute() invoca o comando Git CLI subjacente, que concatena o nome do branch sem validação ou escaping.
Isso permite a injeção de comandos, possibilitando que um atacante execute comandos shell arbitrários no host de build do Jenkins.
O método createValue que trata a entrada do usuário (por exemplo, do payload JSON da requisição HTTP POST), é aqui que o Jenkins aceita valores de parâmetros fornecidos pelo usuário via requisição (por exemplo, "selected": "master; rm -rf /").
A entrada é encapsulada em um GitParameterValue, que estende StringParameterValue, sem sanitização ou validação da entrada.
Isso significa que os dados brutos do usuário são aceitos como um parâmetro de build e armazenados como uma instância de ParameterValue.

A classe GitParameterValue estendendo StringParameterValue. GitParameterValue herda de StringParameterValue, mas não adiciona sanitização.
A cadeia de construtores significa que a entrada do usuário agora é armazenada em um objeto que será usado posteriormente pelo Jenkins para montar as variáveis de ambiente.
Isso propaga a entrada maliciosa para as variáveis de ambiente do build do Jenkins.
"
A classe StringParameterValue e seu método buildEnvironment. Este método é crucial — ele expõe o parâmetro como variáveis de ambiente no contexto do build ao fazer
"
env.put(name, value);
env.put(name.toUpperCase(Locale.ENGLISH), value);
Como o valor é uma entrada de usuário não sanitizada, isso permite que a entrada maliciosa entre nas variáveis de ambiente do Jenkins, tornando-a acessível a processos posteriores, como comandos Git.
O método _checkout no plugin GitSCM. Este método chama build.getEnvironment(listener), que coleta as variáveis de ambiente, incluindo a maliciosa definida anteriormente.
Ele usa essas variáveis para obter o nome do branch (via localBranchName), que é então passado ao CheckoutCommand.
A variável de ambiente do parâmetro malicioso flui diretamente para o processo de checkout.

A criação do CheckoutCommand e a definição do branch/ref com a entrada do usuário. O CheckoutCommand.branch(localBranchName) usa a variável de ambiente não sanitizada.
Como localBranchName veio de variáveis de ambiente controladas pelo usuário, ele injeta comandos arbitrários no checkout. Isso prepara o terreno para a injeção de comandos quando execute() é chamado.

O CheckoutCommand.execute() método que executa o comando Git CLI. Este é o passo final, em que a string de branch injetada é passada diretamente ao Git CLI do sistema sem escaping ou sanitização. Como resultado, o payload malicioso é executado como comandos shell, permitindo a execução remota de código no host do Jenkins.

Esta análise revela como o plugin Git Parameter do Jenkins, combinado com o plugin Git SCM, pode levar a uma vulnerabilidade crítica de injeção de comandos. Ao expor de forma insegura valores de parâmetros controlados pelo usuário como variáveis de ambiente e, posteriormente, passá-los diretamente para comandos Git CLI sem a sanitização adequada, atacantes podem executar comandos arbitrários no servidor de build do Jenkins.
Essa quebra na cadeia de confiança—do payload JSON malicioso inicial à execução final no shell—destaca a importância da validação rigorosa de entrada e do tratamento seguro de parâmetros de build em sistemas de integração contínua.
Usuários e administradores devem garantir que estejam executando versões atualizadas do Jenkins e de todos os plugins, e auditar cuidadosamente quaisquer parâmetros que influenciem comandos shell. Mitigações como sanitização de entrada, lista de permissões (whitelist) de branches autorizados ou isolamento dos ambientes de build podem reduzir o risco.
Compreender esse fluxo fornece a profissionais de segurança e desenvolvedores a visão necessária para detectar, prevenir e corrigir vulnerabilidades de injeção semelhantes no Jenkins ou em plataformas CI/CD comparáveis.