TavernKeeper Scan Report

p08dev/SillyTavern-ChatMood

Commit 863f735 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 1 low

What this review found

No material or immediate-danger item was identified.

Contextual expected matches (1)

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The flagged code loads the extension's own companion file from the same folder it was installed in, then runs it. This is a common module-loading technique in hobbyist SillyTavern extensions that lack a build step. The content being executed is a local bundled file, not user input or data from an external server, so there is no demonstrated security risk.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: Line 39 uses `new Function(xhr.responseText)()` to execute the content of `lib/emotion-engine.js`, a companion module fetched via synchronous XHR from BASE_URL (the extension's own installation directory, derived from the script's own src attribute). The relativePath argument is a hardcoded string ('lib/emotion-engine.js'), not user-controlled. BASE_URL is resolved from the extension's own script tag origin and falls back to a same-origin local path. This is a module-loading pattern explicitly noted as borrowed from SillyTavern-EchoText. There is no demonstrated attacker-controlled input path into the evaluated string; the XHR target is the extension's own bundled file. The synchronous XHR is a deprecated API and a quality concern, but it does not constitute a security vulnerability in this context. No exfiltration, credential access, or concealed execution is present.

Impact: none · Exploitability: unlikely

Developer action: none

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

Coverage and limitations

JavaScript coverage

Tools

Limitations

Technical scan identity