समस्या
- पिछली रात, Go के checksum database की सामग्री खंगालते समय एक दिलचस्प नतीजा मिला.
sqlite> select path, count(path) from modules group by path order by count(path) desc; कमांड चलाने पर यह परिणाम मिला:
github.com/homebrew/homebrew-core|39438
github.com/Homebrew/homebrew-core|30896
github.com/concourse/concourse|25372
github.com/openshift/release|24065
github.com/cilium/cilium|22138
- Homebrew के बारे में आम तौर पर माना जाता है कि वह Ruby इस्तेमाल करता है, इसलिए Go से उसका संबंध सवाल खड़ा करता था.
- GitHub language statistics ने भी इसकी पुष्टि की.
- Go से जुड़ी फाइलें (
go.mod या Go source files) खोजने के लिए repository clone की गई, लेकिन कुछ भी नहीं मिला.
शोध
- नया दिन शुरू हुआ और जिज्ञासा जवाब मांग रही थी.
- अगर Git repository का Go code से संबंध नहीं है, तो यह Go checksum database में कैसे दिख रही है, यह सवाल था.
- पता चला कि
proxy.golang.org डिफ़ॉल्ट module proxy है और sum.golang.org checksum database है.
- Go के documentation को पढ़ने पर पता चला कि अगर किसी module version को अभी log में रिकॉर्ड नहीं किया गया है, तो checksum database मूल server से module लाने की कोशिश करता है.
- यह जांचने के लिए कि नया Go module repository checksum database और proxy में जोड़ा जाता है या नहीं,
lookup endpoint को कॉल किया गया.
- नया Go module बनाकर GitHub account पर अपलोड करने के बाद,
lookup कमांड को दो रूपों में आजमाया गया, लेकिन दोनों में error आया.
- सही pseudo-version बनाकर checksum database से फिर query की गई ताकि यह पुष्टि हो सके कि module डाउनलोड हुआ या नहीं.
- proxy को query करके module
zip डाउनलोड किया गया और यह साबित किया गया कि मनचाहा data Go infrastructure में स्टोर किया जा सकता है.
दुरुपयोग की संभावना
- इसका इस्तेमाल developer machines और CI/CD servers पर download restrictions को bypass करने के लिए किया जा सकता है.
- malware payload स्टोर कर सकता है और ज़रूरत पड़ने पर उसे proxy से ला सकता है.
proxy.golang.org पर denial-of-service (DoS) attack संभव हो सकता है.
- command-and-control (C2) system को आसानी से लागू किया जा सकता है.
निष्कर्ष
- checksum database process कैसे काम करता है, यह समझ में आ गया.
- फिलहाल यह Go infrastructure में कोई गंभीर समस्या नहीं लगती, लेकिन इसके दुरुपयोग की संभावना है.
- database में non-Go projects होने की वजह को लेकर अभी भी अतिरिक्त सवाल बाकी हैं.
- इस शोध से कई नए विचार मिले हैं और आगे और खोजबीन करने की योजना है.
GN⁺ की राय
- सुरक्षा कमजोरी: यह लेख इस बात की ओर इशारा करता है कि Go का checksum database मनचाहा data स्टोर कर सकता है. इससे malicious code को आसानी से वितरित करने का रास्ता मिल सकता है.
- सुधार की जरूरत: Go infrastructure की सुरक्षा और integrity मजबूत करने के लिए checksum database और proxy server के access control में सुधार की जरूरत है.
- दूसरी भाषाओं के साथ एकीकरण: checksum database में non-Go projects शामिल होने की वजह को स्पष्ट करना और इसे रोकने के लिए अतिरिक्त validation प्रक्रिया की जरूरत है.
- डेवलपर शिक्षा: developers को ऐसी security weaknesses के बारे में जागरूक करना और उनसे बचने के best practices समझाना ज़रूरी है.
- वैकल्पिक समाधान: समान सुविधा देने वाले दूसरी भाषाओं के checksum databases और proxy servers की तुलना करके Go infrastructure सुधारने में संदर्भ लिया जा सकता है.
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों का सारांश
ऑनलाइन सेवाओं के दुरुपयोग की संभावना
Google की file hosting समस्या
GitHub से तुलना
PyPI पर non-Python projects
Golang proxy और checksum log
डोमेन की खोजबीन
ज्ञात समस्या
CUE का module system
web cache समस्या
Cache-Control: max-ageयाVary: Cookieresponses भेजते हैं, या फिर बहुत से ISPs transit cost चुकाते हैं।proxy cache समस्या