1 poin oleh GN⁺ 2 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • CVE-2024-YIKES adalah insiden pembajakan dependensi JavaScript yang meluas ke rantai pasok Rust dan Python
  • Phishing left-justify membocorkan kredensial .npmrc, .pypirc, Cargo, dan Gem
  • build.rs berbahaya di vulpine-lz4 mengunduh dan menjalankan skrip shell di host CI
  • Malware snekpack 3.7.0 menyebar ke sekitar 4,2 juta mesin dan menambahkan kunci SSH serta reverse shell
  • Worm cryptobro-9000 secara tak sengaja meng-upgrade ke snekpack 3.7.1 sehingga malware terhapus

Ringkasan kejadian

  • CVE-2024-YIKES adalah insiden keamanan ketika dependensi yang dikompromikan di ekosistem JavaScript berujung pada pencurian kredensial, lalu meluas menjadi serangan rantai pasok pada pustaka kompresi Rust dan distribusi malware pada alat build Python
  • Insiden diterima pada 03:47 UTC, statusnya berubah menjadi “terselesaikan secara kebetulan”, dan tingkat keparahannya berganti dari “Critical → Catastrophic → Somehow Fine”
  • Durasi berlangsung selama 73 jam, dan sistem yang terdampak tetap tercatat sebagai “Yes”
  • Paket dan toolchain yang dikompromikan berurutan mencakup left-justify, vulpine-lz4, dan snekpack, dengan malware didistribusikan ke sekitar 4 juta pengembang
  • Pada akhirnya, worm penambang kripto terpisah cryptobro-9000 menjalankan pembaruan pada mesin yang terinfeksi, meng-upgrade snekpack ke versi normal dan secara tak sengaja menghapus malware

Perkembangan insiden

  • Hari 1: Pencurian kredensial dari paket JavaScript

    • Pada 03:14 UTC, maintainer left-justify Marcus Chen menulis di Twitter bahwa kartu transportasinya, laptop lamanya, dan “sesuatu yang tampak penting seperti hasil muntahan Kubernetes” telah dicuri, tetapi ini tidak langsung dikaitkan dengan masalah keamanan paket
    • Pada 09:22 UTC, Chen mencoba login ke registri nmp dan menyadari kunci 2FA hardware-nya tidak ada, lalu AI Overview di hasil teratas Google mengarahkannya ke situs phishing yubikey-official-store.net yang baru terdaftar 6 jam sebelumnya
    • Pada 09:31 UTC, Chen memasukkan kredensial nmp ke situs phishing tersebut, dan situs itu berterima kasih atas pembeliannya serta menjanjikan pengiriman dalam 3–5 hari kerja
    • Pada 11:00 UTC, [email protected] dirilis dengan changelog bertuliskan “performance improvements”
    • Paket tersebut menyertakan skrip post-install yang mengekfiltrasi .npmrc, .pypirc, ~/.cargo/credentials, dan ~/.gem/credentials ke server pilihan penyerang
    • Pada 13:15 UTC, sebuah tiket dukungan dibuka untuk left-justify dengan judul “why is your SDK exfiltrating my .npmrc”, tetapi ditandai “low priority - user environment issue” lalu ditutup otomatis setelah 14 hari tanpa aktivitas
  • Hari 1: Serangan rantai pasok meluas ke pustaka Rust

    • Di antara kredensial yang bocor terdapat kredensial milik maintainer pustaka Rust vulpine-lz4
    • vulpine-lz4 adalah pustaka untuk “blazingly fast Firefox-themed LZ4 decompression”, memiliki 12 bintang GitHub, tetapi merupakan dependensi transitif dari cargo sendiri
    • Pada 22:00 UTC, vulpine-lz4 0.4.1 dirilis dengan pesan commit “fix: resolve edge case in streaming decompression”
    • Perubahan sebenarnya adalah penambahan skrip build.rs yang mengunduh lalu menjalankan skrip shell jika nama host mengandung “build”, “ci”, “action”, “jenkins”, “travis”, atau “karen”
  • Hari 2: Kegagalan deteksi dan respons

    • Pada 08:15 UTC, peneliti keamanan Karen Oyelaran menemukan commit berbahaya itu setelah payload berjalan di laptop pribadinya
    • Karen Oyelaran membuka issue berjudul “your build script downloads and runs a shell script from the internet?” tetapi tidak menerima balasan
    • Maintainer sah sedang memenangkan €2.3 million di EuroMillions dan meneliti peternakan kambing di Portugal
    • Pada 10:00 UTC, VP of Engineering di perusahaan pelanggan snekpack Fortune 500 mengetahui insiden ini dari postingan LinkedIn berjudul “Is YOUR Company Affected by left-justify?”, dan ingin tahu mengapa dirinya tidak diberi tahu lebih cepat, padahal sebenarnya sudah terdampak lebih cepat
    • Pada 10:47 UTC, kanal Slack #incident-response sempat beralih menjadi thread 45 pesan yang memperdebatkan apakah “compromised” harus dieja dengan huruf ‘z’ ala Amerika
  • Hari 2: Alat build Python snekpack terinfeksi

    • Pada 12:33 UTC, skrip shell itu menargetkan pipeline CI snekpack pada korban tertentu
    • snekpack adalah alat build Python yang digunakan oleh 60% paket PyPI yang namanya mengandung kata “data”
    • snekpack telah mem-vendor vulpine-lz4 karena “Rust is memory safe”
    • Pada 18:00 UTC, snekpack 3.7.0 dirilis, dan malware mulai terpasang pada mesin pengembang di seluruh dunia
    • Malware itu menambahkan kunci SSH ke ~/.ssh/authorized_keys, memasang reverse shell yang hanya aktif pada hari Selasa, dan mengubah shell default pengguna menjadi fish
    • Perubahan shell default ke fish dianggap sebagai bug
    • Pada 19:45 UTC, peneliti keamanan lain menerbitkan tulisan blog 14.000 kata berjudul “I found a supply chain attack and reported it to all the wrong people”, yang memuat frasa “in this economy?” sebanyak 7 kali
  • Hari 3: Patch tak sengaja dan akhir insiden

    • Pada 01:17 UTC, seorang pengembang junior di Auckland menemukan malware saat men-debug masalah lain dan membuka PR untuk membalikkan vulpine-lz4 yang di-vendor di snekpack
    • PR tersebut memerlukan 2 approval, tetapi kedua approver sedang tidur
    • Pada 02:00 UTC, maintainer left-justify menerima YubiKey dari yubikey-official-store.net, yang ternyata adalah USB drive seharga 4 dolar dengan README bertuliskan “lol”
    • Pada 06:12 UTC, worm penambang kripto terpisah cryptobro-9000 mulai menyebar melalui kerentanan jsonify-extreme
    • jsonify-extreme dideskripsikan sebagai paket yang “makes JSON even more JSON, now with nested comment support”
    • Payload cryptobro-9000 sendiri tidak istimewa, tetapi metode penyebarannya termasuk menjalankan npm update dan pip install --upgrade pada mesin yang terinfeksi untuk memperluas permukaan serangan di masa depan
    • Pada 06:14 UTC, cryptobro-9000 secara kebetulan meng-upgrade snekpack ke 3.7.1
    • snekpack 3.7.1 adalah rilis sah yang dipublikasikan oleh co-maintainer yang kebingungan, dan mengembalikan vulpine-lz4 yang di-vendor ke versi sebelumnya
    • Pada 06:15 UTC, reverse shell hari Selasa aktif, tetapi server command-and-control sudah dikompromikan oleh cryptobro-9000 sehingga tidak bisa merespons
    • Pada 09:00 UTC, maintainer snekpack menerbitkan advisory keamanan empat kalimat yang memuat frasa “out of an abundance of caution” dan “no evidence of active exploitation”
    • Frasa “no evidence of active exploitation” dianggap benar secara teknis karena memang tidak ada yang mencari buktinya
    • Pada 11:30 UTC, seorang pengembang men-tweet “I updated all my dependencies and now my terminal is in fish???” dan mendapat 47.000 likes
    • Pada 14:00 UTC, kredensial vulpine-lz4 yang telah dikompromikan diganti
    • Maintainer sah menerima email di peternakan kambing barunya dan menjawab, “I haven’t touched that repo in two years” dan “I thought Cargo 2FA was optional”
    • Pada 15:22 UTC, insiden dinyatakan selesai, dan jadwal postmortem ditetapkan lalu diundur tiga kali

Penetapan CVE dan skala dampak

  • Pada minggu ke-6, CVE-2024-YIKES resmi ditetapkan
  • Advisory tetap berada dalam embargo sementara MITRE dan GitHub Security Advisories berdebat soal klasifikasi CWE
  • Sebelum CVE dipublikasikan, insiden ini sudah dibahas rinci oleh 3 tulisan Medium dan satu presentasi DEF CON
  • Total kerugian tetap tidak diketahui
  • Jumlah mesin yang dikompromikan diperkirakan 4,2 juta
  • Jumlah mesin yang “diselamatkan” oleh worm kripto juga diperkirakan 4,2 juta
  • Perubahan bersih pada postur keamanan tetap tercatat sebagai “ketidaknyamanan”

Akar penyebab dan faktor yang berkontribusi

  • Akar penyebab

    • Seekor anjing bernama Kubernetes yang memakan YubiKey dianggap sebagai akar penyebab
  • Faktor yang berkontribusi

    • Registri nmp masih mengizinkan autentikasi hanya dengan kata sandi untuk paket dengan unduhan mingguan di bawah 10 juta
    • Google AI Overviews dengan percaya diri menautkan URL yang seharusnya tidak pernah ada
    • Filosofi “small crates” di ekosistem Rust ditiru dari ekosistem npm, sehingga paket seperti is-even-number-rs dengan 3 bintang GitHub bisa masuk sebagai dependensi transitif empat tingkat di infrastruktur penting
    • Alat build Python mem-vendor pustaka Rust demi “kinerja”, lalu tidak pernah memperbaruinya
    • Dependabot menggabungkan PR secara otomatis setelah CI lolos, dan CI lolos karena malware telah menginstal volkswagen
    • Worm kripto memiliki kebersihan CI/CD yang lebih baik daripada kebanyakan startup
    • Tidak ada satu pemilik tunggal, tetapi PR Dependabot tersebut di-approve oleh kontraktor yang hari Jumat itu adalah hari kerjanya yang terakhir
    • Hari terjadinya insiden adalah hari Selasa

Tindakan perbaikan dan pilihan yang tersisa

  • Penerapan penandatanganan artefak adalah action item dari insiden Q3 2022, tetapi masih berada di backlog
  • Penerapan 2FA wajib sudah pernah diminta, tetapi tidak membantu
  • Audit dependensi transitif dicoret karena cakupannya 847 item
  • Mengunci semua versi dependensi akan mencegah penerimaan patch keamanan
  • Tidak mengunci versi dependensi akan membuka peluang serangan rantai pasok
  • Opsi menulis ulang dengan Rust dicoret sambil menunjuk ke vulpine-lz4
  • Tindakan yang tersisa hanyalah berharap pada worm baik hati atau mempertimbangkan alih profesi ke peternakan kambing

Dampak pelanggan dan respons organisasi

  • Sebagian pelanggan mungkin mengalami “hasil keamanan yang kurang optimal”
  • Pihak terkait yang terdampak dihubungi secara proaktif untuk memberikan visibilitas atas situasi tersebut
  • Kepercayaan pelanggan tetap dijaga sebagai “north star”
  • Sebuah working group lintas fungsi dibentuk untuk meninjau ulang postur keamanan, tetapi belum pernah rapat
  • Setelah tinjauan hukum, ditambahkan keterangan bahwa shell fish bukan malware, meski kadang terasa seperti itu
  • Laporan insiden ini adalah laporan insiden ketiga pada kuartal tersebut
  • Permintaan penambahan personel untuk tim keamanan masih tertahan di backlog sejak Q1 2023

Ucapan terima kasih

  • Karen Oyelaran menemukan masalah ini karena nama host-nya cocok dengan regex
  • PR dari pengembang junior di Auckland disetujui 4 jam setelah insiden sebenarnya sudah terselesaikan
  • Beberapa peneliti keamanan menemukan masalah lebih dulu, tetapi melaporkannya kepada orang yang salah
  • Penulis cryptobro-9000 tidak ingin disebutkan namanya, tetapi meminta agar SoundCloud miliknya disebut
  • Anjing bernama Kubernetes menolak berkomentar
  • Tim keamanan tetap memenuhi SLA laporan ini, terlepas dari semua yang terjadi

1 komentar

 
GN⁺ 2 jam lalu
Komentar Hacker News
  • Biar jelas buat yang sempat bingung, tulisan ini adalah fiksi yang ditulis cukup bagus tentang insiden supply chain
    Waktu dibaca sekilas aku kira ini kejadian nyata, jadi sempat cukup khawatir dan akhirnya baca lebih teliti :)

    • Aku benar-benar pecah di bagian left-justify :)
    • Awalnya jujur aku juga tidak bisa membedakannya, rasanya seperti ini: https://github.com/bitcoin/bips/blob/master/bip-0042.mediawi...
    • Kalau cari CVE-2024-YIKES, juga muncul galeri blog sampah AI yang menulis ulang isi postingan ini dengan AI lalu berpura-pura sepenuhnya serius
    • nmp
  • Aku penasaran dengan bagian kutipan yang bilang “vulpine-lz4 dengan 12 bintang di GitHub adalah dependensi transitif cargo itu sendiri”, jadi aku asal pilih beberapa crate yang bisa menyusup ke build cargo dan sudah punya build.rs, sehingga bakal kurang mencolok: flate2, tar, curl-sys, libgit2-sys, openssl-sys, libsqlite3-sys, blake3, libz-sys, zstd-sys, cc
    Bonusnya, kalau dapat akses ke xz2, kamu juga bisa mencemari rustup
    Meski begitu, setidaknya mereka memang melacak Cargo.lock

    • Crate -sys itu pada dasarnya cuma binding, jadi kalau melakukan hal lain di sana akan terlihat cukup mencurigakan
      Setahuku yang lain dimiliki maintainer inti Rust seperti alexcrichton atau rustlang sendiri
  • Mudah sekali jadi sinis, karena setelah semuanya terjadi, masalah dan solusinya terlihat terlalu jelas
    Tapi untuk waktu yang lama, dan mungkin bahkan sampai sekarang, kredo budaya hacker adalah move fast and break things
    Bagus bahwa semakin besar dorongan untuk memperbaiki masalah yang jelas pada sistem supply chain seperti npm, tetapi aku khawatir kita sedang memasuki era masalah keamanan baru yang sebagian besar dipicu oleh pengembangan berbasis agen
    Bukan cuma soal Mythos/Glasswing yang tampaknya menemukan kerentanan di hampir semua yang mereka sentuh, tetapi juga cara kita membangun perangkat lunak, menarik dependensi, dan kehilangan model berpikir manusia terhadap sistem yang kompleks, yang rasanya akan menghasilkan banyak perangkat lunak dan infrastruktur tambal sulam yang sebenarnya tidak dipahami dengan baik oleh manusia
    Semoga beberapa tahun dari sekarang kita tidak menoleh ke hari ini dan menyesal betapa naifnya kita, serta bagaimana kita gagal benar-benar menyiapkan diri untuk ekor panjang pengembangan AI tanpa justru mencoba menyelesaikan masalah dengan membangun ulang sistem kompleks memakai AI
    Tapi tetap saja, tulisannya lucu

    • Memangnya itu benar-benar sudah lama jadi kredo? Kukira slogan mengerikan itu diciptakan Zuckerberg
  • Sebagai penggemar Fish, kalimat ini terasa seperti diserang sekaligus dipahami: “mohon diperjelas bahwa shell fish bukan malware, hanya kadang terasa seperti itu”
    Terlepas dari shell-nya, bagian “permintaan penambahan personel tim keamanan sudah ada di backlog sejak Q1 2023” juga terasa terlalu familiar

    • Sebagai alternatif, kamu bisa memasang figlet lewat apt-get atau dnf, lalu menimpa isi /etc/motd dengan all your base are belong to us dalam font ASCII art raksasa
  • Aku benar-benar tertawa keras di bagian maintainer left-justify menerima YubiKey dari yubikey-official-store.net, yang ternyata hanyalah USB drive seharga 4 dolar dengan tulisan “lol” di README
    Benar-benar trolling total

    • Ya, itu bagus sekali
      Aku suka bahwa tindakan mencolokkan perangkat USB yang datang dari situs phishing itu sendiri merupakan vektor serangan lain
    • Biasanya orang dapat jauh lebih sedikit dari situs phishing. Ini malah USB drive yang berfungsi!
  • Ini bukan SCP sungguhan, tapi ini tulisan paling terasa seperti SCP yang pernah kubaca belakangan ini

    • Ah benar, kasus langka Supply Chain Problem(SCP)
  • Aku tertawa keras di bagian Karen :D ;)
    Ini mengingatkanku pada skrip build berbasis make yang pernah kuterima saat meninjau proyek teman sekelas; kalau hostname mengandung bpavuk, skrip itu akan mencoba rm -rf di folder home-ku
    Itu waktu aku kelas 1 SMP!!

  • Insiden supply chain memang benar-benar menyebalkan dan kita harus berbuat lebih baik
    Secara pribadi, untuk Rust aku mendukung pendekatan di mana yayasan membantu beberapa crate inti agar menjalani proses audit yang sama seperti bahasa Rust itu sendiri, dan mendanai proyek untuk mengurangi kerentanan supply chain
    Menurutku jawaban yang tepat bukan menghapus sistem seperti crates atau npm. crates dan npm sangat membantu banyak pengembang

    • crates juga sudah berupaya memasukkan rustsec, tetapi terlepas dari itu, akan bagus jika komunitas bergerak dari pola banyak dependensi kecil ke lebih sedikit dependensi besar seperti tokio
    • Cukup banyak crate paling populer di crates.io sebenarnya sudah merupakan crate pihak pertama yang disediakan organisasi Rust
      Hal ini sering terlewat saat orang khawatir soal graf crate Rust
      Kalau lihat 10 teratas unduhan di halaman depan crates.io, satu-satunya yang bukan dibuat oleh organisasi Rust atau maintainer inti Rust adalah crate base64
    • Bagaimana kalau crate yang nilainya besar dipindahkan saja ke standard library?
    • Tapi apa kita benar-benar butuh npm dan nmp sekaligus
    • Jujur kukira ini memang tujuan akhir dari blessed.rs
  • “Maintainer resminya menang EuroMillions sebesar 2,3 juta euro dan sedang mencari tahu soal beternak kambing di Portugal”, lalu “akar masalahnya: seekor anjing bernama Kubernets memakan YubiKey”
    Ah ya, tentu saja. Kena serangan terkenal klasik, sungguh ceroboh
    Maksudku teknik yang dikenal sebagai “membuat seseorang linglung dengan uang lotere, lalu membuat dongle orang lain tampak sangat lezat bagi hewan peliharaan mereka”
    Kapan orang-orang akan belajar

  • Syukurlah aku tidak pakai npm atau pip, cuma pakai cara yang direkomendasikan yaitu curl ... | bash

    • Itu curl | sudo bash
      Amatiran