# 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}}
