Penjelasan teknis
Starlette (framework ASGI yang mendasari FastAPI, dan secara transitif vLLM, LiteLLM, Text Generation Inference, server MCP, dan sebagian besar framework agen AI berbasis Python) merekonstruksi URL permintaan dengan menggabungkan header HTTP Host dengan jalur permintaan tanpa memvalidasi nilai Host terhadap batasan karakter RFC 9112. Dengan menyuntikkan karakter URI-special (?, /, atau #) ke dalam header Host, penyerang menyebabkan request.url.path menyimpang dari jalur rute ASGI sebenarnya, memungkinkan middleware keamanan berbasis jalur untuk dilewati sepenuhnya tanpa memerlukan kredensial. Satu perintah curl dengan 'Host: foo?' sudah cukup untuk mengembalikan 200 OK pada rute yang dengan benar mengembalikan 403 dalam kondisi normal. Skor CVSS resmi adalah 6.5 (Moderate), namun peneliti keamanan dari X41 D-Sec dan OSTIF secara publik berpendapat ini meremehkan tingkat keparahan dunia nyata mengingat penetrasi Starlette di seluruh stack infrastruktur AI.
Vektor serangan
Remote, unauthenticated. Penyerang mengirimkan permintaan HTTP dengan header Host yang tidak sesuai format (misalnya 'Host: legitimate-host.com?') ke endpoint apa pun yang didukung Starlette. Server ASGI merutekan permintaan secara normal; middleware Starlette mengevaluasi jalur URL yang beracun dan yang diurai ulang serta gagal mencocokkan pola rute yang dilindungi, memungkinkan permintaan melewati ke handler. Socket TCP mentah atau alat yang memungkinkan header Host khusus diperlukan (klien HTTP standar menormalisasi header).
Sistem yang terdampak
Versi Starlette 0.8.3 hingga 1.0.0 (semua versi sebelum patch). Downstream: FastAPI (semua versi menggunakan middleware Starlette untuk autentikasi berbasis jalur), server inferensi vLLM, gateway proxy LiteLLM, Text Generation Inference, shim ASGI kompatibel OpenAI, implementasi server MCP yang dibangun di atas FastAPI/Starlette, dan harnes agen AI, dashboard, dan registri model menggunakan kontrol akses berbasis jalur. Deployment di belakang Cloudflare atau AWS ALB menerima mitigasi parsial karena proxy tersebut menolak header Host yang tidak sesuai format secara default.
Mitigasi
1. Upgrade ke Starlette 1.0.1 atau lebih baru di seluruh dependensi langsung dan transitif — bangun ulang semua container dan instalasi vendored setelah upgrade, karena update paket in-place meninggalkan salinan vendored yang lebih lama tetap aktif. 2. Ganti penggunaan request.url atau request.url.path dalam middleware keamanan dengan request.scope['path'], yang mengembalikan jalur wire ASGI mentah yang tidak terpengaruh oleh konten header Host. 3. Sebarkan reverse proxy yang compliant HTTP/1.1 (Nginx, Apache httpd, Cloudflare) di depan layanan ASGI apa pun yang terekspos secara langsung. X41 D-Sec telah menerbitkan aturan Semgrep gratis, kueri CodeQL, dan scanner remote di badhost.org untuk mendeteksi instalasi yang rentan.