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 danger0 material7 low
What this review found
No material or immediate-danger item was identified.
Minor cautions
zizmor reported archived-uses
Minor caution · high confidence
The release workflow uses an old GitHub Action that GitHub has archived. This is a maintenance concern for the project's own release process but does not affect users who install the extension.
Technical evidence
Scanner reason: zizmor matched workflow-security rule archived-uses. The match applies to this repository.
Contextual assessment: The zizmor finding flags actions/create-release@v1 at line 70 as an action from an archived GitHub repository. This workflow is CI/CD automation that runs only on merged pull requests to the release branch and is not part of the shipped extension. Using an archived action is a maintenance and supply-chain hygiene issue for the repository owner, but it does not introduce runtime behavior on user machines, does not exfiltrate credentials, and does not affect extension users. The workflow uses only the standard GITHUB_TOKEN with expected permissions for creating releases.
Impact: none · Exploitability: unlikely
Developer action: Replace actions/create-release@v1 with a maintained alternative such as softprops/action-gh-release or the GitHub CLI gh release create command to avoid relying on archived tooling.
The code loads a local sound file and plays it through the browser's standard audio player as part of a joke animation. It only loads files from the extension's own folder and does not download or execute anything from the internet.
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 correlated fetch() with audioCtx.decodeAudioData() as a download-to-execution pattern. In reality, fetch() retrieves local MP3 files from the extension's own assets directory using URLs constructed from hardcoded arrays (daGnomes, daGnomesSounds) and the extensionFolderPath constant. decodeAudioData is a standard Web Audio API method that decodes audio binary data into a playable AudioBuffer; it does not execute arbitrary code. The URLs are fully determined by internal constants with no attacker-controlled input. Additionally, the initTheChosenGnomer call is commented out in the extension's initialization code, so this feature is not currently active. This is a benign easter-egg animation feature.
Impact: none · Exploitability: unlikely
Developer action: No change required for security. The feature is currently disabled; if re-enabled, ensure audio and image URLs remain derived from hardcoded constants as they are now.
The extension fetches HTML templates and lorebook data from the local SillyTavern server, which is normal for an extension. The code does not download anything from external sites or run untrusted code.
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 correlated network retrieval primitives with a code execution sink in the same file. Examining the actual data flow: fetch('/api/settings/get') calls the local SillyTavern API to retrieve world info names, and $.get() retrieves HTML templates from the extension's own local folder path. Neither call reaches an external or attacker-controlled endpoint. The likely execution sink is element.innerHTML assignment in createElement, which is used for building extension UI elements from extension-controlled data, not from untrusted external input. All network destinations are same-origin local SillyTavern APIs or local extension asset paths. This is standard, expected SillyTavern extension behavior matching the project's stated purpose of managing world info entries.
Impact: none · Exploitability: unlikely
Developer action: No change required for security. If desired, sanitize or avoid innerHTML assignment in createElement when handling dynamic values, but no demonstrated risk path exists.
createElement uses innerHTML assignment for DOM construction
low risk · medium confidence
A helper function can write raw HTML into page elements. Currently it is only used with extension-controlled content, but if lorebook entry text were ever passed through it, that could become a problem.
Technical assessment
The createElement function accepts an options.innerHTML parameter and assigns it directly to element.innerHTML. While current call sites use this for extension-controlled UI construction, if any future code path passes user-controlled lorebook entry content through this function, it could create a self-XSS vector. No such path is demonstrated in the supplied code.
Impact: low · Exploitability: unlikely
Developer action: Prefer textContent or template-based rendering over innerHTML when the content originates from user-editable lorebook entries to eliminate any future XSS risk.