From f46811c75e00b9107cfd45b5a377a1f9393b9e58 Mon Sep 17 00:00:00 2001 From: decolua Date: Fri, 26 Jun 2026 11:01:24 +0700 Subject: [PATCH] fix(gemini): validate native model id to block path traversal Co-authored-by: Cursor --- src/app/api/v1beta/models/[...path]/route.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/api/v1beta/models/[...path]/route.js b/src/app/api/v1beta/models/[...path]/route.js index fd1d1cb8..12846312 100644 --- a/src/app/api/v1beta/models/[...path]/route.js +++ b/src/app/api/v1beta/models/[...path]/route.js @@ -12,6 +12,8 @@ import { initTranslators } from "open-sse/translator/index.js"; let initialized = false; const GEMINI_NATIVE_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/models"; +// Gemini model id charset (matches sanitizeGeminiFunctionName); blocks path traversal in upstream URL. +const GEMINI_NATIVE_MODEL_PATTERN = /^[a-zA-Z0-9_.:-]+$/; /** * Initialize translators once @@ -238,6 +240,9 @@ async function forwardGeminiNativeRequest(request, body, model, action) { if (authError) return authError; const modelId = normalizeGeminiNativeModel(model); + if (!GEMINI_NATIVE_MODEL_PATTERN.test(modelId)) { + return Response.json({ error: { message: "Invalid model" } }, { status: 400 }); + } const excludeConnectionIds = new Set(); const bodyText = JSON.stringify(body); let lastError = null;