TavernKeeper Scan Report

prolix-oc/SillyTavern-SimTracker

Commit 2ab0c81 Reviewed

No material or immediate-danger concern was identified in this review.

This advisory report describes what the named tools and review process found at one exact commit. Unknown or unobserved behavior may still exist.

0 immediate danger 0 material 3 low

What this review found

No material or immediate-danger item was identified.

Minor cautions

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

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.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
formatUtils.js:214
Contextual expected matches (2)

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

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.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.shady-link
File role
production
Source
secondaryLLM.js:388

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · medium confidence

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.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
renderer.js:635

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity