Skip to content

Commit c527867

Browse files
committed
fix: validate resolved Ollama URL including env fallback against SSRF allowlist
1 parent e89e3c2 commit c527867

3 files changed

Lines changed: 14 additions & 11 deletions

File tree

apps/sim/app/api/knowledge/search/route.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -329,12 +329,11 @@ export async function POST(request: NextRequest) {
329329
const config = kbConfigMap.get(kbId)!
330330
const cfg = (config.chunkingConfig ?? {}) as ExtendedChunkingConfig
331331
const { modelName } = parseEmbeddingModel(config.embeddingModel)
332-
// Re-validate stored URL against SSRF allowlist before making outbound requests
333-
if (cfg.ollamaBaseUrl && !isAllowedOllamaUrl(cfg.ollamaBaseUrl)) {
334-
logger.warn(`[${requestId}] Blocked disallowed Ollama URL for KB ${kbId}: ${cfg.ollamaBaseUrl}`)
332+
const baseUrl = getOllamaBaseUrl(cfg.ollamaBaseUrl)
333+
if (!isAllowedOllamaUrl(baseUrl)) {
334+
logger.warn(`[${requestId}] Blocked disallowed Ollama URL for KB ${kbId}: ${baseUrl}`)
335335
continue
336336
}
337-
const baseUrl = getOllamaBaseUrl(cfg.ollamaBaseUrl)
338337
uniquePairs.set(`${modelName}:${baseUrl}`, { modelName, ollamaBaseUrl: baseUrl })
339338
}
340339
await Promise.all(

apps/sim/lib/knowledge/chunks/service.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
setKBChunksEnabled,
2424
updateKBChunkFields,
2525
} from '@/lib/knowledge/dynamic-tables'
26-
import { generateEmbeddings, isAllowedOllamaUrl } from '@/lib/knowledge/embeddings'
26+
import { generateEmbeddings, getOllamaBaseUrl, isAllowedOllamaUrl } from '@/lib/knowledge/embeddings'
2727
import { estimateTokenCount } from '@/lib/tokenization/estimators'
2828

2929
const logger = createLogger('ChunksService')
@@ -167,8 +167,9 @@ export async function createChunk(
167167
const rawKbCfg = kbRows[0].chunkingConfig as { ollamaBaseUrl?: string } | null
168168
const kbOllamaBaseUrl = rawKbCfg?.ollamaBaseUrl
169169

170-
if (kbOllamaBaseUrl && !isAllowedOllamaUrl(kbOllamaBaseUrl)) {
171-
throw new Error(`Knowledge base has a disallowed Ollama URL: ${kbOllamaBaseUrl}`)
170+
const resolvedCreateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
171+
if (!isAllowedOllamaUrl(resolvedCreateUrl)) {
172+
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedCreateUrl}`)
172173
}
173174

174175
const { provider } = parseEmbeddingModel(kbEmbeddingModel)
@@ -477,8 +478,9 @@ export async function updateChunk(
477478
const rawCfg = kbRows[0].chunkingConfig as { ollamaBaseUrl?: string } | null
478479
const kbOllamaBaseUrl = rawCfg?.ollamaBaseUrl
479480

480-
if (kbOllamaBaseUrl && !isAllowedOllamaUrl(kbOllamaBaseUrl)) {
481-
throw new Error(`Knowledge base has a disallowed Ollama URL: ${kbOllamaBaseUrl}`)
481+
const resolvedUpdateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
482+
if (!isAllowedOllamaUrl(resolvedUpdateUrl)) {
483+
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedUpdateUrl}`)
482484
}
483485

484486
const { provider } = parseEmbeddingModel(kbEmbeddingModel)

apps/sim/lib/knowledge/documents/service.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
} from '@/lib/knowledge/dynamic-tables'
4242
import {
4343
generateEmbeddings,
44+
getOllamaBaseUrl,
4445
getOllamaModelContextLength,
4546
isAllowedOllamaUrl,
4647
} from '@/lib/knowledge/embeddings'
@@ -489,9 +490,10 @@ export async function processDocumentAsync(
489490
let effectiveOverlap = processingOptions.chunkOverlap ?? kbConfig.overlap
490491
let ollamaContextLength: number | undefined
491492
if (embeddingProvider === 'ollama') {
492-
if (kbConfig.ollamaBaseUrl && !isAllowedOllamaUrl(kbConfig.ollamaBaseUrl)) {
493+
const resolvedOllamaUrl = getOllamaBaseUrl(kbConfig.ollamaBaseUrl)
494+
if (!isAllowedOllamaUrl(resolvedOllamaUrl)) {
493495
throw new Error(
494-
`Knowledge base has a disallowed Ollama URL: ${kbConfig.ollamaBaseUrl}. ` +
496+
`Knowledge base has a disallowed Ollama URL: ${resolvedOllamaUrl}. ` +
495497
'The URL must point to localhost, a private IP address, or host.docker.internal.'
496498
)
497499
}

0 commit comments

Comments
 (0)