Le GitHub Actions, pur essendo uno strumento potente per l'automazione dei flussi di lavoro, possono essere soggette a vulnerabilità di sicurezza come l'injection di script. Questo accade quando un attore malevolo riesce a inserire codice all'interno delle variabili o dei comandi eseguiti dalle Actions, che poi, una volta eseguito, potenzialmente causa danni ci espone dati e file sensibili. Pertanto, è fondamentale seguire le migliori pratiche di sicurezza quando si lavora con le GitHub Actions.
Vediamo un esempio concreto di una GitHub Action:
- name: Check PR title run: | title="${{ github.event.pull_request.title }}" if [[ $title =~ ^aspitalia ]]; then echo "PR title starts with 'aspitalia'" exit 0 else echo "PR title did not start with 'aspitalia'" exit 1 fi
Assumiamo che, in questo caso, la GitHub Action venga eseguita quando viene aperta una pull request, poiché ne dobbiamo verificare le sue proprietà. Il suo scopo, infatti, è quello di verificare che il titolo della pull request in oggetto inizi con la parola "aspitalia". Se così non fosse, la GitHub Action terminerebbe la sua esecuzione con un errore.
Tuttavia, nonostante questo esempio sia molto semplice, ci espone ad un livello di rischio molto elevato. Infatti, creando una PR con il seguente titolo:

Ci andrà a sostituire il valore di:
title="${{ github.event.pull_request.title }}"
in quest'altro:
title="a"; ls $GITHUB_WORKSPACE"
Che, sebbene farà eseguire la Action nella sua valutazione - anche se con un titolo differente -, di fatto ha esposto dei dati al chiamante del workflow, che può quindi leggere dai log informazioni sensibili. Anche in questo caso l'esempio è molto semplice perché andiamo solamente a stampare un elenco di file, ma nulla ci vieta di fare injection di un qualsiasi script.
Questo succede perché lo script viene eseguito su un file temporaneo e, prima che questo venga creato, la variabile viene valutata. Tuttavia, la remediation a questo problema è molto semplice e ci richiede solamente il passaggio della variabile come variabile d'ambiente:
- name: Check PR title env: TITLE: ${{ github.event.pull_request.title }} run: | if [[ "$TITLE" =~ ^aspitalia ]]; then echo "PR title starts with 'aspitalia'" exit 0 # ... fi
In questo scenario, infatti, lo script viene scritto temporaneamente nell'agent mantenendo TITLE come placeholder e verrà rimpiazzato al momento dell'esecuzione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Cancellare una run di un workflow di GitHub
Utilizzare WhenEach per processare i risultati di una lista di task
Utilizzare Copilot con Azure Cosmos DB
Triggerare una pipeline su un altro repository di Azure DevOps
Anonimizzare i dati sensibili nei log di Azure Front Door
Utilizzare Azure AI Studio per testare i modelli AI
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Generare velocemente pagine CRUD in Blazor con QuickGrid
Disabilitare automaticamente un workflow di GitHub (parte 2)
Applicare un filtro per recuperare alcune issue di GitHub
Gestione file Javascript in Blazor con .NET 9