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

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

View File

@@ -4,7 +4,7 @@
## Struttura di Base
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**.
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 possedere solo **un'organizzazione e nessun enterprise**.
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**.
@@ -16,20 +16,20 @@ E infine, **i repository possono avere meccanismi di protezione speciali**.
### Ruoli di 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**.
- **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**.
### Ruoli di Organizzazione
In un'organizzazione, gli utenti possono avere diversi ruoli:
- **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, 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.
- **Proprietari dell'Organizzazione**: I proprietari dell'organizzazione hanno **accesso amministrativo completo alla tua organizzazione**. Questo ruolo dovrebbe essere limitato, ma non a 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, fornisce a ogni membro del team i permessi per **gestire avvisi e impostazioni di sicurezza nella tua organizzazione, così come 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.
- **Manager delle App Github**: Per consentire ad utenti aggiuntivi 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.
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)
@@ -124,7 +124,7 @@ Alcuni consigli di sicurezza:
- 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 aspettarti che l'App GitHub conosca e faccia tutto ciò che un utente può fare.
- **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)."
@@ -142,13 +142,13 @@ Le azioni Git consentono di automatizzare l'**esecuzione di codice quando si ver
In _https://github.com/organizations/\<org_name>/settings/actions_ è possibile controllare la **configurazione delle azioni github** per l'organizzazione.
È possibile vietare completamente l'uso delle azioni github, **consentire tutte le azioni github**, o consentire solo determinate azioni.
È possibile vietare completamente l'uso delle azioni github, **consentire tutte le azioni github**, o consentire solo alcune azioni.
È 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.
### Segreti Git
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**.
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 **Secrets**.
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
@@ -172,7 +172,7 @@ example-command "$SUPER_SECRET"
> Una volta configurati nel repo o nelle organizzazioni, **gli utenti di github non potranno più accedervi**, potranno solo **cambiarli**.
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).
Pertanto, **l'unico modo per rubare i segreti di github è avere accesso alla macchina che sta eseguendo la Github Action** (in quel scenario potrai accedere solo ai segreti dichiarati per l'Action).
### Git Environments
@@ -183,62 +183,62 @@ 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.
Puoi configurare un ambiente per essere **accessibile** da **tutti i rami** (predefinito), **solo rami protetti** o **specificare** quali rami possono accedervi.\
Può anche impostare un **numero di revisioni richieste** prima di **eseguire** un **azione** utilizzando un **ambiente** o **attendere** un **tempo** prima di consentire il proseguimento delle distribuzioni.
### Git Action Runner
A Github Action can be **eseguita all'interno dell'ambiente github** or can be executed in a **third party infrastructure** configured by the user.
Un'azione Github può essere **eseguita all'interno dell'ambiente github** o può essere eseguita in un **infrastruttura di terze parti** configurata dall'utente.
Several organizations will allow to run Github Actions in a **third party infrastructure** as it use to be **più economico**.
Diverse organizzazioni consentiranno di eseguire azioni Github in un **infrastruttura di terze parti** poiché tende a essere **più economica**.
You can **elencare i runner self-hosted** of an organization in _https://github.com/organizations/\<org_name>/settings/actions/runners_
Puoi **elencare i runner self-hosted** di un'organizzazione in _https://github.com/organizations/\<org_name>/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.
Il modo per scoprire quali **Github Actions vengono eseguite in infrastrutture non github** è cercare `runs-on: self-hosted` nella configurazione yaml dell'azione Github.
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.
**Non è possibile eseguire un'azione Github di un'organizzazione all'interno di una macchina self-hosted** di un'altra organizzazione perché **un token unico viene generato per il Runner** quando viene configurato per sapere a quale runner appartiene.
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.
Se il **Github Runner personalizzato è configurato in una macchina all'interno di AWS o GCP**, l'azione **potrebbe avere accesso all'endpoint dei metadati** e **rubare il token dell'account di servizio** con cui la macchina sta funzionando.
### Git Action Compromise
### Compromissione dell'azione Git
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.
Se tutte le azioni (o un'azione malevola) sono consentite, un utente potrebbe utilizzare un'**azione Github** che è **malevola** e **comprometterà** il **container** in cui viene eseguita.
> [!CAUTION]
> A **malicious Github Action** run could be **abusata** by the attacker to:
> Un'**azione Github malevola** eseguita potrebbe essere **abusata** dall'attaccante per:
>
> - **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**.
> - **Rubare tutti i segreti** a cui l'azione ha accesso
> - **Muoversi lateralmente** se l'azione viene eseguita all'interno di un'**infrastruttura di terze parti** dove il token SA utilizzato per eseguire la macchina può essere accessibile (probabilmente tramite il servizio di metadati)
> - **Abusare del token** utilizzato dal **workflow** per **rubare il codice del repo** dove l'azione è eseguita o **anche modificarlo**.
## Branch Protections
## Protezioni dei rami
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**.
Le protezioni dei rami 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 ramo**.
The **branch protections of a repository** can be found in _https://github.com/\<orgname>/\<reponame>/settings/branches_
Le **protezioni dei rami di un repository** possono essere trovate in _https://github.com/\<orgname>/\<reponame>/settings/branches_
> [!NOTE]
> It's **non possibile impostare una protezione del ramo a livello di organizzazione**. So all of them must be declared on each repo.
> **Non è possibile impostare una protezione del ramo 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 ramo (come a master):
- 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.
- Puoi **richiedere una PR prima di unire** (quindi non puoi unire direttamente il codice sul ramo). Se questo è selezionato, possono essere in atto diverse altre protezioni:
- **Richiedere un numero di approvazioni**. È molto comune richiedere che 1 o 2 persone in più approvino la tua PR in modo che un singolo utente non possa unire direttamente il codice.
- **Annullare le approvazioni quando vengono inviati nuovi commit**. Altrimenti, un utente potrebbe approvare codice legittimo e poi l'utente potrebbe aggiungere codice malevolo e unirlo.
- **Richiedere revisioni dai proprietari del codice**. Almeno 1 proprietario del codice del repo deve approvare la PR (quindi gli utenti "casuali" non possono approvarla)
- **Limitare chi può annullare le revisioni delle richieste di pull.** Puoi specificare persone o team autorizzati ad annullare le revisioni delle richieste di pull.
- **Consentire a attori specificati di bypassare i requisiti delle richieste di pull**. Questi utenti saranno in grado di bypassare le restrizioni precedenti.
- **Richiedere che i controlli di stato passino prima di unire.** Alcuni controlli devono passare prima di poter unire il commit (come un'azione github che verifica che non ci siano segreti in chiaro).
- **Richiedere la risoluzione delle conversazioni prima di unire**. Tutti i commenti sul codice devono essere risolti prima che la PR possa essere unita.
- **Richiedere commit firmati**. I commit devono essere firmati.
- **Richiedere una storia lineare.** Impedire che i commit di unione vengano inviati a rami corrispondenti.
- **Includere gli amministratori**. Se questo non è impostato, gli amministratori possono bypassare le restrizioni.
- **Limitare chi può inviare a rami corrispondenti**. Limitare chi può inviare una PR.
> [!NOTE]
> 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.
> Come puoi vedere, anche se sei riuscito a ottenere alcune credenziali di un utente, **i repo potrebbero essere protetti impedendoti di inviare codice a master** per esempio per compromettere il pipeline CI/CD.
## References
## Riferimenti
- [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization)
- [https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)[https://docs.github.com/en/enterprise-server](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)