La security è un tema importante per tutto il ciclo di vita del software e delle nostre infrastrutture. Tuttavia, ciò che tendiamo ad ignorare è che anche le pipeline ormai sono scritte come codice e, pertanto, anch'esse sono a tutti gli effetti vulnerabili e soggette a potenziali attacchi. In quanto tali, vanno protette.
Analizziamo il seguente step di esempio:
- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^ASPItalia ]]; then
echo "Il titolo della PR inizia per 'ASPItalia'"
else
echo "Il titolo della PR non inizia per 'ASPItalia'"
fiIl codice sembra piuttosto banale: viene messo in esecuzione uno step che crea uno script bash da eseguire in linea. Come primo passaggio di questo script, viene assegnato alla variabile title il valore della proprietà title della pull request che ha scatenato l'esecuzione del workflow. Dopodichè, viene fatto un controllo per capire se la stringa inizia o no con la parola 'ASPItalia'.
Sebbene questo codice possa sembrare innocuo, non lo è affatto. Infatti, la sintassi "${{ }}", unita al fatto che lo script viene eseguito in linea, fa sì che il valore venga sostituito prima dell'esecuzione dello script, rendendoci vulnerabili a shell command injection. Se creiamo una PR con il titolo "a"; ls $GITHUB_WORKSPACE"", stiamo di fatto rimpiazzando il codice di prima con questo:
- name: Check PR title
run: |
title=""a"; ls $GITHUB_WORKSPACE""In questo caso non viene eseguito niente di malevolo in quanto viene solo stampata la lista dei file disponibili nella root del repository, ma è evidente che può essere sfruttato per altri scopi. Se questo codice fosse eseguito in un self-hosted agent/runner, potremmo eliminare tutti i file del file-system o accedere a dati sensibili e farne una copia in una location remota.
Per fortuna la risoluzione è piuttosto semplice e, in questo caso, ci sono due valide opzioni. Seguendo la prima strada, possiamo creare una composite action, mentre l'alternativa è di passare il valore come variabile d'ambiente:
- name: Check PR title
env:
TITLE: ${{ github.event.pull_request.title }}
run: |
if [[ "$TITLE" =~ ^ASPItalia ]]; then
echo "Il titolo della PR inizia per 'ASPItalia'"
fiIn questo modo la valutazione del valore verrà fatto in-memory e assegnato alla variabile correttamente (di fatto, stiamo eliminando i doppi apici).
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Esporre un server MCP esistente con Azure API Management
Configurare OpenAI in .NET Aspire
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Ospitare n8n su Azure App Service
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Ridurre il reflow ottimizzando il CSS
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Ricerca delle GitHub issue tramite operatori logici
Montare Azure Blob Storage su Linux con BlobFuse2
Gestire il routing HTTP in Azure Container App
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Creare comandi nella dashboard .NET Aspire
I più letti di oggi
- Microsoft Mobility Conference, 12 Luglio a Roma
- Ci vediamo a Milano per i nostri prossimi eventi! ## Global Azure 2026 - 16 aprile ## Una giornata dedicata alle ultime novità di Azure, pensata per architetti, sviluppatori e professionisti IT che vogliono rimanere aggiornati sulle migliori pratiche cloud di Microsoft. https://aspit.co/globalazure-26 ## Future Dev Day - 27 maggio ##Una giornata dedicata al futuro dello sviluppo software con AI, agenti intelligenti e tecnologie emergenti, pensata per architetti, sviluppatori e professionisti IT che vogliono scoprire come l'intelligenza artificiale sta trasformando il modo di sviluppare applicazioni. https://aspit.co/futuredev-26 Vi aspettiamo!
- Blazor Conference 2021 - Online
- devConf 2022 - Online
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- Speciale ASP.NET Charting: grafici per tutti i gusti!




