A crafted input might briefly slow or freeze the local client, without showing broader security harm.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.
Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.
Impact: low · Exploitability: plausible
Developer action: Bound the input length or replace the expression when practical.
This file handles making requests to LLM providers like OpenAI, Anthropic, Google, and OpenRouter to generate tracker data. All the web addresses it contacts are the official, well-known API endpoints for those services. API keys are retrieved through SillyTavern's built-in secret storage and sent only to the appropriate provider. The scanner flag appears to be a false positive from standard streaming-response parsing code.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The scanner flagged line 388, which is SSE stream parsing code checking for the 'data: ' prefix in streaming LLM responses. The PROVIDER_CONFIG object defines endpoints that are all legitimate, well-known LLM provider APIs: api.openai.com, api.anthropic.com, openrouter.ai, generativelanguage.googleapis.com, and llm.chutes.ai. API keys are fetched from SillyTavern's secrets system via /api/secrets/find and are only sent to their corresponding provider endpoint as Authorization headers or query parameters. The code also respects SillyTavern's reverse proxy configuration, optionally routing requests through the user's configured proxy. No credentials are exfiltrated to third-party or unexpected destinations. The network access is proportional to the stated purpose of secondary LLM generation and is user-configured through extension settings. The redacted secret markers correspond to legitimate access of SillyTavern's secret storage and reverse proxy password fields.
The extension lets users load custom tracker templates, and those templates can include small pieces of JavaScript logic to transform tracker data before display. This code runs that logic. Since the logic comes from template files the user explicitly selects and configures—not from chat messages or AI output—this is an intended feature of the template system.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: The executeTemplateLogic function at line 635 constructs a new Function from currentTemplateLogic, which is imported from templating.js. Based on the project purpose and the loadCurrentTemplateData function visible in file, template logic originates from user-selected template JSON files or user presets stored in extension settings—not from AI-generated message content or character card data. The function wraps the logic in strict mode, passes a data object, and returns the transformed data. Execution is wrapped in try/catch with toastr error reporting and a fallback returning original data. This is an expected capability for an extension that advertises custom templates with logic support. The code comment claiming a 'sandboxed function' is inaccurate since new Function executes in global scope, but the template logic source is user-controlled configuration, not untrusted input, so no demonstrated attacker-controlled path exists.