TavernKeeper Scan Report

Tyranomaster/expressions-plus

Commit 738afed 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 7 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
src/sprite-pack.js:391
Contextual expected matches (5)

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

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.

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.download-to-execution
File role
production
Source
src/sprites.js:135-389

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

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.

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.download-to-execution
File role
production
Source
src/ui-character-assignments.js:7-184

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

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.

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.download-to-execution
File role
production
Source
src/profiles.js:14-243

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

Detailed wording was omitted by the public report safety filter.

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.

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.download-to-execution
File role
production
Source
src/sprite-pack.js:34-269

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

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.

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.download-to-execution
File role
production
Source
src/ui-handlers.js:7-206

Related contextual observations

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.

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity