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.
The extension fetches sprite image lists from the local SillyTavern server and displays them in the UI using standard jQuery DOM updates. This is exactly what a sprite management extension is supposed to do. There is no external download feeding into code execution here.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The scanner flagged a correlation between network retrieval and a code execution sink. The fetch at line 135 targets the local same-origin SillyTavern API endpoint /api/sprites/get with getRequestHeaders(). The response is JSON containing sprite path and label data, which is grouped and sorted but never passed to eval, Function, or any dynamic code execution primitive. The 'execution sink' is jQuery's .append() in createListItemHtml and drawSpritesList, which inserts HTML strings built from sprite metadata into the DOM. This is standard UI rendering for a SillyTavern sprite extension and matches the project's stated purpose. The data originates from the local server's own sprite API, not from an external or attacker-controlled source. No untrusted external input flows into a code execution sink.
This file manages the character assignment UI, using local SillyTavern API calls to upload, fetch, and delete sprite files and jQuery to build the settings interface. All network calls go to the local server. The DOM updates are standard UI rendering for an expression management extension.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The scanner flagged a correlation between network retrieval and a code execution sink. All fetch calls in this file target local same-origin SillyTavern API endpoints: /api/sprites/upload (line 184), /api/sprites/delete (lines 195, 301), and /api/sprites/get (line 260), each using getRequestHeaders(). The 'execution sink' is jQuery .append() and .val()/.trigger() for rendering the character assignment UI from local settings and context data. User-supplied folder names from prompt() are validated against path separators and '..' traversal (lines 153-156). No external network response is passed to a dynamic code execution primitive. The data flows are consistent with the extension's stated purpose of managing expression sets and character profile assignments.
The extension fetches a profile JSON file from the local SillyTavern server and parses it to load expression rules. This is a normal data-handling operation described in the project features, not a security risk.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: Detailed technical wording was omitted by the public report safety filter.
The flagged code does two things: it sends image files to the SillyTavern app's own built-in sprite management endpoints, and it lazily loads the host's popup dialog module. Neither fetches remote executable code or runs anything hidden. This is normal extension behavior for managing character expression sprites.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: Detailed technical wording was omitted by the public report safety filter.
User-influenced values sent to host sprite API without strict sanitization
low risk · high confidence
The extension passes character folder names and sprite names to the host API with only limited client-side validation. If those values were ever tampered with, a malicious path might reach the server. In practice, the values come from SillyTavern UI data attributes and user popup input, so triggering this is unlikely. A stricter client-side check would add defense in depth.
Technical assessment
The upload and delete handlers send 'name', 'label', and 'spriteName' values sourced from jQuery data attributes and user input to the host sprite API without enforcing a strict filesystem-safe allowlist. validateSpriteName constrains the duplicate name format, but the base 'name' (character folder) and 'expression' values come from DOM data attributes and are passed through without sanitization. This is a client-side-only concern since the host API is responsible for path validation, but defense-in-depth validation would reduce risk if the host API ever changes.
Impact: low · Exploitability: unlikely
Developer action: Sanitize expression and spriteName values or enforce a strict allowlist before appending them to FormData, to prevent path traversal on the host API side even if the server validates.