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
fiAssumiamo 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
# ...
fiIn 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
Gestione del system path nei workflow di GitHub
Nuova modale riconnessione Blazor
Lockfiles per le GitHub Actions
Come automatizzare il download dei report di billing da GitHub Enterprise
Integrare il Docker Model Runner in un workflow di GitHub
Utilizzare ExecuteUpdate per aggiornare colonne JSON in Entity Framework
Integrare un LLM in ASP.NET Core con Microsoft.Extensions.AI
Utilizzare le librerie native di .NET per comprimere uno o più file in formato ZIP
Dallo sviluppo locale ad Azure con .NET Aspire
Creare comandi nella dashboard .NET Aspire
Referenziare un package NuGet in una file based app .NET
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


