Langsung ke konten
Guide

Axios mendapat pintu belakang: paket 5 npm untuk diganti dengan API HTTP

| 9 min read

Aktor yang terkait dengan Korea Utara mengirimkan RAT di dalam axios 1.14.1 ke 70 juta penginstal mingguan. Lima paket npm tujuan tunggal yang dapat Anda hapus hari ini dan ganti dengan panggilan HTTP API.

Server room with network cables representing supply chain infrastructure
Photo by Taylor Vick on Unsplash

Pada tanggal 31 Maret 2026, operator yang terhubung dengan Korea Utara menerbitkan dua versi pintu belakang axios ke npm. Versi 1.14.1 dan 0.30.4 dikirimkan dengan nama dependensi pasca-instalasi plain-crypto-js yang menarik implan RAT khusus platform sfrclak[.]com:8000. Paket-paket itu hidup selama tiga jam. Axios mendapat 70 juta unduhan mingguan. Lakukan perhitungan.

Setiap pekerjaan CI yang dijalankan npm install selama jendela itu mengirimkan muatan ke dalam build-nya lingkungan. Rahasia dalam variabel lingkungan terbongkar; token GitHub pribadi sudah terbiasa rilis lanjutan mint; laptop pengembang berjalan npm install secara lokal mendapat RAT. Insiden tersebut melewati 2FA karena mesin pengelola telah disusupi melalui a kampanye rekayasa sosial yang ditargetkan. 2FA di akun npm tidak melakukan apa pun saat penyerang memilikinya terminal yang berjalan npm publish.

Anda tidak dapat menghilangkan kelas serangan ini, tetapi Anda dapat memperkecil radius ledakan Anda. Setiap paket npm itu melakukan satu hal kecil; memvalidasi email, menguraikan nomor telepon, menghapus HTML, menghasilkan kode QR, menandatangani JWT; adalah paket yang dapat Anda hapus dan ganti dengan panggilan HTTPS ke API Anda kontrol melalui kunci yang dapat diputar. Paket yang disusupi dijalankan sebelum Anda dapat bereaksi. Kunci API yang disusupi berhenti bekerja dalam hitungan detik.

Berikut lima paket npm yang dapat Anda ganti minggu ini, dengan HTTP API yang melakukan hal yang sama, ditambah pelindung CI yang memblokir kait pasca-pemasangan baru agar tidak mendarat di file kunci Anda.

Audit permukaan ketergantungan npm Anda saat ini

Sebelum Anda menghapus apa pun, ketahuilah apa yang Anda miliki. Shell pass ini memunculkan dependensi produksi dengan memasang kait dan memeriksa apakah versi aksio beracun ada di mana saja di pohon Anda:

Jika salah satu versi axios muncul di file kunci Anda, putar setiap rahasia mesin atau CI yang terpengaruh pekerjaan memiliki akses ke. Bukan "periksa lognya". Memutar. Asumsikan eksfiltrasi terjadi dalam 180 menit antara publikasi dan penghapusan. Rahasia yang bocor tidak bisa diungkapkan.

Google Threat Intelligence mengaitkan operasi tersebut dengan UNC1069, aktor yang sama yang telah menjalankannya sebelumnya WAVESHAPER kampanye. Buku pedoman mereka menargetkan laptop pengelola melalui phishing, lalu menggunakan kredensial pengelola untuk mempublikasikannya. Pembelaan Anda harus mengasumsikan hal itu setidaknya satu pengelola setidaknya satu departemen transitif hanya berjarak satu phish untuk menjadi implan sistem pengiriman.

Penggantian 1: validator email → /v1/email/validasi

validator, email-validator, deep-email-validator, Dan disposable-email-domains muncul di sebagian besar aliran pendaftaran. Bersama-sama mereka menambahkan kira-kira setengah megabyte berat instalasi, pohon transitifnya sendiri, dan daftar yang dikelola domain sekali pakai yang menjadi basi dalam beberapa minggu.

API memeriksa sintaksis, data MX DNS, dan daftar domain sekali pakai langsung dalam satu panggilan. Bertukar kedua paket yang keluar terlihat seperti ini:

Anda kehilangan kemampuan untuk memvalidasi secara offline. Anda mendapatkan cek MX yang dikelola, daftar langsung yang dapat dibuang, dan tidak ada paket dengan kait pasca-pemasangan yang ada di pohon Anda. Untuk pendaftaran, checkout, dan webhook bidang email, trade-off itu menguntungkan API.

Penggantian 2: libphonenumber-js → /v1/telepon

libphonenumber-js adalah port dari Google libphonenumber. Beratnya 147 KB diperkecil. Versi "mini" turun menjadi 79 KB tetapi kehilangan metadata untuk sebagian besar negara. Metadata lengkap bundel membawa bobot kembali ke 2 MB saat dibongkar. Di Cloudflare Workers atau Lambda dingin, ini dia latensi nyata yang Anda bayarkan pada setiap pemanggilan.

Satu POST mengembalikan format E.164, negara, nomor nasional, jenis garis, dan zona waktu. Jika nomornya tidak valid, data.valid adalah false dan sisanya nol. Sisi server Anda alur pendaftaran menyebutnya antara "baca formulir" dan "tulis ke database". Perjalanan bolak-balik API 60 ms berlangsung di dalam jendela tulis DB Anda yang ada.

Penggantian 3: kode qr → /v1/qr/menghasilkan

Itu qrcode Paket npm sendiri baik-baik saja: 34 KB, tidak ada pengait pasca-instal. Yang tidak baik adalah itu canvas ketergantungan rekan yang didorong oleh separuh tutorial, yang mengakhirinya kode asli, menginstal node-gyp, dan memiliki CVE selama sepuluh tahun di seluruh rangkaian alat pembuatannya. Setiap penduduk asli npm dep adalah lapisan rantai pasokan.

Responsnya adalah SVG mentah. Masukkan ke dalam file, masukkan ke dalam templat faktur, atau render secara inline dalam komponen React dengan dangerouslySetInnerHTML. Tidak ada modul asli, tidak ada build rantai alat, tidak ada pohon transitif.

Penggantian 4: jsonwebtoken → /v1/jwt/generate dan /v1/jwt/decode

jsonwebtoken adalah salah satu perpustakaan JWT yang paling banyak disalin di Node. Itu juga perpustakaan kebanyakan orang salah mengonfigurasi: algoritme salah, klaim audiens hilang, tidak ada masa berlaku. Algoritma yang salah verifikasi panggilan ditambah header yang dikendalikan penyerang memperkenalkan kembali JWT era 2015 none kerentanan. API menerapkan daftar putih algoritme dan menolak token yang tidak ditandatangani di titik akhir:

Gunakan ini untuk token berumur pendek yang dikeluarkan oleh layanan backend: tautan pengaturan ulang kata sandi, satu kali URL unduhan, token pembawa layanan-ke-layanan. Jangan gunakan layanan eksternal untuk sesi pengguna JWT berada di jalur panas dari setiap permintaan yang diautentikasi; untuk itu, pertahankan perpustakaan terverifikasi dalam proses dan mengunci algoritma.

Penggantian 5: html-ke-teks → /v1/html-ke-teks/convert

html-to-text, sanitize-html, node-html-parser, dan mereka teman ada karena setiap API yang menerima konten pengguna pada akhirnya perlu menghapus HTML untuk teks biasa pratinjau, intisari email, atau pengindeksan pencarian. Berat gabungannya adalah 500 KB hingga 1,2 MB; mereka menarik parse5 atau htmlparser2 melalui pintu, yang masing-masing memiliki miliknya sendiri permukaan pemelihara.

Untuk hasil yang lebih kaya, /v1/html-to-markdown mengembalikan Penurunan Harga Rasa GitHub, dan /v1/html-sanitize mengembalikan HTML yang telah dibersihkan dengan daftar izin yang dapat dikonfigurasi. Pilih satu yang sesuai dengan keinginan konsumen hilir Anda untuk menyimpan konten.

Tambahkan pelindung CI yang memblokir kait pasca-pemasangan baru

Menghapus paket adalah pekerjaan satu kali. Tetap ramping itu berkelanjutan. Pemeriksaan Tindakan GitHub ini gagal PR jika pembaruan lockfile memperkenalkan yang baru postinstall atau preinstall kaitkan di mana saja di pohon:

Ceknya murah, berjalan di setiap PR, dan memaksa peninjauan manusia sebelum skrip baru ada. Pasangkan dengan npm config set ignore-scripts true pada CI dan daftar yang diizinkan secara eksplisit untuk paket yang Anda tahu butuhkan esbuild-gaya postinstall (TypeScript, Dalang, bcrypt).

Apa yang Anda serahkan, dan kapan harus mengembalikannya

Memindahkan validasi ke panggilan HTTP memerlukan biaya yang nyata. Anda memperdagangkannya untuk ketergantungan yang lebih kecil permukaan:

Pertukaran paket npm API HTTP
Latensi Mikrodetik 50 hingga 150 ms dari tepi
Penggunaan offline Ya TIDAK
Instal risiko Postinstall menjalankan kode arbitrer Tidak ada langkah instalasi
Pencabutan Bangun kembali, terbitkan ulang, terapkan ulang Putar kunci API dalam hitungan detik
Jejak audit Tidak ada secara default Minta log per panggilan
Penyimpangan versi Sematkan atau renovasi Header versi, kontrak stabil

Jawaban yang benar adalah “keduanya, dengan niat.” Pertahankan pustaka jalur kritis dalam proses (sesi JWT verifikasi, primitif kripto, middleware autentikasi). Memindahkan ekor panjang utilitas dengan tujuan tunggal keluar dari lockfile Anda dan masuk ke titik akhir HTTPS bertanda tangan yang dapat Anda cabut.

Poin-poin penting

  • Asumsikan pengelola hanya berjarak satu phish dari implan. Axios mendapat 70 juta setiap minggunya unduhan dan akun npmnya masih disusupi melalui serangan rekayasa sosial pada a laptop pribadi.
  • Audit kait pasca pemasangan hari ini. Setiap dep yang menjalankan kode arbitrer selama npm install adalah jahitan rantai pasokan. Inventarisasinya, lalu hapus atau izinkan.
  • Hapus paket tujuan tunggal terlebih dahulu. Email, telepon, QR, penandatanganan JWT, HTML konversi; masing-masing memiliki pengganti HTTP satu baris dengan kunci yang dapat dibatalkan.
  • Putar, jangan selidiki, setelah pemaparan. Jika aksio beracun mendarat di tubuhmu pohon, putar setiap rahasia yang disentuh oleh lingkungan yang terkena dampak. Eksfiltrasi terjadi dalam hitungan menit.
  • Tambahkan penjaga CI. Blokir baru postinstall kait agar tidak mendarat di Anda lockfile tanpa tinjauan manusia. Kompromi aksio akan membuat penjagaan ini tersandung.

Botoi menyediakan pengganti HTTP untuk lima paket di atas dan sekitar 145 paket lainnya untuk tujuan tunggal utilitas: hashing, pembuatan UUID, pengujian regex, konversi stempel waktu, validasi skema JSON, pembuatan kode batang, rendering PDF, dan lainnya. Satu kunci API, 5 persyaratan/mnt pada tingkat gratis, tidak memasang kait. Telusuri dokumen interaktif atau kawat server MCP ke dalam kamu Agen pengkodean AI untuk memanggil titik akhir yang sama dari Claude Code atau Cursor tanpa meninggalkan editor.

FAQ

Apa yang terjadi dengan paket axios npm pada Maret 2026?
Antara tanggal 31 Maret 2026, 00:21 dan 03:20 UTC, penyerang menggunakan akun pengelola yang telah disusupi untuk memublikasikan aksio 1.14.1 dan 0.30.4 dengan ketergantungan pasca-pemasangan berbahaya yang disebut plain-crypto-js. Ketergantungan mengunduh implan RAT khusus platform dari sfrclak[.]com:8000. Google Threat Intelligence menghubungkan operasi tersebut dengan UNC1069, aktor penghubung Korea Utara. Paket-paket tersebut aktif sekitar tiga jam, cukup lama untuk disimpan di cache CI dan laptop pengembang di seluruh dunia.
Apakah mengganti paket npm dengan HTTP API mengurangi risiko?
Ini mengecilkan permukaan serangan dengan dua cara. Pertama, Anda menghapus hook postinstall yang menjalankan kode arbitrer di server build Anda. Kedua, Anda memindahkan logika validasi dari laptop pengembang ke titik akhir khusus HTTPS yang ditandatangani dan Anda kontrol melalui rotasi kunci API. Paket beracun berjalan sebelum Anda dapat bereaksi; kunci API yang dicabut berhenti bekerja dalam hitungan detik.
Apakah panggilan HTTP lebih lambat dari paket npm lokal?
Untuk satu panggilan atas permintaan dingin, ya; latensi API botoi yang umum adalah 50 hingga 150 ms dari klien di Amerika Utara ke edge Cloudflare. Untuk sebagian besar alur sisi server (pendaftaran, checkout, pemrosesan webhook) yang tumpang tindih dengan panggilan DB yang sudah Anda buat, hal ini tidak menambahkan apa pun yang dapat diukur. Untuk jalur throughput tinggi, simpan respons dalam cache dengan hash masukan untuk profil latensi yang sama dengan paket lokal.
Bagaimana cara mengaudit repo saya untuk paket npm yang berisiko saat ini?
Jalankan npm audit --omit=dev untuk menampilkan dependensi produksi, lalu periksa paket apa pun dengan kait postinstall atau preinstall menggunakan skrip npm ls dan npm view {name}. Paket yang melakukan satu hal kecil (validasi email, pembuatan QR, penandatanganan JWT, penguraian telepon, pengupasan HTML) adalah kandidat kuat untuk berpindah ke panggilan HTTP. Paket yang melakukan kriptografi atau secara aktif mengambil konten jaringan adalah target audit dengan prioritas tertinggi.
Bagaimana jika penyedia API HTTP disusupi dan bukannya npm?
Radius ledakannya lebih kecil dan pendeteksiannya lebih cepat. Anda mengontrol kunci API dan dapat mencabutnya dalam satu panggilan. Penyedia Anda menampilkan halaman status, RSS insiden, dan respons yang ditandatangani melalui HTTPS. Bandingkan dengan paket yang berjalan di dalam build Anda yang deteksinya memerlukan pembacaan setiap hook postinstall di pohon ketergantungan transitif Anda. Risikonya juga tidak nol; yang satu memberi Anda pengaruh, yang lain tidak.

Mulai membangun dengan botoi

150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.