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
Generare la software bill of material (SBOM) in GitHub
Configurare e gestire sidecar container in Azure App Service
Gestione file Javascript in Blazor con .NET 9
Ottenere un token di accesso per una GitHub App
Managed deployment strategy in Azure DevOps
Creare una libreria CSS universale: Cards
Estrarre dati randomici da una lista di oggetti in C#
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Proteggere le risorse Azure con private link e private endpoints
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Triggerare una pipeline su un altro repository di Azure DevOps
Combinare Container Queries e Media Queries