Logika rekonstruksi URL Starlette menciptakan ketidakcocokan berbahaya antara path yang di-routing dan path yang diotorisasi. Ketika permintaan HTTP tiba, router secara tepat mengidentifikasi endpoint target dari baris permintaan mentah. Namun, ketika aplikasi kemudian memeriksa request.url untuk memutuskan apakah pengguna memiliki otorisasi, Starlette membangun ulang URL itu dengan menggabungkan header Host dengan path permintaan dan mengurai ulang hasilnya .
Seorang penyerang dapat mengeksploitasi ini dengan mengirim permintaan ke endpoint yang dilindungi seperti /admin/secure dengan header Host yang telah diracuni secara cermat, misalnya:
Host: legitimate.com/health?x=
Router akan mengarahkan permintaan dengan benar ke handler /admin/secure—tetapi ketika middleware otorisasi memeriksa request.url.path, ia akan melihat /health. Jika middleware tersebut menggunakan daftar izin yang mempercayai /health sebagai endpoint health-check publik, penyerang akan lolos. Pemeriksaan otorisasi dilewati secara diam-diam; tanpa token, tanpa kata sandi, tanpa interaksi pengguna .
Advisory X41 D-Sec mengonfirmasi kesederhanaan yang mengejutkan: "Cukup dengan menyisipkan satu karakter ke header HTTP Host sudah cukup untuk mengelabui server" . Karakter spesifik yang memicu kebingungan termasuk garis miring (
/), tanda tanya (?), dan simbol pagar (#)—pembatas URL standar yang tidak pernah divalidasi oleh Starlette .
Jangkauan kerentanan ini sangat mengejutkan. Starlette adalah mesin tersembunyi di balik hampir setiap alat orkestrasi dan penyajian AI berbasis Python utama, diunduh sekitar 325 juta kali per minggu . Semua proyek turunan yang mengonsumsi Starlette sebelum versi 1.0.1 akan terpengaruh:
Versi yang terpengaruh mencakup Starlette >= 0.8.3 hingga < 1.0.1, yang berarti sistem yang telah menjalankan rilis stabil selama bertahun-tahun semuanya berpotensi rentan .
Peringkat keparahan resmi untuk CVE-2026-48710 telah memicu ketidaksepakatan signifikan dalam komunitas keamanan:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N memperlakukan dampak pada kerahasiaan dan integritas sebagai "Low" (Rendah), membatasi ruang lingkup ke "Unchanged" (Tidak Berubah), dan melaporkan tidak ada dampak ketersediaan CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:NTiga faktor mendasari argumen peneliti bahwa skor 6.5 sangat rendah:
SC:H/SI:H dari CVSS v4.0 Starlette versi 1.0.1, dirilis pada 22 Mei 2026, berisi tambalan definitif. Perbaikan ini dilacak dalam GitHub Security Advisory GHSA-86qp-5c8j-p5mr dan advisory X41 X41-2026-002 .
Tambalan menerapkan dua perlindungan inti:
Host sekarang divalidasi berdasarkan tata bahasa yang ditentukan dalam RFC 9112 §3.2 dan RFC 3986 §3.2.2 sebelum digunakan untuk membangun request.url scope["server"]—tuple koneksi server yang sebenarnya—bukan nilai yang diberikan oleh penyerang. Hasilnya, request.url.path secara konsisten mencerminkan path yang di-routing sebenarnya Proyek FastAPI telah mengonfirmasi bahwa perbaikan tersebut efektif dan merekomendasikan untuk segera meningkatkan starlette ke >=1.0.1 .
Memperbarui paket Starlette adalah langkah pertama yang esensial, tetapi pertahanan yang komprehensif memerlukan beberapa lapisan:
Segera tambal. Di setiap lingkungan virtual, citra kontainer, dan pipeline penerapan yang menjalankan infrastruktur AI, jalankan:
pip install --upgrade starlette
Mulai ulang semua layanan yang terpengaruh. Ini berlaku untuk instalasi Starlette langsung serta instans FastAPI, vLLM, LiteLLM, dan server MCP .
Audit dan kunci dependensi. FastAPI dan framework lain mungkin tidak secara otomatis menegakkan versi minimum Starlette. Secara eksplisit minta starlette>=1.0.1 di requirements.txt, pyproject.toml, poetry.lock, atau file kunci setara. Jalankan pip list | grep starlette.
Pindai setiap komponen di tumpukan AI. Setiap layanan Python yang menyajikan HTTP—aplikasi FastAPI kustom, endpoint inferensi LLM, pesawat orkestrasi agen, panel evaluasi model, dan proxy yang kompatibel dengan OpenAI—mungkin menyematkan versi Starlette yang rentan. Lakukan audit infrastruktur penuh .
Perkuat reverse proxy dan WAF. Konfigurasikan nginx, Envoy, HAProxy, Cloudflare, atau AWS ALB untuk menolak atau membersihkan header Host yang cacat sebelum meneruskan lalu lintas ke aplikasi Python. Ini memberikan pertahanan berlapis yang memblokir eksploitasi bahkan jika penambalan aplikasi tertunda .
Tulis ulang pemeriksaan keamanan path agar tidak bergantung pada request.url.path. Akar masalahnya adalah ketidakcocokan antara path routing dan request.url.path. Di mana pun memungkinkan, alihkan middleware otorisasi untuk menggunakan request.scope["path"], yang berasal dari cakupan ASGI mentah dan tidak dapat diracuni oleh header Host . X41 D-Sec merekomendasikan untuk sepenuhnya menghindari otorisasi berbasis path demi mekanisme otentikasi intrinsik endpoint
.
Uji keterpaparan. Sebuah pemindai online telah dirilis untuk membantu organisasi memverifikasi apakah server mereka rentan . Dikombinasikan dengan pengujian penetrasi menyeluruh terhadap batasan otentikasi, ini dapat mengungkap permukaan serangan yang terlewatkan.
Untuk penerapan berbasis Debian, CVE-2026-48710 dilacak di Debian Security Tracker dengan tingkat keparahan "important," dan rilis titik starlette yang ditambal tersedia untuk suite yang terpengaruh . Terapkan transaksi
apt korektif dari repositori bullseye-security atau yang setara, dan muat ulang file unit systemd yang terpengaruh .
Comments
0 comments