10 poin oleh GN⁺ 2025-07-02 | 1 komentar | Bagikan ke WhatsApp
  • vet adalah alat CLI yang mengubah eksekusi skrip instalasi jarak jauh dengan metode curl | bash menjadi proses yang lebih aman: "unduh → tinjau → setujui eksekusi"
  • Menyediakan lapisan pertahanan bertahap seperti pemeriksaan riwayat perubahan (diff), lint berbasis shellcheck (analisis statis), dan persetujuan manual (jalankan setelah diperiksa)
  • Dengan satu perintah saja (vet https://example.com/install.sh), sebelum menjalankan skrip jarak jauh Anda dapat secara otomatis memeriksa potensi risiko, manipulasi, typo, dan kerentanan
  • Untuk instalasi, alat ini juga mendukung baik metode "unduh lalu tinjau" maupun metode curl | sh, dan kode instalasi vet sendiri juga bisa diperiksa langsung
  • Ini adalah solusi andal yang memungkinkan pencegahan risiko keamanan di lingkungan pengembangan/operasional sekaligus mempertahankan otomasi dan kemudahan

Masalah: Menjalankan skrip instalasi jarak jauh secara sembarangan

  • Banyak proyek open source dan alat menyarankan metode instalasi skrip jarak jauh seperti curl -sSL https://example.com/install.sh | bash
  • Metode ini memiliki risiko keamanan kritis seperti eksekusi kode berbahaya atau eksekusi file parsial akibat manipulasi skrip, peretasan server, kesalahan jaringan, dan sebagainya

Solusi vet: Eksekusi interaktif yang aman

  • vet membungkus eksekusi skrip jarak jauh dengan proses keamanan 4 tahap seperti berikut
    • 1. Fetch: Mengunduh skrip jarak jauh dengan aman ke lokasi sementara
    • 2. Diff & Review: Menampilkan perubahan (diff) dibandingkan riwayat eksekusi sebelumnya, sehingga kode baru/berubah bisa ditinjau langsung dengan mata
    • 3. Lint: Analisis statis otomatis untuk bug/kerentanan/pola tidak normal dengan shellcheck (saat terpasang)
    • 4. Confirm: Meminta persetujuan akhir (yes/no) dari pengguna sebelum eksekusi nyata
  • Satu perintah:
    vet https://example.com/install.sh  
    

Cara instalasi

Metode aman yang direkomendasikan (unduh → tinjau → jalankan)

Instalasi cepat (one-liner berbasis kepercayaan)

Fitur dan keunggulan vet

  • Deteksi perubahan (diff): Bisa memeriksa bagian yang baru berubah dengan membandingkan terhadap skrip yang sebelumnya dijalankan
  • Lint otomatis (integrasi shellcheck): Mendiagnosis kerentanan skrip shell, typo, dan kode mencurigakan secara otomatis
  • Persetujuan eksekusi eksplisit (Confirm): Mengontrol langsung eksekusi nyata dengan satu klik/input
  • Penyimpanan skrip otomatis dan manajemen riwayat: Skrip instalasi yang sering digunakan pun bisa dilacak dengan aman
  • Juga menjamin instalasi/pembaruan internal yang aman

Kesimpulan

  • vet adalah alternatif aman untuk curl | bash yang dibutuhkan baik oleh pengembang maupun operator, mewujudkan otomasi instalasi sekaligus keamanan
  • "Jangan langsung dijalankan, verifikasi dulu dengan vet lalu eksekusi!"

1 komentar

 
GN⁺ 2025-07-02
Komentar Hacker News
  • Dalam 90% kasus, saya penasaran bagaimana orang benar-benar memverifikasi keandalan perangkat lunak saat memakai installer. Dalam beberapa kasus, kodenya memang ditandatangani, tetapi sering kali kode diunduh dari server HTTPS yang sama tanpa verifikasi tambahan. Jika kodenya sudah dalam bentuk terkompilasi, saya juga bertanya-tanya apakah orang melakukan diff. Menjalankan installer begitu saja dari internet bukan pendekatan yang baik, dan jika memasang dari distribusi sistem operasi, biasanya sudah ada mekanisme verifikasi yang jauh lebih baik. Meski begitu, metode-metode ini juga tidak banyak menambah rasa percaya
    • Tujuan vet berfokus pada keamanan skrip installer itu sendiri, terutama untuk mencegah skrip installer diubah agar melewati verifikasi checksum atau mengunduh biner dari URL berbahaya. Dalam satu bagian, ini memberi perlindungan yang kuat, tetapi tidak mencakup seluruh rantai
    • Installer umumnya hanya dijalankan sekali, jadi saya ragu seberapa bergunanya menampilkan perubahan dibanding eksekusi sebelumnya
    • Saya hanya memasang lewat daftar paket yang dikelola komunitas, tepercaya, dan ditandatangani secara kriptografis, menggunakan metode yang punya rekam jejak keamanan kuat. Menurut saya, masalah mendasarnya bukan karena skrip unduhan sulit diamankan, melainkan budaya di komunitas tertentu seperti macOS yang menerima cara instalasi bergaya hack seperti ini. Harus ada tuntutan yang lebih kuat pada platform yang dipercaya. Saya tidak merasa keamanan jadi lebih baik hanya karena menjalankan lint pada skrip shell yang diambil dari internet
  • Saya penasaran apa yang terjadi jika seseorang terus menyisipkan pragma # shellcheck disable= ke dalam skrip berbahaya
    • Poin yang bagus. Itu memang bisa dilakukan. vet tidak hanya mengandalkan ShellCheck; diff adalah bagian utamanya. Walaupun linter diam, diff akan mendeteksi penyisipan kode # shellcheck disable= yang mencurigakan. Perubahan itu sendiri adalah sinyal bahaya
  • Ada nuansa ironis di sini:
    # Dalam situasi percaya buta pada skrip remote:
    curl -sSL https://example.com/install.sh | bash
    
    lalu berikutnya menjalankan
    curl -sL https://getvet.sh | sh
    
    seperti ini
    • Sepertinya saya melewatkan bagian itu tanpa membacanya. Inti vet adalah menyadari ironi itu sendiri. Pengguna didorong untuk memeriksa langsung skrip instalasi vet. Memang itulah tujuan vet. Sumber install.sh bisa dilihat langsung
  • Menurut saya ini solusi yang sangat keren. Saya sering memikirkan hal seperti ini, dan juga penasaran soal aspek ini pada uv dan semacamnya. Tetapi dalam kebanyakan kasus, semua orang sudah percaya pada pengelola kode, jadi dipakai sebagai kompromi
    • Saya penasaran apa pendapat Anda tentang uv
  • Melihat diskusi ini membuat saya berpikir bahwa langkah berikutnya untuk vet adalah dukungan lingkungan privat. Memverifikasi skrip publik itu bagus, tetapi ada juga kebutuhan menjalankan skrip deployment dari repo GitHub internal atau server internal. Karena itu saya membuka permintaan fitur untuk menambahkan autentikasi ke vet. Dukungan .netrc, variabel lingkungan VET_TOKEN, dan nantinya integrasi dengan secret manager seperti HashiCorp Vault juga sudah masuk roadmap. Jika tertarik, saya ingin mendengar pendapat Anda di GitHub issue. Terima kasih atas masukannya
  • Saya penasaran apakah di halaman atau README bisa ditampilkan seperti apa cara kerjanya atau video demo. Apakah dibuka dengan pager atau editor, dan seperti apa peringatan shellcheck ditampilkan
    • Betul juga. README saat ini hanya menjelaskan cara kerja vet, tetapi belum cukup menunjukkan pengalaman penggunaan sebenarnya. Saya berencana menambahkan GIF demo ke halaman. Menjawab pertanyaan Anda, secara default file dibuka dengan pager (less, atau pager dengan highlighting yang lebih bagus jika bat terpasang), dan tidak dibuka di editor agar tidak terjadi perubahan tak sengaja. Jika ShellCheck mendeteksi masalah, hasilnya langsung ditampilkan dengan warna di terminal. Setelah itu pengguna akan ditanya secara langsung apakah ingin tetap melanjutkan review dalam bentuk [y/N]. Contohnya:
      ==> Running ShellCheck analysis...
      
      In /tmp/tmp.XXXXXX line 7:
      echo "Processing file: $filename"
                 ^-- SC2086: Double quote to prevent globbing and word splitting.
      
      ==> WARNING: ShellCheck found potential issues.
      [?] Continue with review despite issues? [y/N]
      
      Terima kasih, sarannya bagus
  • Agak disayangkan karena tidak bekerja otomatis seperti pola curl | bash. Di Windows ada fitur yang otomatis memindai file saat pengguna hendak memasangnya
  • Idemya sangat bagus. Tantangan terbesar pada alat keamanan seperti ini adalah nondeterminisme LLM dan risiko privasi karena kode dikirim ke API pihak ketiga. Itulah alasan vet bergantung pada ShellCheck. ShellCheck adalah linter yang deterministik, berbasis aturan, dan sepenuhnya berjalan offline. Untuk input yang sama, hasilnya selalu konsisten dan dapat diandalkan. Untuk analisis yang lebih pintar, mungkin suatu saat vet perlu mengarah ke AI yang cepat dan berjalan lokal. Ini bahan pemikiran yang bagus
  • Ide yang sangat cerdik. Sebagai fitur tambahan, bisa juga menarik jika isi skrip shell dikirim ke LLM untuk menemukan bagian yang mencurigakan dari sisi keamanan
  • Hai HN, saya pembuat vet. Saya selalu merasa pola curl | bash itu mengkhawatirkan, dan merasa perlu ada alat yang menampilkan diff saat skrip berubah, menjalankan shellcheck, dan meminta izin eksplisit dari pengguna. Karena itu saya membuat vet. Untuk instalasinya pun saya menerapkan prinsip yang sama. Saya sangat menganjurkan agar skrip instalasinya dibaca dulu. Masukan sangat diterima. Reponya ada di https://github.com/vet-run/vet
    • Saya senang ternyata bukan cuma saya yang memikirkan masalah seperti ini. Menurut saya ini titik yang rentan terhadap serangan. Menarik juga melihat nvm dijadikan contoh (dulu saya pernah mengangkat masalah serupa di nvm). Hanya saja threat model-nya agak kurang jelas. Jika penyerang yang memodifikasi SSL sudah mampu menyajikan skrip berbahaya, saya rasa mereka juga cukup canggih untuk mengubah biner yang diunduh oleh skrip asli menjadi berbahaya. Walaupun sulit membuat semua orang mengelola verifikasi dengan hash kriptografis, pada akhirnya itu cara yang paling pasti. 1) ambil input remote dan bandingkan dengan hash yang sudah di-commit 2) jalankan dalam sandbox tanpa internet 3) blokir penerimaan payload dengan hash yang belum terverifikasi
    • Saya ingin tahu alasan di balik “menampilkan diff saat skrip berubah dan menjalankan shellcheck”. Pernahkah dipikirkan sebenarnya peran shellcheck itu apa, dan kapan diff dianggap bekerja? “Meminta izin eksplisit sebelum eksekusi” juga tidak ada gunanya jika yang berubah cuma indentasi. Skrip shell kecil bisa dibaca cepat, tetapi installer besar sering memakai gaya kode yang sulit dipahami karena berbagai alasan yang sah. Saya tidak tahu filosofi seperti apa yang ingin disampaikan vet. Cara yang dilakukan vet menurut saya justru mirip pola yang dipakai penyerang saat menyebarkan malware (contoh: jika diunduh dengan wget -qO- https://getvet.sh, server mengembalikan text/html). Saya justru ingin menyarankan agar orang mengambil langsung install.sh. Menanggapi permintaan masukan, saya bagikan tip bash seperti ini:
      check () {
        echo "> $BASH_COMMAND" >&2
        echo -n "Allow? (yes/no) " >&2
        select c in yes no
        do
          if [ "$c" = "yes" ]
          then break
          elif [ "$c" = "no" ]
          then return 1
          fi
        done
      }
      
      shopt -s extdebug
      trap check DEBUG
      
      Cara ini meminta izin setiap kali bash hendak menjalankan sesuatu. Untuk skrip panjang ini bisa merepotkan, jadi bisa disesuaikan, misalnya dengan whitelist perintah yang dianggap aman atau opsi "remember". Terkait sudo, malware bisa memakai trik menjalankan sudo lebih dulu pada perintah yang tampak tidak berbahaya untuk menyimpan kredensial di cache, lalu menjalankan lagi perintah sudo lain tanpa peringatan apa pun. Lebih aman menjalankan sudo -k untuk menghapus cache sesi sebelum mengeksekusi program yang tidak dikenal
    • Saya menghargai upaya menemukan masalah dan membuat solusinya, tetapi fungsi asli shellcheck bukan untuk memeriksa virus/kerentanan, jadi saya rasa arah vet tidak terlalu efektif
    • Idenya sendiri bagus. vet akan berguna bagi pengembang ketika kode sumber terlihat jelas dan bisa dibaca langsung. Namun kemampuan saya belum sampai di situ, jadi saya tidak tahu apakah saya termasuk mayoritas pengguna atau minoritas pengguna dalam hal ini