flawopen.com/Teardowns/cve-2026-5027-langflow-multipart-file-write
Langflow CVE-2026-5027: traversal path pada upload file
CVE-2026-5027 memungkinkan penulisan file di luar area unggah Langflow. GTIG melaporkan eksploitasi; perbarui ke 1.9.0+.[1], [2], [6]
Sebuah ruang surat menerima paket dengan label dan tujuan yang dipilih pengirim. Jika petugas menggabungkan label itu ke folder ruang surat tanpa memeriksa jalur akhirnya, paket bisa tersimpan di luar ruang. Rute unggah Langflow memercayai nama multipart, sedangkan lapisan penyimpanan tidak memverifikasi secara terpisah bahwa jalur akhir tetap berada di dalam folder yang diizinkan.[2], [3]
Konsep Kunci & Istilah
CVE-2026-5027- ID dari Tenable untuk path traversal pada nama multipart POST /api/v2/files Langflow:
CWE-22, CVSS 3.1 8,8, dengan hak akses rendah sebagai prasyarat.[1], [2] Nama multipart- Nama yang diberikan klien pada Content-Disposition di unggahan multipart. Ini input tak tepercaya, bukan jalur file yang aman.[1], [2]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-22
Analisis Akar Masalah (Root Cause)
Catatan Tenable untuk CVE-2026-5027 menjelaskan POST /api/v2/files yang menerima nama multipart dengan komponen traversal dan menulis file di luar direktori tujuan. Batas keamanan meliputi rute API dan penyimpanan lokal: validasi parameter URL tidak memvalidasi nama dari multipart Content-Disposition; menggabungkan nama ke folder juga tidak membuktikan jalurnya tetap terkandung. Vektor CVE mensyaratkan hak akses rendah (PR:L); jangan menyatakan bahwa CVE itu sendiri melewati autentikasi. Google GTIG memasukkan CVE-2026-5027 dalam daftar kerentanan yang dikonfirmasi dieksploitasi di dunia nyata, tetapi ringkasan publiknya tidak membuktikan eksekusi kode universal. Dampak lebih lanjut dari arbitrary file write bergantung pada jalur yang dapat ditulis, hak proses, dan konfigurasi deployment; perlakukan sebagai dampak bersyarat, bukan RCE yang pasti. GHSA terkait Langflow mencantumkan CVE-2026-33309 dan juga menunjuk perbaikan 1.9.0. Artikel ini mengikuti CVE-2026-5027 menurut Tenable dan GTIG serta menjelaskan perbedaan ID secara terbuka. Patch Langflow yang digabung memvalidasi nama di API dan menerapkan pembatasan jalur kanonis di lapisan penyimpanan, termasuk sebelum membuat direktori.[1], [2], [3], [4], [5], [6]
Alur Serangan Langkah demi Langkah
Kode Sumber: Rentan vs Aman
Ini contoh ringkas yang mengikuti bentuk kode sumber, bukan diff upstream kata demi kata. Jalur rentan menggunakan nama dari klien sebagai jalur penyimpanan. Pola yang diperkuat memvalidasi nama lalu memeriksa tujuan kanonis terhadap akar kanonis di lapisan penyimpanan; PR upstream juga menolak pemisah dan karakter kontrol serta memeriksa containment sebelum membuat direktori. Pertahankan pemeriksaan penyimpanan meski lapisan HTTP sudah memvalidasi input. Contoh ini memerlukan Python dengan Path.is_relative_to dan tidak sendirian mencegah race kondisi check/use pada direktori yang dapat ditulis penyerang. Produksi memerlukan operasi file yang tahan race dan izin ketat. Perlindungannya adalah pembatasan jalur, bukan sekadar daftar nama terlarang.[3], [2], [4], [7]
Cuplikan sumber: Langflow api/v2/files.py dan services/storage/local.py — contoh ringkas batas keamanan
# Contoh ringkas alur data yang rentan.
new_filename = file.filename
file_path = folder_path / new_filename
await write_upload(file, file_path)
from pathlib import Path
def confined_upload_path(root: Path, client_name: str | None) -> Path:
name = Path(client_name or "").name
if not name or name in {".", ".."} or chr(0) in name:
raise ValueError("invalid upload filename")
base = root.resolve()
target = (base / name).resolve()
if not target.is_relative_to(base):
raise ValueError("upload path escapes storage root")
return target
# Panggil ini di batas penyimpanan tepat sebelum membuat atau menulis.
target = confined_upload_path(upload_root, file.filename)
await write_upload(file, target)
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Perbarui Langflow ke 1.9.0 atau lebih baru dan verifikasi versi terpasang langflow serta langflow-base pada image deployment.[2], [4]
- ✓Validasi nama multipart secara terpisah dari parameter URL; tolak pemisah, karakter kontrol, nama kosong, dan encoding tidak valid.[1], [2], [3]
- ✓Selesaikan jalur tujuan secara kanonis dan batasi di bawah akar unggahan pada lapisan penyimpanan sebelum membuat direktori atau menulis file.[3], [4], [7]
- ✓Uji traversal, jalur absolut, pemisah alternatif, byte null, Unicode, dan tujuan symlink; pastikan tidak ada file di luar akar sementara.[3], [7]
- ✓Jalankan Langflow dengan akun layanan khusus berhak minimum; buat unggahan non-eksekusi dan pisahkan dari kode aplikasi, direktori tugas terjadwal, dan kredensial.[2], [4]
- ✓Tinjau paparan internet dan log unggahan untuk nama di luar akar; investigasi dan rotasi rahasia hanya jika ada bukti akses host.[6], [2]
- ✓Jaga pemetaan ID tetap jelas: Tenable/GTIG memakai
CVE-2026-5027; GHSA terkait Langflow mencantumkanCVE-2026-33309. Jangan satukan tingkat keparahan atau versi sebelum memeriksa catatan.[1], [2], [4], [5], [6]
Sumber
- Catatan CVE — CVE-2026-5027
- Tenable TRA-2026-26 — path traversal upload multipart Langflow
- PR Langflow #12227 yang digabung — validasi nama dan pembatasan jalur
- Langflow GHSA-g2j9-7rj2-gm6c — advisori terkait, CVE-2026-33309
- Catatan CVE — CVE-2026-33309
- Google GTIG — tren penemuan dan eksploitasi kerentanan pada era AI
- MITRE CWE-22 — kegagalan membatasi path ke direktori terbatas