Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/pl4tyz/cve-2025-53652-jenkins-git-parameter-analysis
Analisi delle VulnerabilitàAnalisi del CodiceExploitDevSecOpsCommand and ControlApprendimento e Formazione
GitHubpl4tyz/cve-2025-53652-jenkins-git-parameter-analysis

CVE-2025-53652-Jenkins-Git-Parameter-Analysis

CVE-2025-53652: Analisi di Git Parameter di Jenkins

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
231 anno faNon ancora revisionato

CVE-2025-53652: Vulnerabilità di input non convalidato nel plugin Jenkins Git Parameter.

Riepilogo

Questa vulnerabilità nasce perché l'input controllato dall'utente nei parametri di build di Jenkins viene iniettato in modo non sicuro nel comando Git checkout.

L'input dell'utente viene fornito come parametro di build (ad es., gitParameters), che può contenere comandi shell dannosi.

Questo parametro viene incapsulato in un GitParameterValue (che estende StringParameterValue), il cui metodo buildEnvironment() lo espone come variabile d'ambiente nel contesto di build senza sanificazione.

Durante il processo di checkout SCM, Jenkins carica le variabili d'ambiente di build tramite build.getEnvironment().

Il nome del branch utilizzato per il checkout (localBranchName) viene ottenuto da queste variabili d'ambiente.

Il nome del branch viene quindi passato direttamente al metodo CheckoutCommand.branch().

Infine, CheckoutCommand.execute() invoca il comando Git CLI sottostante, che concatena il nome del branch senza validazione o escaping.

Ciò consente l'iniezione di comandi, permettendo a un attaccante di eseguire comandi shell arbitrari sull'host di build di Jenkins.

Analisi

  1. Il metodo createValue che gestisce l'input dell'utente (ad es., dal payload JSON HTTP POST). È qui che Jenkins accetta i valori dei parametri forniti dall'utente tramite la richiesta (ad esempio, "selected": "master; rm -rf /"). L'input viene incapsulato in un GitParameterValue, che estende StringParameterValue, senza sanificazione o validazione dell'input. Ciò significa che i dati grezzi dell'utente vengono accettati come parametro di build e memorizzati come istanza di ParameterValue. createValue.png

  2. La classe GitParameterValue che estende StringParameterValue: GitParameterValue eredita da StringParameterValue ma non aggiunge alcuna sanificazione. La catena di costruttori fa sì che l'input dell'utente venga ora memorizzato in un oggetto che verrà successivamente utilizzato da Jenkins per costruire le variabili d'ambiente. Questo propaga input dannosi nelle variabili d'ambiente di build di Jenkins. gitParameterValue.png"

  3. La classe StringParameterValue e il suo metodo buildEnvironment: questo metodo è cruciale — espone il parametro come variabili d'ambiente nel contesto di build eseguendo stringParameter.png"

root@kitploit:~
env.put(name, value);
env.put(name.toUpperCase(Locale.ENGLISH), value);

Poiché il valore è un input utente non sanificato, consente a input dannosi di entrare nelle variabili d'ambiente di Jenkins, rendendoli accessibili a processi successivi come i comandi Git.

  1. Il metodo _checkout nel plugin GitSCM: questo metodo chiama build.getEnvironment(listener), che raccoglie le variabili d'ambiente, inclusa quella dannosa impostata in precedenza. Utilizza queste variabili per ottenere il nome del branch (tramite localBranchName), che viene poi passato al CheckoutCommand. La variabile d'ambiente del parametro dannoso fluisce direttamente nel processo di checkout. checkout.png

  2. La creazione del CheckoutCommand e l'impostazione del branch/ref con l'input dell'utente: CheckoutCommand.branch(localBranchName) utilizza la variabile d'ambiente non sanificata. Poiché localBranchName proviene da variabili d'ambiente controllate dall'utente, inietta comandi arbitrari nel checkout. Questo prepara il terreno per l'iniezione di comandi quando viene chiamato execute(). checkoutCommand.png

  3. Il metodo che esegue il comando Git CLI: questo è il passaggio finale in cui la stringa del branch iniettata viene passata direttamente alla Git CLI di sistema senza escaping o sanificazione. Di conseguenza, il payload dannoso viene eseguito come comandi shell, consentendo l'esecuzione remota di codice sull'host Jenkins.

Conclusione

Questa analisi rivela come il plugin Jenkins Git Parameter, combinato con il plugin Git SCM, possa portare a una vulnerabilità critica di iniezione di comandi. Esponendo in modo non sicuro i valori dei parametri controllati dall'utente come variabili d'ambiente e passandoli successivamente direttamente ai comandi Git CLI senza una corretta sanificazione, gli attaccanti possono eseguire comandi arbitrari sul server di build Jenkins.

Questa rottura della catena di fiducia — dal payload JSON dannoso iniziale fino all'esecuzione finale nella shell — evidenzia l'importanza di una rigorosa validazione degli input e di una gestione sicura dei parametri di build nei sistemi di integrazione continua.

Utenti e amministratori dovrebbero assicurarsi di eseguire versioni aggiornate di Jenkins e di tutti i plugin, e verificare attentamente qualsiasi parametro che influenzi i comandi shell. Mitigazioni come la sanificazione degli input, la whitelist dei branch consentiti o l'isolamento degli ambienti di build possono ridurre il rischio.

Comprendere questo flusso fornisce a professionisti della sicurezza e sviluppatori le conoscenze necessarie per rilevare, prevenire e correggere vulnerabilità di iniezione simili in Jenkins o in piattaforme CI/CD comparabili.

Scarica lo strumento
CheckoutCommand.execute()
execute.png