Files
hacktricks-cloud/src/pentesting-ci-cd/travisci-security/README.md

66 lines
3.3 KiB
Markdown

# Sicurezza di TravisCI
{{#include ../../banners/hacktricks-training.md}}
## Cos'è TravisCI
**Travis CI** è un servizio di **integrazione continua** **hosted** o on **premises** utilizzato per costruire e testare progetti software ospitati su diverse **piattaforme git**.
{{#ref}}
basic-travisci-information.md
{{#endref}}
## Attacchi
### Attivatori
Per lanciare un attacco, è necessario prima sapere come attivare una build. Per impostazione predefinita, TravisCI **attiverà una build su push e pull request**:
![](<../../images/image (145).png>)
#### Cron Jobs
Se hai accesso all'applicazione web, puoi **impostare crons per eseguire la build**, questo potrebbe essere utile per la persistenza o per attivare una build:
![](<../../images/image (243).png>)
> [!NOTE]
> Sembra che non sia possibile impostare crons all'interno del `.travis.yml` secondo [questo](https://github.com/travis-ci/travis-ci/issues/9162).
### PR di terze parti
TravisCI per impostazione predefinita disabilita la condivisione delle variabili d'ambiente con le PR provenienti da terze parti, ma qualcuno potrebbe abilitarlo e poi potresti creare PR per il repo ed esfiltrare i segreti:
![](<../../images/image (208).png>)
### Dumping dei segreti
Come spiegato nella pagina [**informazioni di base**](basic-travisci-information.md), ci sono 2 tipi di segreti. I segreti delle **variabili d'ambiente** (che sono elencati nella pagina web) e i **segreti crittografati personalizzati**, che sono memorizzati all'interno del file `.travis.yml` come base64 (nota che entrambi, essendo memorizzati in modo crittografato, finiranno come variabili d'ambiente nelle macchine finali).
- Per **enumerare i segreti** configurati come **variabili d'ambiente**, vai alle **impostazioni** del **progetto** e controlla l'elenco. Tuttavia, nota che tutte le variabili d'ambiente del progetto impostate qui appariranno quando attivi una build.
- Per enumerare i **segreti crittografati personalizzati**, il miglior modo è **controllare il file `.travis.yml`**.
- Per **enumerare i file crittografati**, puoi cercare file **`.enc`** nel repo, per righe simili a `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` nel file di configurazione, o per **iv e chiavi crittografate** nelle **variabili d'ambiente** come:
![](<../../images/image (81).png>)
### TODO:
- Esempio di build con reverse shell in esecuzione su Windows/Mac/Linux
- Esempio di build che esfiltra l'env codificato in base64 nei log
### TravisCI Enterprise
Se un attaccante si trova in un ambiente che utilizza **TravisCI enterprise** (maggiori informazioni su cosa sia nella [**informazioni di base**](basic-travisci-information.md#travisci-enterprise)), sarà in grado di **attivare build nel Worker.** Questo significa che un attaccante sarà in grado di muoversi lateralmente verso quel server da cui potrebbe essere in grado di:
- scappare verso l'host?
- compromettere kubernetes?
- compromettere altre macchine in esecuzione nella stessa rete?
- compromettere nuove credenziali cloud?
## Riferimenti
- [https://docs.travis-ci.com/user/encrypting-files/](https://docs.travis-ci.com/user/encrypting-files/)
- [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security)
{{#include ../../banners/hacktricks-training.md}}