
गिटहब एक्शन्स CI/CD वर्कफ़्लोज़ में सुरक्षा कमज़ोरियों के लिए स्कैन करता है, निष्कर्षों को Neo4j ग्राफ़ डेटाबेस में अनुक्रमित करता है, और गलत कॉन्फ़िगरेशन, इंजेक्शन और आपूर्ति-श्रृंखला जोखिमों का पता लगाने के लिए एक क्वेरी लाइब्रेरी प्रदान करता है।
रेवेन (CI/CD के लिए जोखिम विश्लेषण और भेद्यता गणना) एक शक्तिशाली सुरक्षा उपकरण है जिसे GitHub Actions CI वर्कफ़्लो के लिए बड़े पैमाने पर स्कैन करने और खोजे गए डेटा को Neo4j डेटाबेस में संग्रहीत करने के लिए डिज़ाइन किया गया है। इसे Cycode अनुसंधान टीम द्वारा विकसित और अनुरक्षित किया गया है।
Raven की मदद से, हम GitHub पर होस्ट किए गए कुछ सबसे लोकप्रिय रिपॉजिटरी में सुरक्षा कमज़ोरियों की पहचान और रिपोर्ट करने में सक्षम हुए, जिनमें शामिल हैं:
हमने Raven का उपयोग करके खोजी गई सभी कमज़ोरियों को उपकरण के हॉल ऑफ फेम में सूचीबद्ध किया है।
यह उपकरण संभावित CI/CD कमज़ोरियों को स्कैन और विश्लेषण करने के लिए निम्नलिखित क्षमताएं प्रदान करता है:
Raven के संभावित उपयोग:
यह उपकरण CI/CD सुरक्षा विश्लेषण के लिए एक विश्वसनीय और स्केलेबल समाधान प्रदान करता है, जो उपयोगकर्ताओं को खराब कॉन्फ़िगरेशन को क्वेरी करने और अपने कोडबेस की सुरक्षा स्थिति में मूल्यवान अंतर्दृष्टि प्राप्त करने में सक्षम बनाता है।
पिछले वर्ष में, Cycode Labs ने CI/CD सिस्टम की मूलभूत सुरक्षा समस्याओं पर व्यापक शोध किया। हमने कई सिस्टमों, हज़ारों प्रोजेक्ट्स और कई कॉन्फ़िगरेशनों की गहराई से जांच की। निष्कर्ष स्पष्ट है – वह मॉडल जिसमें सुरक्षा को डेवलपर्स को सौंपा गया है, विफल हो गया है। यह हमारी पिछली सामग्री में कई बार सिद्ध हुआ है:
उपरोक्त प्रत्येक कमज़ोरी में अद्वितीय विशेषताएं हैं, जो डेवलपर्स के लिए नवीनतम सुरक्षा रुझानों के साथ अप-टू-डेट रहना लगभग असंभव बना देती हैं। दुर्भाग्य से, प्रत्येक कमज़ोरी में एक समानता है – प्रत्येक शोषण लाखों पीड़ितों को प्रभावित कर सकता है।
यही वे कारण थे जिनके लिए Raven बनाया गया, CI/CD सुरक्षा विश्लेषण वर्कफ़्लो के लिए एक फ्रेमवर्क (और GitHub Actions पहले उपयोग के मामले के रूप में)। हमारे फोकस में, हमने जटिल परिदृश्यों की जांच की जहां प्रत्येक मुद्दा अपने आप में खतरा नहीं होता, लेकिन संयुक्त होने पर, वे एक गंभीर खतरा पैदा करते हैं।
Raven के साथ शुरुआत करने के लिए, इन स्थापना निर्देशों का पालन करें:
चरण 1: Raven पैकेज स्थापित करें```bash pip3 install raven-cycode
**Step 2**: एक स्थानीय Redis सर्वर और Neo4j डेटाबेस सेटअप करें```bash
docker run -d --name raven-neo4j -p7474:7474 -p7687:7687 --env NEO4J_AUTH=neo4j/123456789 --volume raven-neo4j:/data neo4j:5.12
docker run -d --name raven-redis -p6379:6379 --volume raven-redis:/data redis:7.2.1
पर्यावरण को सेटअप करने का एक और तरीका हमारे द्वारा प्रदान की गई docker compose फ़ाइल चलाकर है:```bash git clone https://github.com/CycodeLabs/raven.git cd raven make setup
**चरण 3**: Raven Downloader चलाएँ
खाता मोड:```bash
raven download account --token $GITHUB_TOKEN --account-name RavenDemo
क्रॉल मोड:```bash raven download crawl --token $GITHUB_TOKEN --min-stars 1000
**चरण 4**: Raven Indexer चलाएं```bash
raven index
चरण 5: रिपोर्टर के माध्यम से परिणामों का निरीक्षण करें```bash raven report --format raw
इस बिंदु पर, http://localhost:7474/browser/ से जुड़कर Neo4j डेटाबेस में डेटा का निरीक्षण करना संभव है।
### आवश्यक शर्तें
- Python 3.9+
- Docker Compose v2.1.0+
- Docker Engine v1.13.0+
## बुनियादी ढांचा
Raven दो प्राथमिक डॉकर कंटेनरों का उपयोग कर रहा है: Redis और Neo4j।
`make setup` उस वातावरण को तैयार करने के लिए एक `docker compose` कमांड चलाएगा।

## उपयोग
टूल में तीन मुख्य कार्यक्षमताएँ हैं: `download`, `index` और `report`।
### डाउनलोड
#### खाता रिपॉजिटरी डाउनलोड करें```bash
usage: raven download account [-h] --token TOKEN [--debug] [--redis-host REDIS_HOST] [--redis-port REDIS_PORT] [--clean-redis] (--account-name ACCOUNT_NAME | --personal)
options:
-h, --help show this help message and exit
--token TOKEN GITHUB_TOKEN to download data from Github API (Needed for effective rate-limiting)
--debug Whether to print debug statements, default: False
--redis-host REDIS_HOST
Redis host, default: localhost
--redis-port REDIS_PORT
Redis port, default: 6379
--clean-redis, -cr Whether to clean cache in the redis, default: False
--account-name ACCOUNT_NAME
Account name for downloading the workflows, can be used multiple times
--personal Download repositories owned by the authenticated user
usage: raven download crawl [-h] --token TOKEN [--debug] [--redis-host REDIS_HOST] [--redis-port REDIS_PORT] [--clean-redis] [--max-stars MAX_STARS] [--min-stars MIN_STARS]
options: -h, --help show this help message and exit --token TOKEN GITHUB_TOKEN to download data from Github API (Needed for effective rate-limiting) --debug Whether to print debug statements, default: False --redis-host REDIS_HOST Redis host, default: localhost --redis-port REDIS_PORT Redis port, default: 6379 --clean-redis, -cr Whether to clean cache in the redis, default: False --max-stars MAX_STARS Maximum number of stars for a repository --min-stars MIN_STARS Minimum number of stars for a repository, default: 1000
### अनुक्रमणिका```bash
usage: raven index [-h] [--redis-host REDIS_HOST] [--redis-port REDIS_PORT] [--clean-redis] [--neo4j-uri NEO4J_URI] [--neo4j-user NEO4J_USER] [--neo4j-pass NEO4J_PASS]
[--clean-neo4j] [--debug]
options:
-h, --help show this help message and exit
--redis-host REDIS_HOST
Redis host, default: localhost
--redis-port REDIS_PORT
Redis port, default: 6379
--clean-redis, -cr Whether to clean cache in the redis, default: False
--neo4j-uri NEO4J_URI
Neo4j URI endpoint, default: neo4j://localhost:7687
--neo4j-user NEO4J_USER
Neo4j username, default: neo4j
--neo4j-pass NEO4J_PASS
Neo4j password, default: 123456789
--clean-neo4j, -cn Whether to clean cache, and index from scratch, default: False
--debug Whether to print debug statements, default: False
usage: raven report [-h] [--redis-host REDIS_HOST] [--redis-port REDIS_PORT] [--clean-redis] [--neo4j-uri NEO4J_URI] [--neo4j-user NEO4J_USER] [--neo4j-pass NEO4J_PASS] [--clean-neo4j] [--tag {injection,unauthenticated,fixed,priv-esc,supply-chain,best-practice,endoflife,reconnaissance}] [--severity {info,low,medium,high,critical}] [--query_ids RQ-1,..,RQ-16] [--queries-path QUERIES_PATH] [--format {raw,json}] {slack} ...
positional arguments: {slack} slack Send report to slack channel
options: -h, --help show this help message and exit --redis-host REDIS_HOST Redis host, default: localhost --redis-port REDIS_PORT Redis port, default: 6379 --clean-redis, -cr Whether to clean cache in the redis, default: False --neo4j-uri NEO4J_URI Neo4j URI endpoint, default: neo4j://localhost:7687 --neo4j-user NEO4J_USER Neo4j username, default: neo4j --neo4j-pass NEO4J_PASS Neo4j password, default: 123456789 --clean-neo4j, -cn Whether to clean cache, and index from scratch, default: False --tag {injection,unauthenticated,fixed,priv-esc,supply-chain,best-practice,endoflife,reconnaissance}, -t {injection,unauthenticated,fixed,priv-esc,supply-chain,best-practice,endoflife,reconnaissance} Filter queries with specific tag --severity {info,low,medium,high,critical}, -s {info,low,medium,high,critical} Filter queries by severity level (default: info) --query_ids RQ-1,..,RQ-16, -id RQ-1,..,RQ-16 Filter queries by query ids (example: RQ-2,RQ-8) --queries-path QUERIES_PATH, -dp QUERIES_PATH Queries folder (default: library) --format {raw,json}, -f {raw,json} Report format (default: raw)
## उदाहरण
किसी भी खाते (उपयोगकर्ता/संगठन) से जुड़े सभी workflows और actions प्राप्त करें।```bash
raven download account --token $GITHUB_TOKEN --account-name microsoft --account-name google --debug
सभी सार्वजनिक रूप से सुलभ GitHub रिपॉजिटरी को स्क्रैप करें।```bash raven download crawl --token $GITHUB_TOKEN --min-stars 100 --max-stars 1000 --debug
डाउनलोड प्रक्रिया समाप्त करने के बाद या Ctrl+C का उपयोग करके बाधित होने पर, सभी कार्यप्रवाहों और क्रियाओं को Neo4j डेटाबेस में इंडेक्स करने के लिए आगे बढ़ें।```bash
raven index --debug
अब, हम अपनी क्वेरी लाइब्रेरी का उपयोग करके एक रिपोर्ट तैयार कर सकते हैं।```bash raven report --severity high --tag injection --tag unauthenticated
## दर सीमा (Rate Limiting)
प्रभावी दर सीमा के लिए, आपको एक Github टोकन प्रदान करना चाहिए।
प्रमाणित उपयोगकर्ताओं के लिए, निम्नलिखित दर सीमाएँ लागू होती हैं:
- कोड खोज - 30 क्वेरी प्रति मिनट
- कोई अन्य API - 5000 प्रति घंटा
## अनुसंधान ज्ञानकोष (Research Knowledge Base)
- [Issue Injections](https://github.com/CycodeLabs/raven/blob/main/docs/Issue%20Injections/README.md)
- [Pull Request Injections](https://github.com/CycodeLabs/raven/blob/main/docs/Pull%20Request%20Injections/README.md)
- [Workflow Run Injections](https://github.com/CycodeLabs/raven/blob/main/docs/Multi%20Prerequisite%20Exploits/README.md)
- [CodeSee Injections](https://github.com/CycodeLabs/raven/blob/main/docs/Codesee%20Injections/README.md)
## वर्तमान सीमाएँ (Current Limitations)
- `Dockerfile` वाले फ़ोल्डर का संदर्भ देकर बाहरी क्रिया चलाना संभव है (बिना `action.yml` के)। वर्तमान में, यह व्यवहार समर्थित नहीं है।
- `docker://...` URL के माध्यम से डॉकर कंटेनर का संदर्भ देकर बाहरी क्रिया चलाना संभव है। वर्तमान में, यह व्यवहार समर्थित नहीं है।
- किसी क्रिया को स्थानीय रूप से संदर्भित करके चलाना संभव है। यह जटिल व्यवहार बनाता है, क्योंकि यह किसी भिन्न रिपॉजिटरी से आ सकता है जिसे पहले चेकआउट किया गया था। वर्तमान व्यवहार इसे मौजूदा रिपॉजिटरी में खोजने का प्रयास करता है।
- हम संपूर्ण वर्कफ़्लो संरचना का मॉडल नहीं बना रहे हैं। यदि अतिरिक्त फ़ील्ड की आवश्यकता है, तो कृपया [योगदान](https://github.com/CycodeLabs/raven/blob/main/CONTRIBUTING.md) दिशानिर्देशों के अनुसार एक पुल रिक्वेस्ट सबमिट करें।
## भविष्य के अनुसंधान कार्य (Future Research Work)
- टेंट विश्लेषण (taint analysis) का कार्यान्वयन। उदाहरण उपयोग मामला - एक उपयोगकर्ता एक पुल रिक्वेस्ट शीर्षक (जो नियंत्रणीय पैरामीटर है) को एक क्रिया पैरामीटर में पास कर सकता है जिसका नाम `data` है। वह क्रिया पैरामीटर एक रन कमांड में उपयोग किया जा सकता है: `- run: echo ${{ inputs.data }}`, जो कोड निष्पादन के लिए एक पथ बनाता है।
- `GITHUB_ENV` के हानिकारक दुरुपयोग के निष्कर्षों के लिए शोध का विस्तार करें। यह पिछले टेंट विश्लेषण का भी उपयोग कर सकता है।
- शोध करें कि क्या `actions/github-script` में एक दिलचस्प खतरे का परिदृश्य है। यदि ऐसा है, तो इसे ग्राफ में मॉडल किया जा सकता है।
## लाइसेंस (License)
[Apache License 2.0](https://github.com/CycodeLabs/raven/blob/main/LICENSE.md)
## हॉल ऑफ फ़ेम - Raven का उपयोग करके पाई गई और खुलासा की गई कमज़ोरियाँ
| नाम (Name) | सितारे (Stars) | फिक्स (Fix) | अतिरिक्त स्रोत (Additional Sources) |
| ------ | -------- | ---- | -------------------- |
| [freeCodeCamp/freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp) |  | CodeSee पैकेज अपडेट, [0871341](https://github.com/freeCodeCamp/freeCodeCamp/commit/0871341c9cbf96ab455bc3e0bce636e2ef2a2be2) | [ब्लॉग](https://cycode.com/blog/cycode-secures-thousands-of-open-source-projects/) |
| [Significant-Gravitas/AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) |  | [cdae7f8](https://github.com/Significant-Gravitas/AutoGPT/pull/6313/commits/cdae7f84ce0b2879fdcc1fa04956cdaa42a07bfb) | | [storybookjs/storybook](https://github.com/storybookjs/storybook) |  | [ffb8558](https://github.com/storybookjs/storybook/commit/ffb8558b7e5df4644299e5ec7009ade6ca1a721c) | [ब्लॉग](https://cycode.com/ci-story-how-we-found-critical-vulnerabilities-in-storybook-project/) |
| [tiangolo/fastapi](https://github.com/tiangolo/fastapi) |  | [9efab1b](https://github.com/tiangolo/fastapi/commit/9efab1bd96ef061edf1753626573a0a2be1eef09) | [LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7011753940283203584/) |
| [withastro/astro](https://github.com/withastro/astro) |  | [650fb1a](https://github.com/withastro/astro/commit/650fb1aa51a1c843c10bc89a11732b45a6345b00) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [statelyai/xstate](https://github.com/statelyai/xstate) |  | CodeSee पैकेज अपडेट | [ब्लॉग](https://cycode.com/blog/cycode-secures-thousands-of-open-source-projects/) |
| [bazelbuild/bazel](https://github.com/bazelbuild/bazel) |  | [3561f07](https://github.com/bazelbuild/continuous-integration/commit/3561f079e0414d31ebba923815695e1e714937cb) | [ब्लॉग](https://cycode.com/blog/cycode-discovers-a-supply-chain-vulnerability-in-bazel/) |
| [docker-slim/docker-slim](https://github.com/docker-slim/docker-slim) |  | CodeSee पैकेज अपडेट | [ब्लॉग](https://cycode.com/blog/cycode-secures-thousands-of-open-source-projects/) |
| [microsoft/fluentui](https://github.com/microsoft/fluentui) |  | [2ea6195](https://github.com/microsoft/fluentui/commit/2ea6195152131766641311ee5604e746b578d8e7) | [ब्लॉग](https://cycode.com/blog/analyzing-the-vulnerability-that-could-have-compromised-microsoft-365-users/) |
| [tiangolo/sqlmodel](https://github.com/tiangolo/sqlmodel) |  | [cf36b2d](https://github.com/tiangolo/sqlmodel/commit/cf36b2d9baccf527bc61071850f102e2cd8bf6bf) | [LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7011753940283203584/) |
| [tiangolo/typer](https://github.com/tiangolo/typer) |  | [0c106a1](https://github.com/tiangolo/typer/commit/0c106a169e5e3c7df6f98e32a6d8405c985b695a) | [LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7011753940283203584/) |
| [juspay/hyperswitch](https://github.com/juspay/hyperswitch) |  | [a052f9a](https://github.com/juspay/hyperswitch/pull/2797/commits/a052f9a9c921ec0ff8c526097841be5777faf835) | |
| [autogluon/autogluon](https://github.com/autogluon/autogluon) |  | [ca18fa9](https://github.com/autogluon/autogluon/commit/ca18fa9fa2071f670125fd19700cf3570a6b5119) | |
| [apache/camel](https://github.com/apache/camel) |  | [02e512a](https://github.com/apache/camel/pull/11879/commits/02e512ae1ab0a471e80d86096ea79b45789aa105) | | [liquibase/liquibase](https://github.com/liquibase/liquibase) |  | [3278525](https://github.com/liquibase/liquibase/commit/3278525eaf974daea20808926f9a6816aecd01a7) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [ossf/scorecard](https://github.com/ossf/scorecard) |  | [c9f582b](https://github.com/ossf/scorecard/commit/c9f582b620a57a1a476f4e3add505ff50c51a774) | |
| [Ombi-app/Ombi](https://github.com/Ombi-app/Ombi) |  | [5cc0d77](https://github.com/Ombi-app/Ombi/commit/5cc0d7727d72fe1fee8a3f6c3874d44a5b785de4) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [wireapp/wire-ios](https://github.com/wireapp/wire-ios) |  | [9d39d6c](https://github.com/wireapp/wire-ios/commit/9d39d6c93b5a58a0bc8c1aba10e0d67756359630) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [cloudscape-design/components](https://github.com/cloudscape-design/components) |  | [2921d2d](https://github.com/cloudscape-design/.github/commit/2921d2d1420fef5b849d5aecbcfb9138ac6b9dcc) | |
| [DynamoDS/Dynamo](https://github.com/DynamoDS/Dynamo) |  | वर्कफ़्लो अक्षम कर दिया गया | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [fauna/faunadb-js](https://github.com/fauna/faunadb-js) |  | [ee6f53f](https://github.com/fauna/faunadb-js/commit/ee6f53f9c985bde41976743530e3846dee058587) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
| [apache/incubator-kie-kogito-runtimes](https://github.com/apache/incubator-kie-kogito-runtimes) |  | [53c18e5](https://github.com/apache/incubator-kie-kogito-runtimes/commit/53c18e5372e5306e0aa580f201f820b80359ad11) | [ब्लॉग](https://cycode.com/github-actions-vulnerabilities/) |
## CI/CD सुरक्षा, AppSec और ASPM के बारे में और अधिक जानकारी चाहिए? Cycode देखें
यदि आपको Raven पसंद आया, तो आपको संभवतः हमारा [Cycode](https://cycode.com/?utm_source=github_website&utm_medium=referral&utm_campaign=raven_page) प्लेटफ़ॉर्म पसंद आएगा जो सॉफ़्टवेयर डिलीवरी में कमज़ोरियों की दृश्यता, प्राथमिकता और सुधार के लिए और भी अधिक उन्नत क्षमताएँ प्रदान करता है।
यदि आप एक मजबूत, शोध-संचालित पाइपलाइन सुरक्षा, एप्लिकेशन सुरक्षा, या ASPM समाधान में रुचि रखते हैं, तो कृपया हमसे संपर्क करने या फ़ॉर्म के माध्यमից डेमो का अनुरोध करने में संकोच न करें [https://cycode.com/book-a-demo/](https://cycode.com/book-a-demo/?utm_source=github_website&utm_medium=referral&utm_campaign=raven_page).