2 पॉइंट द्वारा GN⁺ 2024-05-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें

समस्या

  • पिछली रात, 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⁺ की राय

  1. सुरक्षा कमजोरी: यह लेख इस बात की ओर इशारा करता है कि Go का checksum database मनचाहा data स्टोर कर सकता है. इससे malicious code को आसानी से वितरित करने का रास्ता मिल सकता है.
  2. सुधार की जरूरत: Go infrastructure की सुरक्षा और integrity मजबूत करने के लिए checksum database और proxy server के access control में सुधार की जरूरत है.
  3. दूसरी भाषाओं के साथ एकीकरण: checksum database में non-Go projects शामिल होने की वजह को स्पष्ट करना और इसे रोकने के लिए अतिरिक्त validation प्रक्रिया की जरूरत है.
  4. डेवलपर शिक्षा: developers को ऐसी security weaknesses के बारे में जागरूक करना और उनसे बचने के best practices समझाना ज़रूरी है.
  5. वैकल्पिक समाधान: समान सुविधा देने वाले दूसरी भाषाओं के checksum databases और proxy servers की तुलना करके Go infrastructure सुधारने में संदर्भ लिया जा सकता है.

1 टिप्पणियां

 
GN⁺ 2024-05-26
Hacker News राय

Hacker News टिप्पणियों का सारांश

  • ऑनलाइन सेवाओं के दुरुपयोग की संभावना

    • हर ऑनलाइन सेवा का अंततः command and control, copyright infringement, और CSAM hosting के लिए दुरुपयोग होने की संभावना रहती है। Twitter, Telegram, PGP key infrastructure आदि में ऐसे मामले पहले से मौजूद हैं।
  • Google की file hosting समस्या

    • Google अक्सर malicious file hosting की समस्या से निपटता है, इसलिए संभव है कि Go टीम ने GCP और Drive के साथ मिलकर काम किया हो। यह Google द्वारा पहले से अनुमति दिए गए दूसरे endpoints से बहुत अलग नहीं है।
  • GitHub से तुलना

    • कुछ लोगों का मानना है कि यह GitHub पर files upload करने से बहुत अलग नहीं है। GitHub में भी केवल account होने पर arbitrary data store किया जा सकता है।
  • PyPI पर non-Python projects

    • PyPI पर non-Python projects भी हैं, और जब उपयोगकर्ता library code compile नहीं कर सकते, तब wheels (compiled binaries) distribute करने की सुविधा की ज़रूरत होती है। C और Golang में लिखे गए code भी इसमें शामिल हो सकते हैं।
  • Golang proxy और checksum log

    • किसी ने Golang proxy और sumdb का उपयोग करके arbitrary URL checksums को transparently record करने के विचार को आज़माने का अनुभव साझा किया।
  • डोमेन की खोजबीन

    • किसी खास domain को explore करने पर उसमें ज़्यादातर वही चीज़ें मिलीं जिनकी उम्मीद थी।
  • ज्ञात समस्या

    • Golang की एक known issue का link साझा किया गया।
  • CUE का module system

    • CUE का module system रिलीज़ हो रहा है, और हालांकि Go का MVS पसंद किया जाता है, यह OCI infrastructure पर बनाया गया है। अगर dependency management systems में रुचि है, तो संबंधित link देखा जा सकता है।
  • web cache समस्या

    • W3C ने web की लगभग हर चीज़ को cacheable बना दिया, लेकिन फिर भी general-purpose proxy caches लगभग नहीं के बराबर हैं। सवाल यह है कि क्या publishers बेवजह बहुत छोटे Cache-Control: max-age या Vary: Cookie responses भेजते हैं, या फिर बहुत से ISPs transit cost चुकाते हैं।
  • proxy cache समस्या

    • non-Go repositories को proxy द्वारा cache करना बेकार लग सकता है, लेकिन अगर Go repositories को cacheable बनाया जाए तो arbitrary data store किया जा सकता है। इसे बहुत बड़ी समस्या नहीं माना गया।