flawopen.com/AI Security/langgraph-js-custom-auth-cross-user-store-access
LangGraph JS Auth: akses Store lintas pengguna
langgraph-api <0.15.0 dapat kehilangan perubahan namespace Store dari custom-auth JS/TS, membuka akses lintas pengguna. Perbarui ke 0.15.0.[1], [2]
Bayangkan pustakawan memeriksa kartu Anda lalu meminta meja lain mengambil buku. Meja kedua menulis nomor rak Anda, tetapi perubahan itu hilang saat serah-terima dan buku diambil dari rak yang pertama kali diminta pengunjung. Jalur autentikasi JavaScript/TypeScript yang terdampak dapat kehilangan penulisan ulang namespace antara runtime otorisasi dan operasi Store. Perbaikan meneruskan namespace yang telah diotorisasi dan memvalidasinya sebelum Store digunakan.[1]
Konsep Kunci & Istilah
GHSA-4hm6-w6qq-w73v- Advisori LangGraph berkeparahan tinggi yang diterbitkan 28 September 2026. Tidak ada CVE yang ditetapkan. Paket terdampak ialah langgraph-api dan diperbaiki pada versi 0.15.0.[1]
Namespace Store- Nama hierarkis untuk mengelompokkan rekaman LangGraph Store. Aplikasi sering menyertakan identitas pengguna atau tenant untuk memisahkan data.[1]
Handler otorisasi khusus- Kode aplikasi yang menentukan apakah permintaan terautentikasi boleh mengakses sumber daya dan dapat menulis ulang namespace sebelum operasi Store.[1]
Pemetaan kerangka kerja
Alur Serangan Langkah demi Langkah
Pastikan deployment sesuai kondisi advisori
Periksa apakah langgraph-api berada pada >=0.1.2 dan <0.15.0 serta server memakai handler autentikasi khusus JavaScript atau TypeScript.[1]
Temukan penulisan ulang namespace
Handler mengubah namespace permintaan untuk menyertakan atau menerapkan identitas pengguna terautentikasi, bukan menolak permintaan di luar namespace tersebut.[1]
Hasil otorisasi melintasi batas runtime
Pada versi terdampak, perubahan namespace mungkin tidak diteruskan ke operasi Store. Namespace asli dari peminta dapat tetap digunakan.[1]
Pengguna terautentikasi menargetkan namespace lain
Akun biasa dapat meminta operasi Store pada rekaman di luar namespace sendiri. Advisori menyebut baca, timpa, cari, dan hapus sebagai dampak yang mungkin.[1]
Analisis Akar Masalah (Root Cause)
GHSA dari maintainer LangGraph yang diterbitkan pada 28 September 2026 menjelaskan cacat di langgraph-api versi >=0.1.2 dan <0.15.0 bila semua kondisi berikut berlaku: deployment memakai autentikasi khusus JavaScript atau TypeScript; handler otorisasi Store menulis ulang namespace yang diminta agar data terbatas pada pengguna saat ini; pengguna biasa yang sudah terautentikasi dapat mengirim operasi Store; dan data beberapa pengguna melewati jalur otorisasi tersebut. Advisori menyatakan handler autentikasi khusus Python tidak terdampak. Handler JavaScript/TypeScript yang menolak namespace tanpa izin, alih-alih menulis ulang, juga tidak terdampak. Perubahan namespace dari handler dapat hilang saat melintasi batas runtime sehingga operasi Store memakai namespace asli dari permintaan. Pengguna terautentikasi dapat membaca, menimpa, mencari, atau menghapus rekaman di luar namespace yang diizinkan. Ini tidak melewati login dan bukan serangan jarak jauh tanpa autentikasi. Advisori memberi tingkat High, CVSS 4.0 8,6, serta CWE-639 dan CWE-863. Versi 0.15.0 meneruskan perubahan handler melewati batas, memvalidasi namespace hasil, dan menolak perubahan otorisasi yang tidak valid atau tidak dapat diterapkan dengan aman. Jika peningkatan tertunda, workaround maintainer adalah menolak namespace tanpa izin pada setiap aksi Store. Kode berikut ialah ilustrasi TypeScript ringkas atas alur data, bukan sumber SDK.[1]
Kode Sumber: Rentan vs Aman
Contoh TypeScript ringkas ini mengilustrasikan kontrak batas; nama fungsi dan bentuk hasil hanya ilustrasi, bukan kode sumber SDK LangGraph. Advisori memastikan perubahan otorisasi JS/TS dapat hilang sebelum operasi Store, tetapi tidak menerbitkan implementasi internal yang persis seperti ini. Karena itu, sisi rentan hanya memodelkan invarian yang didokumentasikan: Store memakai namespace permintaan, bukan namespace yang diotorisasi. Sisi yang diperbaiki menggunakan dan memvalidasi hasil otorisasi. Workaround yang didokumentasikan maintainer adalah menolak namespace tanpa izin, bukan menulis ulang, pada setiap aksi Store.[1]
Cuplikan sumber: Batas otorisasi LangGraph API ke Store — kontrak ilustratif ringkas
type StoreRequest = { namespace: string[]; key: string };
type AuthorizationResult = { allowed: boolean; namespace: string[] };
async function readStore(userId: string, request: StoreRequest) {
const authorization = await authorizeStore(userId, request); // Illustrative bridge contract.
return store.get(request.namespace, request.key); // The bridge drops the authorized result.
}
type StoreRequest = { namespace: string[]; key: string };
type AuthorizationResult = { allowed: boolean; namespace: string[] };
async function readStore(userId: string, request: StoreRequest) {
const authorization = await authorizeStore(userId, request); // Illustrative bridge contract.
if (!authorization.allowed) throw new Error("forbidden");
const namespace = validateAuthorizedNamespace(userId, authorization.namespace);
return store.get(namespace, request.key); // Apply the authorized result.
}
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Inventarisasi versi
langgraph-apidan identifikasi deployment autentikasi khusus JavaScript/TypeScript; handler Python berada di luar cakupan advisori ini.[1] - ✓Tingkatkan deployment terdampak ke
langgraph-api>=0.15.0dan verifikasi artefak yang benar-benar di-deploy, bukan hanya lockfile atau cabang sumber.[1], [2] - ✓Sebelum peningkatan, pastikan setiap handler otorisasi Store menolak permintaan di luar namespace pengguna terautentikasi; jangan mengandalkan penulisan ulang yang mungkin hilang.[1]
- ✓Uji
get,put,search,delete, dan daftar namespace menggunakan dua identitas uji; pastikan tiap operasi dibatasi pada namespace yang diizinkan dan akses lintas pengguna ditolak.[1] - ✓Tinjau log akses dan perubahan Store yang tersedia untuk mencari pembacaan, pencarian, atau penulisan ke namespace pengguna lain. Jika menemukan perubahan tanpa izin, simpan bukti dan nilai rekaman terdampak sebelum pembersihan.[1], [5]