2 poin oleh GN⁺ 2024-05-26 | 1 komentar | Bagikan ke WhatsApp

Masalah

  • Tadi malam, saat menelusuri isi basis data checksum Go, ditemukan hasil yang menarik.
  • Setelah menjalankan perintah sqlite> select path, count(path) from modules group by path order by count(path) desc;, hasilnya adalah:
    • 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 dikenal menggunakan Ruby, sehingga kaitannya dengan Go terasa janggal.
  • Statistik bahasa GitHub juga mengonfirmasi hal ini.
  • Repositori dikloning untuk mencari file terkait Go (go.mod atau file sumber Go), tetapi tidak ditemukan apa pun.

Riset

  • Hari baru dimulai, dan rasa ingin tahu menuntut jawaban.
  • Jika repositori Git tidak terkait dengan kode Go, muncul pertanyaan bagaimana repositori itu bisa muncul di basis data checksum Go.
  • Diketahui bahwa proxy.golang.org adalah proxy modul bawaan, dan sum.golang.org adalah basis data checksum.
  • Setelah membaca dokumentasi Go, diketahui bahwa jika versi modul belum tercatat di log, basis data checksum akan mencoba mengambil modul dari server asal.
  • Untuk memastikan apakah repositori modul Go baru ditambahkan ke basis data checksum dan proxy, endpoint lookup dicoba.
  • Setelah membuat modul Go baru dan mengunggahnya ke akun GitHub, perintah lookup dicoba dalam dua bentuk, tetapi keduanya menghasilkan error.
  • Versi pseudo yang benar kemudian dibuat, lalu basis data checksum dikueri lagi untuk memastikan apakah modul telah diunduh.
  • Dengan mengueri proxy dan mengunduh zip modul, terbukti bahwa data arbitrer dapat disimpan di infrastruktur Go.

Potensi penyalahgunaan

  • Dapat digunakan untuk melewati pembatasan unduhan di mesin developer dan server CI/CD.
  • Malware dapat menyimpan payload dan mengambilnya dari proxy saat dibutuhkan.
  • Serangan penolakan layanan (DoS) terhadap proxy.golang.org mungkin dimungkinkan.
  • Sistem command and control (C2) dapat diimplementasikan dengan mudah.

Kesimpulan

  • Kini cara kerja proses basis data checksum lebih dipahami.
  • Untuk saat ini, ini bukan masalah serius pada infrastruktur Go, tetapi ada potensi penyalahgunaan.
  • Masih ada pertanyaan lanjutan tentang mengapa proyek non-Go ada di basis data tersebut.
  • Riset ini memunculkan banyak ide, dan akan terus dieksplorasi.

Opini GN⁺

  1. Kerentanan keamanan: Artikel ini menyoroti kerentanan keamanan pada basis data checksum Go yang memungkinkan penyimpanan data arbitrer. Hal ini dapat membuka jalur distribusi malware dengan lebih mudah.
  2. Perlu perbaikan: Untuk memperkuat keamanan dan integritas infrastruktur Go, kontrol akses pada basis data checksum dan server proxy perlu ditingkatkan.
  3. Integrasi dengan bahasa lain: Alasan mengapa proyek non-Go masuk ke basis data checksum Go perlu diperjelas, dan dibutuhkan prosedur verifikasi tambahan untuk mencegahnya.
  4. Edukasi developer: Developer perlu diedukasi agar memahami kerentanan keamanan semacam ini dan mengetahui praktik terbaik untuk mencegahnya.
  5. Solusi alternatif: Basis data checksum dan server proxy dari bahasa lain dengan fungsi serupa dapat dibandingkan untuk dijadikan referensi dalam meningkatkan infrastruktur Go.

1 komentar

 
GN⁺ 2024-05-26
Komentar Hacker News

Ringkasan kumpulan komentar Hacker News

  • Potensi penyalahgunaan layanan online

    • Semua layanan online pada akhirnya berpotensi disalahgunakan untuk command and control, pelanggaran hak cipta, dan hosting CSAM. Twitter, Telegram, dan infrastruktur kunci PGP juga sudah memiliki kasus seperti ini.
  • Masalah hosting file Google

    • Google sering menangani masalah hosting file berbahaya, jadi ada kemungkinan tim Go bekerja sama dengan GCP dan Drive. Ini tidak jauh berbeda dari endpoint lain yang sudah diizinkan Google.
  • Perbandingan dengan GitHub

    • Ada pendapat bahwa ini tidak jauh berbeda dari mengunggah file ke GitHub. GitHub juga bisa menyimpan data arbitrer selama memiliki akun.
  • Proyek non-Python di PyPI

    • Di PyPI juga ada proyek non-Python, dan diperlukan fitur untuk mendistribusikan wheel (biner terkompilasi) jika pengguna tidak bisa mengompilasi kode pustaka. Ini juga dimungkinkan untuk kode yang ditulis dalam C dan Golang.
  • Proxy Golang dan log checksum

    • Ada yang pernah mencoba ide menggunakan proxy Golang dan sumdb untuk mencatat checksum URL arbitrer secara transparan.
  • Penelusuran domain

    • Saat menelusuri domain tertentu, ternyata sebagian besar isi yang diperkirakan memang ada di sana.
  • Masalah yang sudah diketahui

    • Dibagikan tautan tentang masalah yang sudah diketahui di Golang.
  • Sistem modul CUE

    • Sistem modul CUE sedang dirilis, menyukai MVS milik Go, tetapi dibangun di atas infrastruktur OCI. Jika tertarik pada sistem manajemen dependensi, ada tautan terkait yang bisa dilihat.
  • Masalah cache web

    • W3C membuat segala sesuatu di web bisa di-cache, tetapi muncul pertanyaan mengapa hampir tidak ada proxy cache serbaguna. Apakah publisher mengirim respons seperti "Cache-Control: max-age" yang terlalu pendek atau "Vary: Cookie" secara tidak perlu, atau terlalu banyak ISP yang harus membayar biaya transit?
  • Masalah proxy cache

    • Melakukan cache pada repositori non-Go oleh proxy mungkin terasa boros, tetapi jika dibuat agar bisa meng-cache repositori Go, data arbitrer juga bisa disimpan. Ini dianggap bukan masalah besar.