Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
SecretsStalker — रीड-ओनली Entra ID ऐप-क्रेडेंशियल मूल्यांकन: Graph अनुमतियों, Azure RBAC और सुलभ क्लाउड डेटा की सूची बनाता है, फिर निष्कर्षों को privilege-escalation और lateral-movement पथों से मैप करता है। | Kitploit
उपकरण/GitHubGitHub/rootsecdev/secretsstalker
प्रमाणीकरण और प्राधिकरणक्लाउड इन्फ्रास्ट्रक्चर सुरक्षाविशेषाधिकार वृद्धिटोहीपार्श्व आंदोलनपोस्ट-शोषणपेनिट्रेशन टेस्टिंगक्लाउड सुरक्षापहचान और एक्सेस प्रबंधन (IAM)रेड टीमिंग
GitHubrootsecdev/secretsstalker
1114 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

SecretsStalker

रीड-ओनली Entra ID ऐप-क्रेडेंशियल मूल्यांकन: Graph अनुमतियों, Azure RBAC और सुलभ क्लाउड डेटा की सूची बनाता है, फिर निष्कर्षों को privilege-escalation और lateral-movement पथों से मैप करता है।

रिपॉजिटरी देखें

secret_stalker```


/ / ______ ___ ___ / /_ / / / /__ _ / / /_____ ____ \ / -) / -) -)/ / \ \ / __/ _ `// / '/ -) / //_/_/_/_/ _/ // _/_,////_\__/_/

root@kitploit:~
     ╔╦╦╬╬╬╬╬╬╦╦╗
 ╔╬╬╬╝╝┘      ╚╝╝╬╬╬┐
╬╬╝╚╩╬╗╔          ╚╬╬╬

╬╝ ╚╬╬╗╗ ╔ ╚╬╗ ╬╬ ╔╗ ╚╬╬╬╬╬╬╦ ╬╬ we found your secret... ╔╬┤ ╬╬╬ ╬╬╬╬╬╬╬╬╝╝╝╬╬╗ ...now let's see what it ╬╬┤ ╚╩┘ ╚╬╬╬╬╬╩ ╠╬╬ can REALLY do. ( o_o)>=|= ╬╬┤ ╠╬╬ ╬╬ ╦╗ ╗╗ ╬╬ [ client_id + secret -> total recall ] └╬┐ ╚╬╗╗ ╔╬╬╝ ╔╬┘ └╬╗ ╚╩╩╬╬╬╩╩╝╝ ╔╬╬ ╚╬╬╬╗ ┌╗╬╬╝┘ ╚╩╬╬╬╦╦╦╦╦╦╬╬╬╝╝ ╚╚╝╝╝╝ // pst... that app registration talks too much. \

root@kitploit:~
**यह Entra ID क्लाइंट ID + सीक्रेट वास्तव में क्या कर सकता है?**

आपको किसी अधिकृत एंगेजमेंट में एक Entra ID (Azure AD) एप्लिकेशन क्रेडेंशियल — एक क्लाइंट ID और सीक्रेट — मिला है, और जिस टेनेंट से यह संबंधित है वह दायरे में है।
`secret_stalker` इन दोनों मानों को लेता है और आपको, शुरुआत से ही, बताता है:

1. **क्या यह मान्य है, और सीक्रेट कब समाप्त होता है?** — और यदि मान्य नहीं है, तो *क्यों*
   (गलत सीक्रेट, समाप्त सीक्रेट, टेनेंट में ऐप नहीं…)। मान्य सीक्रेट के लिए यह
   ऐप रजिस्ट्रेशन के `passwordCredentials` को पढ़ता है और समाप्ति
   तिथि + शेष दिनों की रिपोर्ट करता है (इसके लिए डायरेक्टरी रीड आवश्यक है; नीचे दिया गया नोट देखें)।
2. **यह कौन से Microsoft Graph अधिकार रखता है?** — जारी किए गए टोकन से सीधे पढ़ी गई एप्लिकेशन अनुमतियाँ, साथ ही **Entra डायरेक्टरी भूमिकाएँ** जो इसमें हैं (टोकन के `wids` क्लेम से भी निष्क्रिय रूप से पता लगाई गईं) और **ऑब्जेक्ट जिनका यह स्वामी है**
   (ऐप/SP जिनमें आप क्रेडेंशियल जोड़ सकते हैं)।
3. **Azure पर इसका क्या नियंत्रण है?** — RBAC भूमिका असाइनमेंट
   प्रबंधन-समूह और सब्सक्रिप्शन दायरे में।
4. **क्या यह वास्तविक डेटा तक पहुँच सकता है?** — वैकल्पिक Key Vault (सीक्रेट / कुंजियाँ / प्रमाणपत्र),
   Storage (ब्लॉब / फ़ाइल / क्यू / टेबल), और Cosmos DB डेटा-प्लेन पहुँच जाँच।
5. **प्रभाव क्या है?** — खतरनाक अनुमतियाँ, भूमिकाएँ, स्वामित्व, और ज्ञात privesc / lateral-movement प्रिमिटिव से मैप किया गया सुलभ डेटा, गंभीरता के आधार पर रेटेड,
   ठोस **attack-path** विवरणों के साथ।

यह या तो **क्लाइंट सीक्रेट** या **प्रमाणपत्र** (`--cert`) के साथ प्रमाणित करता है,
और **कमर्शियल और सॉवरेन क्लाउड** (`--cloud`) के विरुद्ध काम करता है।

यह **डिफ़ॉल्ट रूप से निष्क्रिय है** और **कभी भी कुछ संशोधित नहीं करता** — केवल रीड-ओनली
एन्यूमरेशन।

> ⚠️ **केवल अधिकृत परीक्षण।** इसे केवल उन्हीं टेनेंट्स के विरुद्ध चलाएँ जो
> स्पष्ट रूप से उस एंगेजमेंट के दायरे में हैं जिसे करने के लिए आप अधिकृत हैं।

---

## इंस्टॉल```bash
pip install -r requirements.txt        # just runs it from source
#   — or —
pip install .                          # installs the `secret_stalker` command
pip install '.[cert]'                  # + certificate (--cert) auth support
pip install '.[dev]'                   # + pytest for the test suite

एकमात्र रनटाइम निर्भरता requests है। टोकन स्थानीय रूप से डिकोड किए जाते हैं (base64 + JSON) — कोई सिग्नेचर सत्यापन नहीं, कोई क्रिप्टो लाइब्रेरी नहीं, कोई Microsoft SDK नहीं। एक अपवाद certificate auth (--cert) है, जिसके लिए वैकल्पिक cryptography पैकेज की आवश्यकता होती है ताकि JWT client assertion पर हस्ताक्षर किया जा सके। Python 3.7+ आवश्यक है।

pip install . करने के बाद आप इसे secret_stalker … के रूप में चला सकते हैं, बजाय python -m secret_stalker … के।


त्वरित आरंभ

यह जानने का सबसे तेज़ तरीका कि एक क्रेडेंशियल क्या कर सकता है:```bash python -m secret_stalker
--tenant contoso.onmicrosoft.com
--client-id 11111111-2222-3333-4444-555555555555
--secret ''

root@kitploit:~
`--tenant` या तो एक tenant GUID या एक डोमेन स्वीकार करता है — एक डोमेन सार्वजनिक OpenID कॉन्फ़िगरेशन एंडपॉइंट के माध्यम से स्वचालित रूप से उसके tenant ID में हल हो जाता है।

### अपने शेल इतिहास से गोपनीय जानकारी बाहर रखें

फ़्लैग्स के बजाय पर्यावरण चरों के माध्यम से क्रेडेंशियल्स पास करें:```bash
export SS_TENANT=contoso.onmicrosoft.com
export SS_CLIENT_ID=11111111-2222-3333-4444-555555555555
export SS_SECRET='<client-secret>'

python -m secret_stalker

--tenant / --client-id / --secret में से कोई भी SS_TENANT / SS_CLIENT_ID / SS_SECRET से आ सकता है। फ़्लैग्स परिवेश पर प्राथमिकता रखते हैं।

यह केवल शेल इतिहास के बारे में नहीं है: एक argv मान किसी भी स्थानीय उपयोगकर्ता द्वारा प्रक्रिया के जीवनकाल तक पठनीय होता है (ps, /proc/<pid>/cmdline)। यदि --secret या --cert-password को फ़्लैग के रूप में पास किया जाता है, तो टूल एक-पंक्ति का अनुस्मारक प्रिंट करता है stderr पर — यह कभी भी --json या --export आउटपुट में प्रकट नहीं होता।

सीक्रेट के बजाय प्रमाणपत्र से प्रमाणीकरण करें

ऐप पंजीकरण अक्सर सीक्रेट के बजाय प्रमाणपत्र का उपयोग करते हैं। --cert पास करें (एक PEM जिसमें निजी कुंजी और प्रमाणपत्र होता है, या एक .pfx/.p12) और टूल एक हस्ताक्षरित JWT क्लाइंट असर्शन के साथ प्रमाणीकरण करता है:```bash python -m secret_stalker --tenant contoso.onmicrosoft.com
--client-id --cert ./app.pem # or app.pfx

encrypted key / PFX:

python -m secret_stalker ... --cert app.pfx --cert-password ''

root@kitploit:~
प्रमाणपत्र प्रमाणीकरण के लिए वैकल्पिक `cryptography` पैकेज की आवश्यकता होती है (`pip install '.[cert]'`).
यह टूल प्रमाणपत्र की अपनी समाप्ति तिथि की रिपोर्ट करता है (ऐप के `keyCredentials` में उसके थंबप्रिंट से मिलान करके), ठीक वैसे ही जैसे यह किसी सीक्रेट के लिए करता है। `--cert`/`--cert-password`
भी `SS_CERT` / `SS_CERT_PASSWORD` से पढ़े जाते हैं।

### संप्रभु और सरकारी क्लाउड

डिफ़ॉल्ट रूप से secret_stalker **वाणिज्यिक** क्लाउड को लक्षित करता है। संप्रभु टेनेंट के लिए,
`--cloud` (या `SS_CLOUD`) पास करें ताकि Entra प्राधिकरण और Graph / ARM / Key
Vault एंडपॉइंट मेल खा सकें — अन्यथा वैध क्रेडेंशियल्स ऐसे दिखते हैं जैसे उनके पास कोई एक्सेस नहीं है:```bash
# US Government (GCC High)
python -m secret_stalker --cloud usgov  --tenant contoso.onmicrosoft.us ...

# US DoD (L5)
python -m secret_stalker --cloud usdod  ...

# Azure operated by 21Vianet (China)
python -m secret_stalker --cloud china  --tenant contoso.partner.onmschina.cn ...

gov, dod, commercial, gcc-high, और 21vianet जैसे उपनाम स्वीकार किए जाते हैं। (स्टोरेज डेटा-प्लेन audience, storage.azure.com, हर क्लाउड में समान है।)


अभियान पर अनुशंसित कार्यप्रवाह

  1. इस टेनेंट के लिए अनुमति मानचित्र को रीफ़्रेश करें (एक बार)। यह लक्ष्य टेनेंट के लिए Graph की अनुमति GUIDs को आधिकारिक नामों में हल करता है: ```bash python -m secret_stalker --update-manifest
    root@kitploit:~

यह प्रमाणीकरण करता है, टेनेंट के Graph appRole मैप को ~/.secret_stalker/app_roles_cache.json पर कैश करता है, और बाहर निकलता है। इसे छोड़ दें यदि क्रेडेंशियल सेवा प्रिंसिपल नहीं पढ़ सकता — बंडल किया गया मैप अभी भी ज्ञात अनुमतियों को कवर करता है।

  1. निष्क्रिय आधाररेखा। वैधता, Graph अनुमतियाँ और Azure RBAC देखें बिना टेनेंट ऑब्जेक्ट को छुए: ```bash python -m secret_stalker
    root@kitploit:~
  2. जब आप गहराई + एक रखने योग्य रिपोर्ट चाहते हैं तो सक्रिय रहें। केवल-पठनीय Graph ऑब्जेक्ट नमूने और Key Vault / Storage data-plane पहुंच क्षमता जोड़ता है, और एक ट्रायेज या इंजेशन के लिए समतल निर्यात लिखता है:

bash python -m secret_stalker --active --export results.ndjson

root@kitploit:~
---

## आउटपुट पढ़ना

टर्मिनल रिपोर्ट ऊपर से नीचे तक "क्या यह काम करता है" से "कितना नुकसान
हुआ" तक व्यवस्थित होती है। एक सामान्य रन कुछ इस प्रकार दिखता है:```
secret_stalker — credential assessment
======================================

Credential status : VALID
Tenant            : aaaaaaaa-...
Client (app) id   : 1111...
App display name  : Recon App
SP object id      : cccc...
Secret            : valid — expires 2027-03-01 (in 207 days)

Token acquisition
=================
OK  graph
OK  arm
NO  storage  — no storage token

Microsoft Graph application permissions (from token)
====================================================
- Application.ReadWrite.All
- Mail.Read

...

Findings — escalation / control
===============================
[CRITICAL] (GRAPH) Application.ReadWrite.All
     Can add credentials to any app/SP and impersonate it — tenant-wide pivot.
[CRITICAL] (ARM) Owner
     Full control including granting access to others.
[CRITICAL] (DATA) keyvault:secrets
     Can read Key Vault secret values — connection strings, passwords, tokens.
[MEDIUM] (GRAPH) Mail.Read
     Read all mailboxes — data exposure.

Overall risk: CRITICAL
  • टोकन अधिग्रहण प्रत्येक जाँचे गए ऑडियंस की सूची देता है (Graph, ARM, और — --active के साथ, जब मिलान वाले संसाधन खोजे जाते हैं — Key Vault / Storage / Cosmos DB)। Graph और ARM स्वतंत्र हैं: एक क्रेडेंशियल के पास एक हो सकता है और दूसरा नहीं।
  • Secret वैधता दिखाता है और, एक वैध सीक्रेट के लिए, समाप्ति तिथि और शेष दिन (निकट-समाप्ति हाइलाइट की जाती है)। समाप्त सीक्रेट्स पर नीचे दिए गए नोट देखें।
  • निष्कर्ष (Findings) पहले पढ़ने वाला हिस्सा है — उच्च-प्रभाव वाली Graph अनुमतियाँ (GRAPH), ARM भूमिकाएँ (ARM), Entra निर्देशिका भूमिकाएँ (ROLE), स्वामित्व वाले ऐप्स/SPs (OWN), पहुंच योग्य डेटा-प्लेन सतहें (DATA), और अनुरोधित-लेकिन-सहमति-रहित सहमति-हमले के लक्ष्य (WANT) — डी-डुप्लीकेटेड और गंभीरता-रेटेड। हर Key Vault सीक्रेट पढ़ने में सक्षम होना, या कोई निर्देशिका भूमिका रखना, अपने आप में एक निष्कर्ष है, भले ही कोई खतरनाक Graph/ARM अनुदान न हो।
  • हमले के पथ शीर्ष निष्कर्षों को ठोस अगले कदमों में बदलते हैं (जैसे Privileged Role Administrator → स्वयं को Global Administrator असाइन करें → टेनेंट टेकओवर)।
  • सक्रिय Graph गणना (--active) बताती है कि प्रत्येक केवल-पढ़ने वाली जांच ने क्या लौटाया। अधिकांश जाँचें एक छोटा, सीमित पृष्ठ माँगती हैं, इसलिए भरा हुआ पृष्ठ N+ के रूप में दिखाया जाता है (जैसे ) — जिसका अर्थ है पाँच, ठीक पाँच नहीं। बिना सीमा वाली जाँचें (, ) वास्तविक कुल संख्या बिना के रिपोर्ट करती हैं।

सीक्रेट समाप्ति — क्या जाना जा सकता है। समाप्ति तिथि टोकन में नहीं होती; यह Entra ID में ऐप पंजीकरण के passwordCredentials पर रहती है। एक मान्य सीक्रेट के लिए, secret_stalker इसे Graph के माध्यम से पढ़ता है और आपके सीक्रेट को उसके hint (पहले 3 अक्षर) द्वारा सही क्रेडेंशियल से मिलाता है — इसके लिए निर्देशिका पढ़ना आवश्यक है (Application.Read.All / Directory.Read.All); यदि SP के पास यह नहीं है, तो तिथि अनुमान लगाने के बजाय अनुपलब्ध बताई जाती है। एक समाप्त सीक्रेट के लिए प्रमाणीकरण स्वयं विफल हो जाता है, इसलिए मृत क्रेडेंशियल अपने स्वयं के मेटाडेटा को नहीं पढ़ सकता — उपकरण इसे EXPIRED (AADSTS7000222) के रूप में चिह्नित करता है, लेकिन सटीक अंतिम तिथि केवल उस क्रेडेंशियल के माध्यम से प्राप्त नहीं की जा सकती।

एग्ज़िट कोड

स्क्रिप्टिंग के लिए उपयोगी:

CodeMeaning
0क्रेडेंशियल मान्य है (कम से कम एक टोकन मिला)।
2क्रेडेंशियल अमान्य है / उसकी कोई पहुँच नहीं है।
1त्रुटि — टेनेंट को हल नहीं किया जा सका, प्रमाणपत्र लोड नहीं किया जा सका, या --export फ़ाइल लिखी नहीं जा सकी।

सभी फ़्लैग


परिणाम निर्यात करना

--export परिणाम को प्रति खोजी गई वस्तु एक रिकॉर्ड में समतल करता है — क्रेडेंशियल, टोकन, Graph अनुमति, ऐप-रोल असाइनमेंट, ARM भूमिका, डेटा-प्लेन हिट, और स्कोर किया गया निष्कर्ष — प्रत्येक क्रेडेंशियल संदर्भ लिए हुए ताकि एक पंक्ति अपने आप में पूर्ण रहे।```bash

NDJSON — stream into a SIEM / log pipeline

python -m secret_stalker --export results.ndjson

CSV — open in a spreadsheet for triage

python -m secret_stalker --active --export results.csv

Full nested JSON to a file

python -m secret_stalker --export results.json

root@kitploit:~
हर रिकॉर्ड में एक `record_type` (`credential`, `secret`, `token`,
`graph_permission`, `app_role_assignment`, `directory_role`, `owned_object`,
`arm_role`, `dataplane`, `delegated_permission`, `requested_permission`,
`finding`) होता है, ताकि कोई उपभोक्ता केवल अपनी ज़रूरत की चीज़ों को फ़िल्टर कर सके — उदाहरण के लिए, केवल
स्कोर किए गए हिट्स:```bash
jq 'select(.record_type=="finding")' results.ndjson

टर्मिनल रिपोर्ट और --export एक साथ काम करते हैं — निर्यात रिपोर्ट को दबाता नहीं है ("Exported …" पुष्टिकरण stderr पर जाता है, इसलिए --json को पाइप करना साफ रहता है)।

निर्यात फ़ाइलें क्रेडेंशियल संदर्भ ले जाती हैं (टोकन दावे, secret hint, कुंजी आईडी), इसलिए उन्हें केवल-स्वामी (0600) अनुमतियों के साथ लिखा जाता है ताकि साझा या सिंक किए गए होस्ट पर लीक न हों। उन्हें संवेदनशील एंगेजमेंट आर्टिफैक्ट के रूप में मानें। symlink के माध्यम से लेखन सीधे अस्वीकार कर दिया जाता है, इसलिए किसी निर्यात पथ को किसी अन्य चीज़ को truncate करने के लिए पुनर्निर्देशित नहीं किया जा सकता।

परिणाम में नाम मूल्यांकनाधीन टेनेंट से आते हैं — ऐप और ग्रुप डिस्प्ले नाम, कंटेनर और ब्लॉब नाम — इसलिए उन्हें अविश्वसनीय आउटपुट माना जाता है:

  • CSV मान जो फ़ॉर्मूले के रूप में पढ़े जाएंगे (आरंभिक =, +, -, @) एकल उद्धरण से उपसर्गित किए जाते हैं, ताकि =cmd|' /C calc'!A0 जैसा डिस्प्ले नाम स्प्रेडशीट में फ़ाइल खोले जाने पर निष्पादित न हो सके। स्प्रेडशीट उद्धरण को प्रदर्शन पर हटा देती हैं।
  • टर्मिनल, CSV और HTML आउटपुट से नियंत्रण वर्ण हटा दिए जाते हैं, ताकि एक नाम जिसमें ANSI एस्केप हैं, आपके टर्मिनल का शीर्षक न बदल सके या उसके ऊपर के निष्कर्षों को अधिलेखित न कर सके — चाहे आप रिपोर्ट लाइव पढ़ें, CSV को cat करें, या HTML को cat करें।
  • JSON / NDJSON को यथावत रखा जाता है: json.dumps नियंत्रण वर्णों को \uXXXX के रूप में एनकोड करता है, जो पाठ के रूप में निष्क्रिय है जबकि एक पार्सर टेनेंट द्वारा लौटाए गए सटीक मान को वैसे ही प्राप्त कर लेता है। कच्चा नाम साक्ष्य है, इसलिए इसे वहाँ संरक्षित रखा जाता है।

अनुमति GUID कैसे हल किए जाते हैं

appRoleAssignments GUID के रूप में लौटते हैं। secret_stalker उन्हें एक फ्लैट लुकअप द्वारा नामों में हल करता है (appRole GUID वैश्विक रूप से अद्वितीय होते हैं), जो तब भी काम करता रहता है जब निर्देशिका पढ़ना अस्वीकृत हो:

  • सुप्रसिद्ध Graph अनुमतियों का एक best-effort मैप secret_stalker/data/graph_app_roles.json में शामिल है।
  • --update-manifest इसे आधिकारिक डेटा के साथ अधिलेखित करता है जो दायरे वाले टेनेंट से लाइव खींचा जाता है — Microsoft Graph साथ ही हर अन्य संसाधन API जिस पर यह क्रेडेंशियल असाइन है (जैसे Exchange Online, SharePoint), ताकि गैर-Graph GUID भी हल हो जाएं।
  • अज्ञात GUID को कच्चा दिखाया जाता है और फ़्लैग किया जाता है — उपकरण कभी भी नाम का अनुमान नहीं लगाता।

यह कैसे काम करता है (संक्षिप्त संस्करण)

  • एक ही अनुरोध में वैधता + अनुमतियाँ। एक सफल Graph टोकन का roles दावा प्रदत्त एप्लिकेशन अनुमतियों की सूची ही है। secret_stalker इसे डिकोड किए गए टोकन से पढ़ता है — तेज़ और शांत, कोई Graph कॉल आवश्यक नहीं।
  • Graph ≠ ARM. वे अलग-अलग टोकन ऑडिएंस हैं। एक क्रेडेंशियल एक पर अधिकार रख सकता है और दूसरे पर नहीं, इसलिए प्रत्येक की स्वतंत्र रूप से जाँच की जाती है।
  • डेटा प्लेन ≠ कंट्रोल प्लेन। किसी Key Vault पर ARM अधिकार (प्रबंधन) रखना उसके secrets (डेटा प्लेन) पढ़ने में सक्षम होने के समान नहीं है। --active के अंतर्गत, डेटा-प्लेन पहुँच का परीक्षण संसाधन के अपने टोकन ऑडिएंस के साथ किया जाता है — और यह केवल ऑब्जेक्ट नाम सूचीबद्ध करता है, कभी मान या सामग्री नहीं।
  • प्रति-सतह डेटा-प्लेन प्रोबिंग। डेटा-प्लेन RBAC प्रति ऑब्जेक्ट प्रकार / सेवा के अनुसार दिया जाता है, इसलिए प्रत्येक की स्वतंत्र रूप से जाँच की जाती है: Key Vault secrets / keys / certificates, Storage blob / file / queue / table, और Cosmos DB databases. एक क्रेडेंशियल जो Storage File Data SMB Share Reader है लेकिन blob रीडर नहीं है, वह सामने आता है, छूटता नहीं। (Cosmos एक गैर-मानक AAD REST हेडर का उपयोग करता है और best-effort है — denied परिणाम को किसी लाइव खाते के विरुद्ध मान्य करें।)
  • टेनेंट-व्यापी खोज। संसाधन एक ही Azure Resource Graph स्वीप से प्रत्येक सब्सक्रिप्शन में पाए जाते हैं जिसे प्रिंसिपल देख सकता है (RBAC-सम्मान करते हुए), यदि ARG अस्वीकृत हो तो प्रति-सब्सक्रिप्शन प्रदाता सूची पर वापस गिरता है। रिपोर्ट टैग करती है कि कौन सा पथ उपयोग किया गया ([discovery: resource-graph] बनाम per-subscription)। स्वीप परिणामों को एक सीमा तक पेज करता है (प्रति संसाधन प्रकार 40 पेज × 1000 पंक्तियाँ) ताकि एक रन हमेशा समाप्त हो; यह कहता है यदि सीमा कभी पहुँच जाती है।

प्रोजेक्ट संरचना```

secret_stalker/ clouds.py Azure cloud endpoint table (public / usgov / usdod / china) auth.py client_credentials flow + tenant discovery + AADSTS decoding jwt_utils.py local JWT claim extraction manifest.py Graph appRole GUID -> name resolution (bundled + live cache) graph.py service principal lookup + appRole resolution + active probes arm.py management-group / subscription RBAC + resource discovery dataplane.py Key Vault / Storage data-plane reachability probes risk.py permission/role/data-plane -> impact mapping (tune this) report.py terminal + JSON output export.py flatten to NDJSON / CSV / JSON records for ingestion util.py shared HTTP (retry/backoff + safe JSON), pmap parallel map, untrusted-output sanitizing banner.py ASCII banner (stderr only) cli.py orchestration data/graph_app_roles.json bundled permission manifest tests/ pytest suite (run: pytest) pyproject.toml packaging + secret_stalker console entry point

root@kitploit:~
---

## कार्यान्वित मुख्य विशेषताएँ

- **सीक्रेट या प्रमाणपत्र प्रमाणीकरण** (`--cert`) — PEM या PFX से JWT क्लाइंट-असर्शन (RS256),
  प्रमाणपत्र-समाप्ति रिपोर्टिंग के साथ। `auth.py`
- **प्रिंसिपल द्वारा धारित Entra निर्देशिका भूमिकाएँ** — टोकन के `wids` दावे से निष्क्रिय पहचान सहित
  (कोई निर्देशिका पठन आवश्यक नहीं) — भूमिका द्वारा स्कोर किया गया। `graph.py` / `risk.py`
- **स्वामित्व वाली वस्तुएँ** — ऐप्स/SPs जिनका स्वामित्व क्रेडेंशियल के पास है (क्रेडेंशियल-जोड़ पिवट)। `graph.py`
- **प्रत्यायोजित-अनुमति दृश्यता** (`--active`) — सहमति-प्राप्त अनुदान + अनुरोधित
  अनुमतियाँ, जिनमें बिना सहमति वाली खतरनाक अनुमतियों को सहमति-हमले के लक्ष्य के रूप में चिह्नित किया गया है। `graph.py` / `risk.py`
- **हमले-पथ कथाएँ** + **HTML रिपोर्ट** (`--export report.html`). `risk.py` / `report.py`
- **वाणिज्यिक + संप्रभु क्लाउड** (`--cloud`) — सार्वजनिक, US Gov (GCC High), US DoD,
  और चीन (21Vianet), प्रत्येक सही Entra प्राधिकरण और Graph / ARM / Key
  Vault ऑडियंस के साथ। `clouds.py`
- **टेनेंट-व्यापी संसाधन खोज** एक एकल Azure Resource Graph स्वीप के माध्यम से
  (RBAC-सम्मानजनक), प्रति-सदस्यता फ़ॉलबैक और प्रबंधन-समूह वंशज पुनर्प्राप्ति के साथ
  उन सदस्यताओं के लिए जिन्हें सपाट सूची छोड़ देती है। `arm.py`
- **पूर्ण डेटा-प्लेन कवरेज** — Key Vault सीक्रेट / कुंजियाँ / प्रमाणपत्र, Storage
  ब्लॉब / फ़ाइल / कतार / तालिका, और Cosmos DB डेटाबेस, प्रत्येक को स्वतंत्र रूप से जाँचा गया
  और स्कोर किए गए निष्कर्षों में शामिल किया गया (पहुँच योग्य डेटा एक निष्कर्ष है, केवल
  मेटाडेटा नहीं)। `dataplane.py` / `risk.py`
- **सटीक गणनाएँ** — डेटा-प्लेन सूचियाँ निरंतरता टोकन (सीमित) का पालन करती हैं, इसलिए
  सतह गणना वास्तविक कुल को दर्शाती है; एक `+` (जैसे `25+`) चिह्नित करता है कि सूची कहाँ
  सीमित की गई थी, चुपचाप कम रिपोर्ट करने के बजाय। `dataplane.py`
- **थ्रॉटलिंग-प्रतिरोधी अनुरोध** — एक साझा HTTP पथ `429`/`503` का पुनः प्रयास करता है,
  `Retry-After` का सम्मान करते हुए, ताकि क्षणिक थ्रॉटलिंग को "अस्वीकृत / कोई
  पहुँच नहीं" के रूप में गलत न समझा जाए। `util.py`
- **गहरा Storage अवरोहण** (`--deep`) — पहुँच योग्य कंटेनरों में ब्लॉब और
  पहुँच योग्य शेयरों में फ़ाइलें, केवल नाम और सीमित संख्या में। `dataplane.py`
- **गैर-Graph GUID समाधान** — `--update-manifest` हर संसाधन API के लिए appRoles कैश करता है
  जिस पर क्रेडेंशियल असाइन किया गया है, न कि केवल Graph। `graph.py` / `manifest.py`
- **समवर्तीता** (`--workers N`) ARM स्कोप लुकअप और डेटा-प्लेन जाँचों में,
  प्रति-आइटम त्रुटि अलगाव के साथ। `util.py`

## रोडमैप विचार

- Key Vault कुंजियों/प्रमाणपत्रों का *विशेषता* पठन (सक्षम/समाप्ति) ट्राइएज के लिए —
  फिर भी केवल मेटाडेटा, कोई कुंजी सामग्री नहीं।
- Storage कतार/तालिका सामग्री की झाँकी डेटा पढ़ने की श्रेणी में आएगी, इसलिए इसे
  जानबूझकर इस केवल-पठन टूल के **दायरे से बाहर** रखा गया है।
टूल डाउनलोड करें
--cloudEntra प्राधिकरणMicrosoft GraphARMKey Vault
public (डिफ़ॉल्ट)login.microsoftonline.comgraph.microsoft.commanagement.azure.comvault.azure.net
usgov (GCC High)login.microsoftonline.usgraph.microsoft.usmanagement.usgovcloudapi.netvault.usgovcloudapi.net
usdod (DoD)login.microsoftonline.usdod-graph.microsoft.usmanagement.usgovcloudapi.netvault.usgovcloudapi.net
china (21Vianet)login.chinacloudapi.cnmicrosoftgraph.chinacloudapi.cnmanagement.chinacloudapi.cnvault.azure.cn
users accessible (returned 5+)
कम से कम
organization
directoryRoles
+
  • निर्देशिका भूमिकाएँ / स्वामित्व वाली वस्तुएँ / प्रत्यायोजित अनुमतियाँ अपने-अपने अनुभाग पाते हैं। निर्देशिका भूमिकाएँ टोकन के wids दावे से पहचानी जाती हैं, भले ही निर्देशिका पढ़ना उपलब्ध न हो; प्रत्यायोजित अनुमतियाँ केवल-ऐप क्रेडेंशियल द्वारा उपयोग योग्य नहीं होतीं, लेकिन उपयोगकर्ता-संदर्भ pivot और सहमति-हमले लक्ष्यीकरण के लिए दिखाई जाती हैं।
  • समग्र जोखिम सबसे अधिक गंभीरता वाले एकल निष्कर्ष का गंभीरता स्तर है।
  • FlagEffect
    --tenantTenant GUID या डोमेन। (या SS_TENANT)
    --cloudAzure क्लाउड: public (डिफ़ॉल्ट), usgov (GCC High), usdod (DoD), china (21Vianet)। Entra प्राधिकरण और Graph/ARM/Key Vault एंडपॉइंट चुनता है। gov/dod/commercial जैसे उपनाम स्वीकार्य हैं। (या SS_CLOUD)
    --client-idएप्लिकेशन (क्लाइंट) ID। (या SS_CLIENT_ID)
    --secretक्लाइंट सीक्रेट। इसे इतिहास से बाहर रखने के लिए SS_SECRET को प्राथमिकता दें।
    --certसीक्रेट के बजाय JWT-अभिकथन प्रमाणीकरण के लिए प्रमाणपत्र: एक PEM (key+cert) या .pfx/.p12। cryptography चाहिए। (या SS_CERT)
    --cert-passwordएन्क्रिप्टेड --cert कुंजी/PFX के लिए पासवर्ड। (या SS_CERT_PASSWORD)
    --activeऑप्ट-इन केवल-पढ़ने वाली गणना: Graph ऑब्जेक्ट नमूने और Key Vault / Storage डेटा-प्लेन पहुँच-क्षमता। डिफ़ॉल्ट रूप से बंद ताकि शांत रहे।
    --deep--active के साथ: पहुँच योग्य Storage में एक स्तर नीचे जाएँ — सुलभ कंटेनरों में ब्लॉब और सुलभ शेयरों में फ़ाइलें सूचीबद्ध करें (केवल नाम, सीमित)। ज़्यादा शोर।
    --no-armप्रबंधन-समूह / सब्सक्रिप्शन / RBAC गणना छोड़ें (केवल Graph)।
    --workers NARM स्कोप लुकअप और डेटा-प्लेन जाँचों के लिए समानांतर HTTP वर्कर (डिफ़ॉल्ट 8; 1 = अनुक्रमिक)।
    --update-manifestलाइव टेनेंट से आधिकारिक appRole GUID→name मानचित्र प्राप्त करें (Graph और कोई अन्य संसाधन API जिस पर यह क्रेडेंशियल असाइन है), इसे कैश करें, फिर बाहर निकलें।
    --jsonरिपोर्ट के बजाय पूर्ण नेस्टेड परिणाम को JSON के रूप में प्रिंट करें।
    --export PATHपरिणामों को एक फ़ाइल में लिखें। प्रारूप एक्सटेंशन से अनुमानित किया जाता है (.csv / .ndjson / .jsonl / .json / .html)। फ़ाइलें केवल स्वामी के लिए (0600) लिखी जाती हैं।
    --export-formatएक्सपोर्ट प्रारूप बलपूर्वक निर्धारित करें (ndjson / csv / json / html)।
    --timeout Nप्रति-अनुरोध टाइमआउट सेकंड में (डिफ़ॉल्ट 20)। ARM कंट्रोल-प्लेन अनुरोध (RBAC गणना + Resource Graph खोज) लंबे टाइमआउट का उपयोग करते हैं — 1.5×, न्यूनतम 30s — क्योंकि वे धीमे चलते हैं।
    --verbose, -vहर Graph/ARM/data-plane HTTP अनुरोध (विधि, URL, स्थिति) को stderr पर ट्रेस करें।
    --no-bannerASCII बैनर दबाएँ।
    --versionसंस्करण प्रिंट करें और बाहर निकलें।
    --verbose
  • गंभीरता मैपिंग secret_stalker/risk.py में रहती है — इसे संपादित करके समायोजित करें कि आपकी टीम किसे उच्च-प्रभाव वाला मानती है।