- Dependabot की अत्यधिक सूचनाएँ वास्तविक सुरक्षा समस्याओं को हल करने की बजाय डेवलपर्स का समय बर्बाद करती हैं
- Go ecosystem में हुई एक घटना की तरह, अप्रभावित repositories में भी हज़ारों PR और warnings बन जाती हैं, जिससे भ्रम पैदा होता है
- govulncheck-आधारित GitHub Action का उपयोग करने पर केवल वास्तव में vulnerable code ही detect होता है, और अनावश्यक warnings हटाई जा सकती हैं
- dependency updates को automated PR की बजाय नियमित testing और latest version verification के साथ manage करना अधिक सुरक्षित और अधिक प्रभावी है
- यह तरीका alert fatigue को कम करने और open source maintainers पर पड़ने वाला बोझ हल्का करने में महत्वपूर्ण है
Dependabot की समस्याएँ
- Dependabot बड़े पैमाने पर security alerts और automated PR बनाता है, जिससे डेवलपर्स के लिए वास्तव में महत्वपूर्ण समस्याओं की पहचान करना कठिन हो जाता है
- Go package
filippo.io/edwards25519 में एक मामूली बदलाव पर भी हज़ारों PR बन गए
- अप्रभावित repositories (Wycheproof आदि) तक भी गलत security alerts पहुँच गए
- इन alerts में गलत CVSS scores और कम compatibility indicators शामिल होते हैं, जो अनावश्यक चिंता पैदा करते हैं
- ऐसी अत्यधिक सूचनाओं को security response की विश्वसनीयता और प्रभावशीलता घटाने वाला कारण माना गया है
govulncheck का उपयोग करते हुए विकल्प
- Go Vulnerability Database version, package और symbol स्तर का सूक्ष्म metadata प्रदान करता है
- उदाहरण के लिए
GO-2026-4503 vulnerability केवल Point.MultiScalarMult symbol को प्रभावित करती है
- govulncheck static analysis के माध्यम से केवल वास्तव में callable vulnerable code का पता लगाता है
go mod why के साथ उपयोग करने पर indirect dependency के प्रभाव का सटीक आकलन किया जा सकता है
- जाँच के परिणाम में, vulnerability मौजूद होने पर भी यदि code उस symbol को call नहीं करता, तो warning नहीं दी जाती
- इसे CLI (
govulncheck -json) या Go API (golang.org/x/vuln/scan) के जरिए आसानी से integrate किया जा सकता है
GitHub Actions से प्रतिस्थापन
- Dependabot की जगह govulncheck GitHub Action सेट करके रोज़ाना automated scans चलाए जा सकते हैं
- केवल वास्तविक vulnerabilities मिलने पर ही notification भेजी जाती है
- automated PR न बनने से डेवलपर्स महत्वपूर्ण security issues पर ध्यान केंद्रित कर सकते हैं
- गलत warnings कम होने से security alert fatigue घटती है और response quality बेहतर होती है
- open source maintainers को अनावश्यक PR भेजने की समस्या भी समाप्त हो जाती है
dependency updates को manage करने का तरीका
- dependencies को हर project के development cycle के अनुसार एक साथ manage करना चाहिए
- हर दिन latest versions पर testing की जाए, लेकिन वास्तविक updates केवल आवश्यकता होने पर किए जाएँ
- Go में
go get -u -t ./... और npm में npm update command से latest version testing की जा सकती है
- यह तरीका security vulnerability response speed और stability दोनों सुनिश्चित करता है
- latest version testing से compatibility issues पहले ही पकड़ में आ जाते हैं
- malicious code वाली dependencies को तुरंत deploy होने से रोका जा सकता है
- geomys/sandboxed-step का उपयोग करने पर CI environment में gVisor के साथ isolated execution संभव है
निष्कर्ष और समर्थन पृष्ठभूमि
- Dependabot का automation कई बार security से ज़्यादा noise पैदा करता है
- govulncheck और नियमित testing-आधारित approach अधिक सटीक और लंबे समय तक टिकाऊ security management तरीका है
- लेख के लेखक का open source maintenance Geomys संगठन के माध्यम से Ava Labs, Teleport, Tailscale, Sentry आदि के समर्थन से जारी है
- ऐसा मॉडल open source ecosystem के स्थिर रखरखाव और security quality में सुधार में योगदान देता है
1 टिप्पणियां
Hacker News की राय
लेकिन जो टूल सिर्फ version number और vulnerability DB की तुलना करते हैं, वे यह नहीं समझ पाते कि असली code वास्तव में उस vulnerability के संपर्क में है या नहीं, इसलिए noise बहुत होता है
हाल में मुझे जो टूल प्रभावशाली लगा, वह CodeQL है। इसे GitHub Advanced Security में चलाया जा सकता है, और यह code के वास्तविक flow को ट्रैक करके दिखाता है कि input value किस तरह खतरनाक उपयोग तक पहुँचती है, यानी पूरा path विज़ुअली दिखाता है
इससे ऐसी जानकारी मिलती है जिससे वास्तव में fix किया जा सके, और false positive भी कम होते हैं। हाँ, Python जैसी dynamic language में ऐसा code भी हो सकता है जो detection से बच निकले, लेकिन ज़्यादातर मामलों में यह काफ़ी उपयोगी है
सिर्फ CodeQL की warning से बचने के लिए बेकार के intermediate variable जोड़ने जैसी टिप्पणियाँ आने लगीं। यह data पर overfit किए हुए tool जैसा लगता है
debugpackage maintain करता हूँ, और बेकार ReDoS रिपोर्ट बहुत आती हैं। कुछ मामलों में CVE भी register हो जाती है, इतना कि JS ecosystem छोड़ देने का मन करता हैअगर PR में vulnerable call जुड़ती है तो alert देने के लिए मैं GitHub Action बनाकर इस्तेमाल कर रहा हूँ।
Dependabot auto-merge के साथ मिलाकर देखें तो JS codebase manage करने के लिए भी यह अच्छा combination है
अगर tests काफ़ी हों तो नए version में bug भी पकड़ में आ जाते हैं, और उस प्रक्रिया से open source contribution तक हो जाती है। झंझट भरा है, लेकिन यह अच्छी आदत बना देता है
email notification परेशान करती हैं, और PR का ढेर लगना भी अच्छा नहीं लगता। मैं इन्हें सिर्फ किसी तय समय पर एक साथ निपटाना चाहता हूँ
dependabot.ymlsetting से run frequency और PR की संख्या नियंत्रित की जा सकती हैofficial docs देखें
ख़ुद fix करते हुए issue की संख्या घटाने का तरीका भी अपनाया जा सकता है
व्यक्तिगत रूप से मैं Renovate recommend करूँगा। यह ज़्यादा languages और auto-merge option support करता है
Dependabot की बुनियादी समस्या यह है कि वह dependency management को security problem समझ लेता है।
जिस function को call ही नहीं किया जाता, उसकी vulnerability security issue नहीं बल्कि noise है
Python में मुझे
pip-audit --descDependabot से बेहतर लगता है।जब तक परफ़ेक्ट static analysis नहीं आता, तब तक हर quarter manual review करना शायद ज़्यादा सुरक्षित हो सकता है
यहीं असली security और security practice के बीच की खाई पैदा होती है
ज़्यादातर CVE वास्तव में असर नहीं डालते, फिर भी कंपनियाँ container image में vulnerability count को 0 करने में लगी रहती हैं
ऊपर से dependency update करने पर नई CVE आना लगभग तय है। क्योंकि ज़्यादातर software backport patch नहीं करते
repository ज़्यादा हों और languages भी विविध हों, तो हर जगह परफ़ेक्ट CI workflow जोड़ना अव्यावहारिक हो जाता है
यह परफ़ेक्ट नहीं है, लेकिन कुछ भी न करने से तो कहीं बेहतर है
क्या यह अपने आप CVE generate करता है?
GitHub का vulnerability DB quality से ज़्यादा quantity पर केंद्रित है, और Dependabot बिना दिमाग वाला spam notifier की तरह काम करता है
अगर समस्या सिर्फ function को ग़लत तरीके से call करने पर ही आती है, तो संभव है कि code पहले से ही सही तरह काम नहीं कर रहा था
GCP container image scan, Vanta पर CVE warnings की बाढ़ ला देता है, जिनमें ज़्यादातर या तो fix नहीं की जा सकतीं या ऐसे path से जुड़ी हैं जो वास्तव में इस्तेमाल ही नहीं होते
क्या कोई ऐसा tool है जो इस तरह की context-based filtering कर सके?
नतीजे काफ़ी सकारात्मक रहे हैं, लेकिन codebase बड़ा हो और dependencies बहुत हों, तो CVE की संख्या कम करना अब भी मुश्किल है