एक तेज़ सार्वभौमिक कोड सुरक्षा स्कैनर, जो Rust में लिखा गया है। सभी आवश्यक सुविधाओं के साथ: 14 भाषाओं का समर्थन, ट्रायेज के लिए TUI, सीक्रेट्स, पोस्ट-क्वांटम ऑडिट, डिफ-अवेयर स्कैन और अधिक 𓃥
<p align="center"> <img src="https://raw.githubusercontent.com/0sec-labs/foxguard/main/www/public/foxguard-logo.png" width="128" alt="foxguard" /> </p> <h1 align="center">foxguard</h1> <p align="center"> <strong>कोड, सीक्रेट्स, डिपेंडेंसीज़ और क्रिप्टो जोखिम के लिए तेज़ लोकल सुरक्षा स्कैनिंग।</strong> <br /> <sub>ओपन साइबरसिक्योरिटी हार्नेस <a href="https://github.com/0sec-labs/0sec">0sec</a> में एकीकृत।</sub> </p> <p align="center"> <a href="https://github.com/0sec-labs/foxguard/actions/workflows/ci.yml"><img src="https://github.com/0sec-labs/foxguard/actions/workflows/ci.yml/badge.svg" alt="CI" /></a> <a href="https://github.com/0sec-labs/foxguard"><img src="https://img.shields.io/badge/foxguard-clean-3fb950" alt="foxguard: clean" /></a> <a href="https://crates.io/crates/foxguard"><img src="https://img.shields.io/crates/v/foxguard?color=d97706&label=crates.io" alt="crates.io" /></a> <a href="https://www.npmjs.com/package/foxguard"><img src="https://img.shields.io/npm/v/foxguard?color=d97706&label=npm" alt="npm" /></a> <a href="https://pypi.org/project/foxguard/"><img src="https://img.shields.io/pypi/v/foxguard?color=d97706&label=PyPI" alt="PyPI" /></a> <a href="https://github.com/apps/foxguard-app/installations/new"><img src="https://img.shields.io/badge/GitHub_App-Install-2ea44f?logo=github" alt="Install GitHub App" /></a> </p> ```sh npx foxguard . ``` <p align="center"> <img src="https://assets.kitploit.com/production/public/readmes/13909/2ce579a58299a47cd3e965f13b97bf1c5dcaf020496d4a4eb2141d414ff7bd0c.gif" alt="foxguard scan demo" width="640" /> </p> ## क्यों - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/checklist.png" alt=""> 12 सोर्स भाषाओं में 200+ अंतर्निहित नियम, साथ ही कॉन्फ़िग और मैनिफ़ेस्ट जाँचें - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/git-branch.png" alt=""> 14 भाषाओं के लिए टेंट ट्रैकिंग, Python, JavaScript, Go, Java, Ruby, PHP, C#, और Kotlin के लिए क्रॉस-फ़ाइल विश्लेषण के साथ - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/zap.png" alt=""> तेज़ लोकल और CI स्कैन, "इस ब्रांच ने क्या जोड़ा?" के लिए diff मोड के साथ - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/key.png" alt=""> सीक्रेट्स स्कैनिंग, OSV-समर्थित डिपेंडेंसी स्कैनिंग, और पोस्ट-क्वांटम क्रिप्टो ऑडिट - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/plug.png" alt=""> Semgrep/OpenGrep-संगत YAML ब्रिज जो सार्वजनिक रजिस्ट्री का ~98% लोड करता है ([कवरेज रिपोर्ट](https://github.com/0sec-labs/foxguard/blob/main/docs/parity/registry-coverage.md)) - <img height="14" src="https://raw.githubusercontent.com/0sec-labs/.github/main/profile/assets/icons/file-code.png" alt=""> Terminal, JSON, SARIF, CycloneDX 1.6 CBOM, और Semgrep-संगत JSON आउटपुट ## इंस्टॉल ```sh npx foxguard . # zero install pipx install foxguard # prebuilt CLI from PyPI curl -fsSL https://foxguard.dev/install.sh | sh # prebuilt binary (macOS/Linux) cargo install foxguard # from source ``` स्टैंडअलोन बाइनरी इंस्टॉलर GitHub रिलीज़ बाइनरीज़ को `checksums.txt` के विरुद्ध सत्यापित करते हैं। रिलीज़ बाइनरीज़ GitHub आर्टिफ़ैक्ट अटेस्टेशन भी प्रकाशित करती हैं; मैन्युअल सत्यापन के लिए `gh attestation verify` का उपयोग करें, या [रिलीज़ प्रोवेनेंस](https://github.com/0sec-labs/foxguard/blob/main/docs/release-provenance.md) देखें। PyPI व्हील्स Linux glibc 2.28+ (x86_64/ARM64), macOS (Intel/Apple Silicon), और Windows x86_64 पर Python 3.9+ का समर्थन करते हैं। किसी मौजूदा Python वर्चुअल एनवायरनमेंट में, इसके बजाय `python -m pip install foxguard` का उपयोग करें। ये Rust कंपाइलर या रनटाइम बाइनरी डाउनलोड के बिना नेटिव CLI इंस्टॉल करते हैं; कोई Python API प्रदान नहीं किया जाता। Alpine/musl उपयोगकर्ताओं को स्टैंडअलोन Linux रिलीज़ बाइनरीज़ का उपयोग करना चाहिए। **GitHub Action:** ```yaml - uses: 0sec-labs/foxguard/[email protected] with: path: . severity: medium fail-on-findings: "true" upload-sarif: "true" ``` **pre-commit:** ```yaml repos: - repo: https://github.com/0sec-labs/foxguard rev: v0.14.0 hooks: - id: foxguard ``` इंटीग्रेशन: [GitHub App](https://github.com/apps/foxguard-app/installations/new), [VS Code](https://marketplace.visualstudio.com/items?itemName=peaktwilight.foxguard), [Claude Code प्लगइन](https://github.com/0sec-labs/foxguard/blob/main/docs/claude-code-integration.md), और [MCP सर्वर](https://github.com/0sec-labs/foxguard/blob/main/docs/mcp-server.md)। ### होस्टेड GitHub App संचालन `foxguard-github-app` न्यूलाइन-डिलिमिटेड JSON लॉग लिखता है। पूर्ण और विफल स्कैन `event=foxguard.scan.completed` और `event=foxguard.scan.failed` का उपयोग करते हैं, जिसमें सहसंबंध के लिए delivery, installation, repository, PR, commit, duration, और `usage_scope` फ़ील्ड होते हैं। पहचानकर्ताओं को लॉग फ़ील्ड के रूप में रखें, मेट्रिक लेबल के रूप में नहीं। `FOXGUARD_INTERNAL_ACCOUNTS` को अपने स्वयं के GitHub खातों और संगठनों की कॉमा-सेपरेटेड सूची पर सेट करें। मिलान केस-असंवेदनशील है। अन्य स्वामी `external` के रूप में वर्गीकृत होते हैं; अनसेट सूची या अनुपस्थित स्वामी `unknown` उत्पन्न करता है। बाहरी गतिविधि भुगतान करने वाले ग्राहक का प्रमाण नहीं है, और स्कैन लोग नहीं हैं। इंस्टॉलेशन रजिस्ट्री को स्टार्टअप पर और हर घंटे GitHub के App installation API के सभी पेजों के विरुद्ध समाधान किया जाता है। विफल रीफ़्रेश मौजूदा स्थिति बनाए रखते हैं; समवर्ती वेबहुक प्राथमिकता लेते हैं। विरल वेबहुक मेटाडेटा ज्ञात खाता विवरण और देखे गए रिपॉज़िटरी नामों को संरक्षित करता है। वे नाम किसी इंस्टॉलेशन की सुलभ रिपॉज़िटरीज़ की पूर्ण सूची नहीं हैं। `FOXGUARD_INSTALLATIONS_PATH` और `FOXGUARD_PULL_REQUEST_JOBS_PATH` को टिकाऊ स्टोरेज पर बनाए रखें। स्कैन विफलताओं के साथ-साथ `foxguard.installations.reconcile_failed` की निगरानी करें; `foxguard.installations.reconciled` सफल रीफ़्रेश के बाद कुल और internal/external/unknown इंस्टॉलेशन गणनाएँ रिपोर्ट करता है। `FOXGUARD_PR_WORKERS` का आकार मापी गई स्कैनर पीक मेमोरी और कंटेनर मेमोरी सीमा के अनुसार निर्धारित करें: चाइल्ड-प्रोसेस OOM किल होस्टेड एप्लिकेशन को रीस्टार्ट किए बिना हो सकते हैं। ## त्वरित शुरुआत ```sh foxguard . # scan everything foxguard diff main . # only new findings vs main foxguard tui . # interactive terminal review foxguard secrets . # leaked credentials and keys foxguard sca . # dependency vulnerabilities from OSV foxguard pqc . # post-quantum crypto audit foxguard --format sarif . > results.sarif foxguard --format semgrep-json . # Semgrep CLI-compatible JSON ``` समर्थित टेंट फ़िक्स को इन-प्लेस लागू करने के लिए `foxguard --fix src/` या `foxguard --fix src/app.py` का उपयोग करें। लक्ष्यों को कैनोनिकल स्कैन डायरेक्टरी या चयनित फ़ाइल के विरुद्ध जाँचा जाता है; उस दायरे के बाहर की फ़ाइंडिंग्स छोड़ दी जाती हैं। Python कमांड-इंजेक्शन फ़िक्स आवश्यक होने पर `import subprocess` जोड़ते हैं, मॉड्यूल डॉकस्ट्रिंग्स और future इम्पोर्ट्स को संरक्षित रखते हुए। कमिट करने से पहले जनरेट किए गए परिवर्तनों की समीक्षा करें। नेटिव कोड स्कैनर में फ़ाइल पढ़ने, मेटाडेटा, और डायरेक्टरी-ट्रैवर्सल विफलताएँ सफल रिपोर्ट उत्पन्न करने या बेसलाइन को ओवरराइट करने के बजाय `2` के साथ बाहर निकलती हैं। जानबूझकर किए गए बहिष्करण और असमर्थित, बाइनरी, या ओवरसाइज़्ड फ़ाइलें स्किप रहती हैं; स्कैन कवरेज की जाँच करते समय स्किप की गई फ़ाइल सूचनाओं का निरीक्षण करें। ## टर्मिनल समीक्षा `foxguard tui .` चलाएँ और तीरों या Tab से **Scan**, **Diff**, **Secrets**, या **PQC** चुनें। Diff मोड में, Enter दबाने से पहले टारगेट ब्रांच टाइप करें। चौड़े टर्मिनल फ़ाइंडिंग्स को उनके विवरण के बगल में दिखाते हैं; छोटे टर्मिनल एक सूची का उपयोग करते हैं जिसमें विस्तार योग्य विवरण दृश्य होता है। सोर्स कॉन्टेक्स्ट, डेटाफ़्लो, और फ़िक्स जब भी फ़ाइंडिंग उन्हें प्रदान करती है, स्क्रॉल करने योग्य रहते हैं। हेडर स्कैन आँकड़ों को बेसलाइन श्रेणियों से अलग करता है। चयनित सोर्स रेंज इनलाइन हाइलाइट किए जाते हैं, बिना अतिरिक्त एनोटेशन पंक्तियों के। ओपनिंग कंट्रोल्स लाइव डिटेल पेन के नीचे रहते हैं जबकि इसकी सामग्री स्क्रॉल होती है, और छोटे किए गए फ़ाइल स्थान अपने लाइन और कॉलम सफ़िक्स बनाए रखते हैं। सर्च और डायलॉग सक्रिय रहने के दौरान अपने शॉर्टकट्स के स्वामी होते हैं। यदि सोर्स कॉन्टेक्स्ट लोड नहीं किया जा सकता, तो सहेजा गया फ़ाइंडिंग स्निपेट उपलब्ध रहता है। सीक्रेट्स डिटेल पेन में कच्चा सोर्स लोड करने के बजाय रिडैक्टेड स्निपेट्स का उपयोग करते हैं। लोडिंग कार्ड अनिश्चित गतिविधि और वास्तविक बीता समय दिखाता है, प्रतिशत अनुमान नहीं। स्कैनिंग के दौरान Ctrl+C बाहर निकलता है। | कुंजी | क्रिया | |-----|--------| | `j` / `k`, तीर, Home / End | फ़ाइंडिंग्स के बीच नेविगेट करें | | `v` | विवरण विस्तारित करें या सूची/स्प्लिट दृश्य पर लौटें | | PageUp / PageDown | सूची को पेज करें, या दृश्यमान विवरण स्क्रॉल करें | | `/`, Enter | सर्च संपादित करें और लागू करें | | Ctrl+U | संपादित की जा रही सर्च साफ़ करें | | Esc | मोडल बंद करें, सर्च संपादन रद्द करें, विस्तारित विवरण छोड़ें, या लागू फ़िल्टर साफ़ करें | | `0`–`4`, `c`, Shift+C | न्यूनतम गंभीरता, विश्वास सीमा, और सॉर्ट क्रम | | `f` | All → Unreviewed → Todo → Reviewed → Ignore चक्रित करें | | `i` | ट्राइएज क्रियाओं का पूर्वावलोकन करें और लागू करें | | Space, `a`, `x` | एक फ़ाइंडिंग चेक करें, दृश्यमान चयन टॉगल करें, और बैच क्रिया का पूर्वावलोकन करें | | Shift+F | नामित फ़िल्टर सहेजें, लोड करें, बदलें, या हटाएँ; समीक्षा स्टोरेज रिकवर करें | | `b` | तुलना उपलब्ध होने पर बेसलाइन श्रेणियाँ चक्रित करें | | Tab, Enter / `o` | फ़ाइंडिंग/सोर्स/सिंक चुनें और इसे अपने एडिटर में खोलें | | `w`, `[` / `]` | सूचनाएँ दिखाएँ और उनका इतिहास स्क्रॉल करें; नवीनतम सूचनाएँ पहले दिखाई देती हैं | | `e` | CBOM, JSON, या SARIF निर्यात करें | | `?`, `q` / Ctrl+C | सहायता और बाहर निकलें; Ctrl+C हर मोडल के अंदर भी काम करता है | Enter और `o` एक गैर-रिक्त `$VISUAL`, फिर `$EDITOR` का उपयोग करते हैं। दोनों सेटिंग्स के बिना, foxguard उपलब्ध डेस्कटॉप ओपनर पर विचार करने से पहले `PATH` पर `nvim`, `vim`, `nano`, या `vi` खोजता है। हेडलेस टर्मिनल को `xdg-open` की आवश्यकता नहीं होती। उदाहरण के लिए, `VISUAL="nvim" foxguard tui .` चलाएँ या `EDITOR='code --wait'` सेट करें। टूटी हुई स्पष्ट एडिटर सेटिंग को चुपचाप बदलने के बजाय रिपोर्ट किया जाता है; यदि कोई एडिटर उपलब्ध नहीं है, तो TUI सेटअप मार्गदर्शन के साथ खुला रहता है। समर्थित एडिटर चयनित फ़ाइंडिंग/सोर्स/सिंक लाइन पर जाते हैं। समीक्षा मार्क्स स्वचालित रूप से प्रति-उपयोगकर्ता स्टोरेज में बने रहते हैं, जो कैनोनिकल प्रोजेक्ट रूट और स्कैन मोड (Diff मोड में टारगेट सहित) तक सीमित हैं। नामित फ़िल्टर Shift+F से लोड करने पर सर्च, गंभीरता, विश्वास, समीक्षा स्थिति, सॉर्टिंग, और बेसलाइन श्रेणी को पुनर्स्थापित करते हैं। वे रिपॉज़िटरी स्कैन कॉन्फ़िगरेशन को नहीं बदलते। सूची दृश्यमान/कुल फ़ाइंडिंग्स और समीक्षा प्रगति दिखाती है; फ़िल्टर या सॉर्टिंग बदलने पर वही फ़ाइंडिंग चयनित रहती है जब वह दृश्यमान रहती है। सर्च संपादन रद्द करने पर पहले लागू की गई क्वेरी पुनर्स्थापित होती है। चेक की गई फ़ाइंडिंग्स फ़िल्टर परिवर्तनों के बाद भी बनी रहती हैं। `x` बैच क्रियाएँ खोलता है; Enter सटीक लक्ष्य, छिपे-चयन की गिनती, गंतव्य, और प्रभाव दायरा दिखाता है। केवल `y` पूर्वावलोकन लागू करता है; फिर से Enter इसे पुष्ट नहीं करता, और Esc बिना लिखे रद्द करता है। बेसलाइन क्रियाएँ सटीक फ़िंगरप्रिंट जोड़ती हैं। नियम/फ़ाइल और प्रोजेक्ट-व्यापी कॉन्फ़िगरेशन क्रियाएँ अचयनित फ़ाइंडिंग्स को भी प्रभावित कर सकती हैं, जैसा कि पूर्वावलोकन चेतावनी देता है। यदि कोई कॉन्फ़िगरेशन लक्ष्य विफल होता है, तो सफल लेखन बने रहते हैं और परिणाम रिपोर्ट किए जाते हैं; बैच एक ट्रांज़ैक्शन नहीं है। स्टोरेज Linux पर `$XDG_STATE_HOME/foxguard/tui` (या `~/.local/state/foxguard/tui`), macOS पर Application Support, और Windows पर `%LOCALAPPDATA%` का उपयोग करता है। एटॉमिक राइट्स और रिवीज़न चेक एक टर्मिनल को दूसरे को चुपचाप ओवरराइट करने से रोकते हैं। स्टोरेज त्रुटियाँ लोकल परिवर्तनों को स्पष्ट रूप से **UNSAVED** छोड़ती हैं। Shift+F में, `w` सहेजने का पुनः प्रयास करता है, `r` स्पष्ट रूप से डिस्क से रीलोड करता है, और Shift+R वर्तमान प्रोजेक्ट/मोड के बैकअप-और-रीसेट की पुष्टि करता है। रीलोड/रीसेट बिना सहेजे परिवर्तनों को खारिज कर सकते हैं; रीसेट पिछले ऑन-डिस्क बाइट्स को संरक्षित करता है, बिना सहेजे मार्क्स को नहीं। समीक्षा स्टोरेज में फ़िंगरप्रिंट और फ़िल्टर सेटिंग्स होती हैं, सोर्स कोड नहीं। निर्यात वर्तमान स्कैन के परिणाम शामिल करते हैं, केवल दृश्यमान फ़िल्टर की गई पंक्तियाँ नहीं, और वर्तमान वर्किंग डायरेक्टरी में लिखे जाते हैं। मौजूदा नियमित फ़ाइलों के लिए स्पष्ट `y` पुष्टि आवश्यक है; Esc रद्द करता है। राइट्स एटॉमिक हैं और गंतव्य सिमलिंक, डैंगलिंग लिंक सहित, अस्वीकार किए जाते हैं। सहेजी गई बेसलाइन तुलना की समीक्षा के लिए `foxguard tui --baseline .foxguard/baseline.json .` का उपयोग करें। CLI सप्रेशन के विपरीत, टर्मिनल समीक्षा वर्तमान फ़ाइंडिंग्स को बनाए रखती है और **introduced**, **recurring**, और **resolved** प्रविष्टियों को अलग करती है। Resolved का अर्थ वर्तमान स्कैन के आउटपुट में अनुपस्थित है, सत्यापित उपचार नहीं: समतुल्य दायरा, नियम, और थ्रेशोल्ड की तुलना करें। बेसलाइन पहचान में फ़ाइल और सोर्स स्थान शामिल है, इसलिए किसी फ़ाइंडिंग को स्थानांतरित करना introduced प्लस resolved के रूप में दिखाई दे सकता है। Resolved पंक्तियाँ रीड-ओनली ऐतिहासिक मेटाडेटा हैं; केवल सर्च लागू होती है, और `v` उनके स्क्रॉल करने योग्य विवरण विस्तारित करता है। वर्तमान स्कैन को ट्राइएज या निर्यात करने के लिए वर्तमान-फ़ाइंडिंग श्रेणी पर वापस स्विच करें। Git Diff एक ब्रांच के विरुद्ध एक अलग तुलना बना रहता है। ## भाषा कवरेज | भाषा | अंतर्निहित नियम | टेंट ट्रैकिंग | फ़्रेमवर्क-जागरूक नियम | |----------|:-:|:-:|---| | JavaScript / TypeScript | हाँ | हाँ | Express, Next.js | | Python | हाँ | हाँ | Django, Flask, FastAPI | | Go | हाँ | हाँ | Gin | | Kotlin | हाँ | हाँ | Spring | | Java | हाँ | हाँ | Spring | | Ruby | हाँ | हाँ | Rails | | PHP | हाँ | हाँ | Laravel | | Rust | हाँ | -- | -- | | C# | हाँ | हाँ | .NET | | Swift | हाँ | हाँ | iOS | | Haskell | हाँ | -- | Cardano seed rules | टेंट ट्रैकिंग C, Bash, और Solidity को भी कवर करती है। कॉन्फ़िग, मैनिफ़ेस्ट, और बाहरी-नियम स्कैन Dockerfile, Nginx, Apache, HAProxy, HCL/Terraform, YAML/JSON/XML/HTML, Semgrep YAML/Coccinelle के माध्यम से C, और अधिक को कवर करते हैं। ## सुरक्षा मोड ```sh foxguard sca . foxguard pqc . foxguard --rules ./semgrep-rules . ``` SCA `Cargo.lock`, `package-lock.json`, `pnpm-lock.yaml`, `requirements.txt`, `poetry.lock`, और `Pipfile.lock` का समर्थन करता है। PQC ऑडिट एक दो-तरफ़ा स्कोरकार्ड है: यह CNSA 2.0 माइग्रेशन समय-सीमाओं के साथ क्वांटम-संवेदनशील प्रिमिटिव्स (RSA, ECDSA/DSA, ECDH/DH) को फ़्लैग करता है, और यह पहले से उपयोग किए जा रहे पोस्ट-क्वांटम एल्गोरिदम (ML-KEM, ML-DSA, SLH-DSA, FN-DSA, HQC, और X25519MLKEM768 जैसे हाइब्रिड) को सूचनात्मक, क्वांटम-प्रतिरोधी इन्वेंटरी के रूप में भी पहचानता है — माइग्रेशन-तैयारी प्रतिशत रिपोर्ट करते हुए। दोनों पक्ष CycloneDX 1.6 CBOM में निर्यात होते हैं, जहाँ पोस्ट-क्वांटम एल्गोरिदम कमज़ोरियों के बजाय क्वांटम-प्रतिरोधी संपत्तियों के रूप में दिखाई देते हैं। ## कॉन्फ़िगरेशन foxguard स्कैन पथ से ऊपर की ओर `.foxguard.yml` को स्वतः खोजता है। ```yaml scan: baseline: .foxguard/baseline.json disable_rules: [py/no-eval] secrets: exclude_paths: [fixtures, testdata] ``` स्वीकृत फ़ाइंडिंग को `// foxguard: ignore[rule-id]` के साथ इनलाइन दबाएँ। ## दस्तावेज़ीकरण [दस्तावेज़ीकरण सूचकांक](https://github.com/0sec-labs/foxguard/blob/main/docs/README.md) से शुरू करें। मुख्य संदर्भ: [आर्किटेक्चर](https://github.com/0sec-labs/foxguard/blob/main/docs/architecture.md), [Semgrep/OpenGrep संगतता](https://github.com/0sec-labs/foxguard/blob/main/docs/compatibility.md), और [रिलीज़ रनबुक](https://github.com/0sec-labs/foxguard/blob/main/docs/releasing.md)। ## बेंचमार्क | रेपो | LoC | foxguard | Semgrep | स्पीडअप | |------|-----|----------|---------|---------| | express | 15K JS | 0.28s | 6.09s | **22x** | | flask | 14K Py | 0.33s | 6.51s | **20x** | | gin | 18K Go | 0.50s | 4.95s | **10x** | | sentry | 1.3M Py | 35s | 194s | **5x** | `./benchmarks/run.sh` के साथ पुनरुत्पादित करें; परिणाम मशीन के अनुसार भिन्न होते हैं। [`benchmarks/README.md`](https://github.com/0sec-labs/foxguard/blob/main/benchmarks/README.md) देखें। ## योगदान नियम लेखन, परीक्षण, और विकास सेटअप के लिए [`CONTRIBUTING.md`](https://github.com/0sec-labs/foxguard/blob/main/CONTRIBUTING.md) देखें। ## लाइसेंस MIT OR Apache-2.0 -- [0sec Labs](https://0sec.ai)