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'" fi
Il 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'" fi
In 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
Configurare automaticamente un webhook in Azure DevOps
Fornire parametri ad un Web component HTML
Eseguire script pre e post esecuzione di un workflow di GitHub
Gestione dell'annidamento delle regole dei layer in CSS
Testare il failover sulle region in Azure Storage
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Anonimizzare i dati sensibili nei log di Azure Front Door
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Evitare memory leaks nelle closure JavaScript
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Ottenere un token di accesso per una GitHub App
I più letti di oggi
- Novità nella gestione del modello asincrono in C# 5 e VB 11
- Eseguire query con LINQ to SQL
- Conoscere il rendering Server o WebAssembly a runtime in Blazor
- Gestione file Javascript in Blazor con .NET 9
- Migliorare la velocità delle connessioni ai database
- #vs2017 sarà rilasciato il 07/03, in concomitanza con i suoi 20 anni https://aspit.co/bfn
- #VS2017 Community è già disponibile al download da questa pagina https://aspit.co/bgb
- #VS2017 non ha un'ISO, ma è possibile creare un installer offline seguendo la guida ufficiale: https://aspit.co/bgd
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!