Kerentanan CVE-2026-42037 Axios sebagai isu sanitasi input, tetapi dalam praktiknya membuka primitive yang cukup berbahaya: kemampuan memanipulasi struktur multipart body secara langsung. Ini bukan bypass validasi biasa, melainkan cara untuk mengontrol bagaimana server downstream memahami setiap part dalam request.
Trust Berlebihan pada Metadata File
Dalam banyak arsitektur modern, Node.js sering berperan sebagai proxy layer menerima upload dari user, lalu meneruskan file tersebut ke service lain menggunakan "axios.post()" dengan FormData. Masalah muncul ketika metadata file seperti MIME type "(value.type)" dianggap aman dan langsung digunakan.
Pada implementasi Axios sebelum 1.15.1, nilai type dari objek Blob/File dimasukkan langsung ke header "Content-Type" dalam setiap multipart part, tanpa sanitasi terhadap karakter kontrol seperti "\r\n". Ini menciptakan celah klasik: CRLF injection, tetapi bukan di HTTP header utama melainkan di dalam body multipart itu sendiri.
Perbedaan ini krusial, karena banyak proteksi (termasuk di Node.js v18+) hanya fokus pada header HTTP, bukan struktur internal multipart.
MIME Type ke Header Injection
Secara internal, Axios membangun multipart body dengan format seperti:
--boundary
Content-Disposition: form-data; name="file"; filename="a.jpg"
Content-Type: image/jpeg
<binary data>
Namun karena "value.type" tidak disanitasi, attacker bisa menyisipkan CRLF:
image/jpeg\r\nX-Injected: evil\r\nX-Another: test
Hasil di body:
Content-Type: image/jpeg
X-Injected: evil
X-Another: test
Yang terjadi bukan string injection saja tetapi, header smuggling di level multipart. Parser di server tujuan akan menganggap header tambahan tersebut sebagai bagian sah dari part tersebut.
Menariknya, path lain dalam kode Axios (untuk string value) sudah melakukan sanitasi CRLF. Ini menunjukkan bahwa developer sadar akan risiko ini, tetapi implementasinya tidak konsisten.
Abuse pada Arsitektur Proxy Upload
Skenario realistis yang sering terjadi:
Sebuah aplikasi memiliki fitur upload gambar. File dikirim ke backend Node.js, lalu backend ini meneruskan file ke storage service atau API lain menggunakan Axios.
Attacker mengunggah file dengan MIME type yang dimodifikasi:
image/png\r\nContent-Disposition: form-data; name="role"\r\n\r\nadmin
Ketika Axios membangun multipart request, payload ini akan:
- Menutup header asli
- Menyisipkan field baru (role=admin)
- Mengubah struktur form-data
Jika server downstream tidak memvalidasi dengan ketat, maka:
- Field tambahan bisa diterima sebagai input valid
- Validasi berbasis Content-Type bisa dilewati
- Bahkan memungkinkan manipulasi parameter tanpa terlihat di layer aplikasi awal
Boundary Confusion
Yang membuat vulnerability ini menarik adalah sifatnya sebagai boundary confusion attack.
Biasanya, developer berpikir bahwa:
- HTTP header ---- dilindungi
- Body --- data mentah
Namun multipart adalah hybrid: ia memiliki struktur seperti header di dalam body. Dan di sinilah blind spot muncul.
Beberapa insight penting untuk praktisi:
- Banyak WAF tidak menginspeksi per-part headers secara mendalam
- Parser multipart di berbagai framework memiliki perilaku berbeda (permissive vs strict)
- Injection seperti ini bisa digunakan untuk desync antara proxy dan backend
Dengan kata lain, ini bisa menjadi bagian dari attack chain yang lebih besar, seperti:
- request smuggling (layer aplikasi)
- validation bypass
- bahkan exploit chaining ke vulnerability parsing lain
Filter Bypass ke Data Manipulation
Dampak langsung mungkin terlihat “hanya” integrity issue, tapi dalam sistem nyata bisa berkembang:
Pertama, attacker bisa melewati filter upload berbasis MIME type. Jika server hanya memeriksa Content-Type dari part, maka header yang dimanipulasi bisa membuat file berbahaya terlihat legitimate.
Kedua, attacker bisa menyisipkan field tambahan dalam multipart body. Ini membuka kemungkinan manipulasi parameter yang tidak dikontrol oleh aplikasi awal.
Ketiga, dalam sistem yang kompleks (microservices atau API chaining), ini bisa menyebabkan data misrouting di mana service downstream memproses data dengan konteks yang salah.
Dalam konteks lebih luas, ini relevan dengan:
- API gateway trust issue
- data integrity attack
- supply chain input manipulation
Karena Axios digunakan sangat luas, blast radius vulnerability ini cukup besar, terutama pada service yang berperan sebagai relay.
Patch resmi di versi 1.15.1 menambahkan sanitasi terhadap "value.type", menghapus karakter CRLF sebelum digunakan. Ini langkah penting, tetapi bukan satu-satunya.
Pendekatan defensif yang lebih kuat mencakup:
- Validasi MIME type di sisi server, bukan hanya meneruskan dari client
- Jangan mempercayai metadata file dari user (termasuk filename dan type)
- Gunakan parser multipart yang strict dan menolak header anomali
- Implementasi allowlist untuk Content-Type yang diizinkan
- Logging terhadap anomali multipart structure (misalnya header tambahan dalam part)
Ini menunjukkan bagaimana library yang sangat umum seperti Axios bisa menjadi bagian dari attack surface ketika digunakan dalam konteks yang salah. Bukan karena library-nya “buruk”, tetapi karena asumsi trust terhadap input tidak ditegakkan dengan benar.
CRLF injection di multipart bukan teknik baru, tetapi implementasi seperti ini menghidupkan kembali teknik lama dalam konteks modern khususnya di arsitektur berbasis API dan microservices.
Bagi pentester, ini adalah peluang untuk mengeksplorasi area yang sering diabaikan: struktur internal request, bukan hanya endpoint.
Bagi developer, ini pengingat bahwa setiap data yang berasal dari user bahkan yang terlihat sepele seperti MIME type harus diperlakukan sebagai input tidak terpercaya.
Benediktus Sava – Security Researcher
Sumber:

