TavernKeeper Scan Report

EnchantedRobot/SillyTavern-Character-Tools

Commit fd39db1 Reviewed

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

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

0 immediate danger 0 material 21 low

What this review found

No material or immediate-danger item was identified.

Minor cautions

Dependency advisory GHSA-5xrq-8626-4rwp applies

Minor caution · medium confidence

The flagged package is a development tool used only for testing or linting, not part of the extension that users actually run. The vulnerability cannot affect people who install and use this SillyTavern extension.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-5xrq-8626-4rwp to a dependency declared by this repository.

Contextual assessment: The project's package.json declares only devDependencies (eslint, vitest, globals) with no runtime dependencies. The shipped extension consists of index.js and style.css loaded by SillyTavern; npm dev tooling is not included in the runtime artifact. This advisory matches a transitive dev-only dependency (esbuild 0.21.5 visible in the lockfile, pulled by vitest). The vulnerable code has no runtime reachability for end users of the extension.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to latest compatible versions to keep the development environment current, but no urgent action is needed for user safety.

Scanner
osv-scanner 2.4.0
Rule
GHSA-5xrq-8626-4rwp
File role
production
Source
package-lock.json

zizmor reported unpinned-uses

Minor caution · high confidence

The automated test workflow uses version labels for its setup steps instead of locking them to exact versions. This is a common minor best-practice gap, not a sign of anything malicious, and it only affects the project's own test pipeline.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The flagged line references actions/setup-node using a major-version tag rather than a commit SHA. The same pattern appears for actions/checkout. This is a CI-only workflow with no deployment, no third-party actions, and no obvious secret exposure beyond the standard GitHub token. A compromised tag could in principle substitute malicious action code, but these are first-party GitHub-maintained actions and the workflow runs only lint and tests on pull requests.

Impact: low · Exploitability: unlikely

Developer action: Pin GitHub Actions to full commit SHAs with version comments for reproducibility and supply-chain hardening.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/ci.yml:36

Dependency advisory GHSA-v6wh-96g9-6wx3 applies

Minor caution · medium confidence

The flagged package is only used during development and testing. It is not included in the extension that users install, so the vulnerability has no impact on end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-v6wh-96g9-6wx3 to a dependency declared by this repository.

Contextual assessment: This advisory targets a transitive dependency of the declared devDependencies (vitest or eslint). The package.json has zero runtime dependencies; the extension ships only static JS and CSS to SillyTavern. The vulnerable code path is not reachable in the production extension.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to resolve the advisory in the development environment; no user-facing risk requires urgent action.

Scanner
osv-scanner 2.4.0
Rule
GHSA-v6wh-96g9-6wx3
File role
production
Source
package-lock.json

zizmor reported excessive-permissions

Minor caution · high confidence

The CI workflow doesn't explicitly declare what permissions it needs. In practice GitHub limits fork-based pull requests to read-only access, and this workflow only runs code checks, so there's little real risk. Declaring minimal permissions explicitly is a recommended hygiene step.

Technical evidence

Scanner reason: zizmor matched workflow-security rule excessive-permissions in this repository.

Contextual assessment: The workflow has no explicit permissions block, so it inherits the repository default. For pull_request events from forks, GitHub restricts tokens to read-only. This workflow only runs lint and tests with no write operations, artifacts, or secret usage, so the practical risk is minimal. Adding an explicit read-only permissions block is best practice.

Impact: low · Exploitability: unlikely

Developer action: Add a top-level permissions block with contents: read to make the minimal access explicit.

Scanner
zizmor 1.28.0
Rule
excessive-permissions
File role
tooling
Source
.github/workflows/ci.yml:1-42

zizmor reported unpinned-uses

Minor caution · high confidence

The workflow uses a version label for a standard GitHub action instead of locking it to a specific code snapshot. This is very common and low-risk for a simple test workflow, but locking to a specific version snapshot is the recommended best practice.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The checkout action is referenced by major version tag @v4 rather than a pinned commit SHA. This is a first-party GitHub action used in a standard lint/test workflow with no secrets or deployment steps. Tag-based references are common but can be retargeted; SHA pinning is the recommended hardening practice.

Impact: low · Exploitability: unlikely

Developer action: Pin actions/checkout to a specific commit SHA instead of the @v4 tag.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/ci.yml:35

Dependency advisory GHSA-4w7w-66w2-5vf9 applies

Minor caution · medium confidence

The flagged package is a development-only tool not included in the extension users run, so this vulnerability does not affect end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-4w7w-66w2-5vf9 to a dependency declared by this repository.

Contextual assessment: This advisory matches a transitive dev-only dependency. The project declares no runtime npm dependencies; all packages in the lockfile are development tooling for linting and testing. The vulnerable code is not shipped to or executed by end users of the SillyTavern extension.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to clear the advisory; no urgent user-safety action is needed.

Scanner
osv-scanner 2.4.0
Rule
GHSA-4w7w-66w2-5vf9
File role
production
Source
package-lock.json

Dependency advisory GHSA-67mh-4wv8-2f99 applies

Minor caution · medium confidence

The flagged package is used only for development and testing, not in the extension that users install. The vulnerability cannot affect end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-67mh-4wv8-2f99 to a dependency declared by this repository.

Contextual assessment: This advisory targets a transitive dependency of vitest or eslint, both declared as devDependencies. The extension has no runtime npm dependencies and ships only static frontend assets. The vulnerable code has no runtime reachability in the production extension.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to resolve the advisory in the development environment; no urgent action is required for user safety.

Scanner
osv-scanner 2.4.0
Rule
GHSA-67mh-4wv8-2f99
File role
production
Source
package-lock.json

Dependency advisory GHSA-5p4m-2wfm-xmqj applies

Minor caution · medium confidence

Although the advisory is rated high severity, the affected package is a development tool not included in the extension users run. The vulnerability does not reach end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-5p4m-2wfm-xmqj to a dependency declared by this repository.

Contextual assessment: This high-severity advisory matches a transitive dev-only dependency (likely vite or esbuild pulled by vitest). The package.json declares only devDependencies with no runtime dependencies. The shipped extension is static JS and CSS; the vulnerable code is not executed in the user-facing product.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to the latest compatible versions to resolve the advisory; no urgent user-safety action is needed.

Scanner
osv-scanner 2.4.0
Rule
GHSA-5p4m-2wfm-xmqj
File role
production
Source
package-lock.json

zizmor reported unpinned-uses

Minor caution · high confidence

The workflow uses a version label for a standard Node.js setup action instead of locking it to a specific code snapshot. Low-risk for a simple test workflow, but locking to a snapshot is best practice.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The setup-node action is referenced by major version tag @v4 rather than a pinned commit SHA. This is a first-party GitHub action used only to install Node.js for running lint and tests. No secrets or sensitive operations are involved. SHA pinning is recommended hardening.

Impact: low · Exploitability: unlikely

Developer action: Pin actions/setup-node to a specific commit SHA instead of the @v4 tag.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/ci.yml:19

Dependency advisory GHSA-fxqj-rqcc-2cmp applies

Minor caution · medium confidence

The flagged package is a development-only tool not part of the extension users install, so the vulnerability has no impact on end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-fxqj-rqcc-2cmp to a dependency declared by this repository.

Contextual assessment: This advisory matches a transitive dev-only dependency of the declared devDependencies. The extension ships no runtime npm packages; only static frontend assets are loaded by SillyTavern. The vulnerable code is not reachable in production.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to clear the advisory; no urgent user-safety action is required.

Scanner
osv-scanner 2.4.0
Rule
GHSA-fxqj-rqcc-2cmp
File role
production
Source
package-lock.json

Dependency advisory GHSA-mh99-v99m-4gvg applies

Minor caution · medium confidence

The advisory is rated high, but the affected package is a development tool not included in the extension users run. The vulnerability does not reach end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-mh99-v99m-4gvg to a dependency declared by this repository.

Contextual assessment: This high-severity advisory targets a transitive dependency of vitest or eslint, both declared as devDependencies. The project has no runtime npm dependencies; the extension ships only static JS and CSS. The vulnerable code path is not executed by end users.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to resolve the advisory in the development environment; no urgent user-safety action is needed.

Scanner
osv-scanner 2.4.0
Rule
GHSA-mh99-v99m-4gvg
File role
production
Source
package-lock.json

zizmor reported unpinned-uses

Minor caution · high confidence

The workflow uses a version label for a standard GitHub action instead of a locked snapshot. Low-risk, but pinning to a specific version is recommended.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The checkout action in the lint job is referenced by major version tag @v4 rather than a pinned commit SHA. Same assessment as the other unpinned-uses findings: first-party action, no secrets, no deployment, low practical risk.

Impact: low · Exploitability: unlikely

Developer action: Pin actions/checkout to a specific commit SHA instead of the @v4 tag.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/ci.yml:18

zizmor reported excessive-permissions

Minor caution · high confidence

The test job doesn't explicitly declare its permissions. It only runs tests with no write operations, so practical risk is low. Declaring minimal permissions explicitly is recommended hygiene.

Technical evidence

Scanner reason: zizmor matched workflow-security rule excessive-permissions in this repository.

Contextual assessment: The test job has no explicit permissions block and inherits repository defaults. The job only runs npm ci and npm test with no write operations, artifacts, or secrets. For fork pull requests, GitHub defaults to read-only. Adding explicit minimal permissions is best practice.

Impact: low · Exploitability: unlikely

Developer action: Add a job-level or workflow-level permissions block with contents: read.

Scanner
zizmor 1.28.0
Rule
excessive-permissions
File role
tooling
Source
.github/workflows/ci.yml:28-42

zizmor reported excessive-permissions

Minor caution · high confidence

The lint job doesn't explicitly declare its permissions. It only runs linting with no write operations, so practical risk is low. Declaring minimal permissions explicitly is recommended hygiene.

Technical evidence

Scanner reason: zizmor matched workflow-security rule excessive-permissions in this repository.

Contextual assessment: The lint job has no explicit permissions block and inherits repository defaults. The job only runs npm ci and npm run lint with no write operations, artifacts, or secrets. For fork pull requests, GitHub defaults to read-only. Adding explicit minimal permissions is best practice.

Impact: low · Exploitability: unlikely

Developer action: Add a job-level or workflow-level permissions block with contents: read.

Scanner
zizmor 1.28.0
Rule
excessive-permissions
File role
tooling
Source
.github/workflows/ci.yml:15-27

Dependency advisory GHSA-2v37-7h3g-55p8 applies

Minor caution · medium confidence

The advisory is rated high, but the affected package is a development tool not included in the extension users install. The vulnerability cannot affect end users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-2v37-7h3g-55p8 to a dependency declared by this repository.

Contextual assessment: This high-severity advisory matches a transitive dev-only dependency (likely vite or esbuild from the vitest toolchain). The package.json declares only devDependencies and no runtime dependencies. The shipped extension consists of static frontend assets; the vulnerable code is not reachable in the production extension.

Impact: none · Exploitability: unlikely

Developer action: Update devDependencies to the latest compatible versions to resolve the advisory; no urgent user-safety action is needed.

Scanner
osv-scanner 2.4.0
Rule
GHSA-2v37-7h3g-55p8
File role
production
Source
package-lock.json

Dependency advisory GHSA-rgw5-rvv9-x895 applies

Minor caution · high confidence

The flagged tool is only used by developers during testing, not by the extension when it runs. The security issue affects a developer-only feature that is never active for end users of this extension.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-rgw5-rvv9-x895 to a dependency declared by this repository.

Contextual assessment: This advisory corresponds to an esbuild development-server vulnerability. The lockfile shows esbuild 0.21.5 as a transitive dependency of vitest, which is declared as a devDependency. The project ships a browser-side SillyTavern extension with no production dependencies; esbuild is never invoked at runtime in the shipped extension. The vulnerable code path requires the esbuild development server to be running and reachable, which does not occur during normal use of this extension. There is no runtime reachability from the shipped artifact.

Impact: low · Exploitability: unlikely

Developer action: Update vitest and its transitive esbuild dependency to current versions at your next development cycle to keep the dev toolchain current.

Scanner
osv-scanner 2.4.0
Rule
GHSA-rgw5-rvv9-x895
File role
production
Source
package-lock.json

Dependency advisory GHSA-fx2h-pf6j-xcff applies

Minor caution · high confidence

This is the same type of issue as the other flagged item: a developer-only testing tool has a security flaw, but that tool is never used when the extension is actually running for users.

Technical evidence

Scanner reason: OSV-Scanner matched advisory GHSA-fx2h-pf6j-xcff to a dependency declared by this repository.

Contextual assessment: This advisory corresponds to a second esbuild development-server vulnerability. The same analysis applies: esbuild 0.21.5 is a transitive devDependency via vitest, the project declares no production dependencies, and the shipped extension does not run the esbuild development server. The vulnerable code path is unreachable in the production artifact and during normal end-user operation.

Impact: low · Exploitability: unlikely

Developer action: Update vitest and its transitive esbuild dependency to current versions at your next development cycle to keep the dev toolchain current.

Scanner
osv-scanner 2.4.0
Rule
GHSA-fx2h-pf6j-xcff
File role
production
Source
package-lock.json
Expected scanner matches (2)

zizmor reported artipacked

Expected behavior · high confidence

The scanner flagged a possible credential-leakage pattern, but this workflow never creates artifacts or uses secrets, so there is nothing to leak.

Technical evidence

Scanner reason: zizmor matched workflow-security rule artipacked in this repository.

Contextual assessment: The artipacked rule flags potential credential persistence in artifacts. This workflow does not upload any artifacts and does not use secrets. The checkout action does not persist credentials beyond the job by default. No credential exposure path exists here.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
zizmor 1.28.0
Rule
artipacked
File role
tooling
Source
.github/workflows/ci.yml:35

zizmor reported artipacked

Expected behavior · high confidence

The scanner flagged a possible credential-leakage pattern, but this workflow never creates artifacts or uses secrets, so there is nothing to leak.

Technical evidence

Scanner reason: zizmor matched workflow-security rule artipacked in this repository.

Contextual assessment: The artipacked rule flags potential credential persistence in artifacts. This workflow does not upload any artifacts and does not use secrets. No credential exposure path exists.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
zizmor 1.28.0
Rule
artipacked
File role
tooling
Source
.github/workflows/ci.yml:18

Related contextual observations

actions/checkout also unpinned

low risk · high confidence

Another setup step in the same test workflow uses the same version-label approach instead of an exact lock.

Technical assessment

Line 18 references actions/checkout@v4 with the same major-version-tag pattern as the flagged setup-node reference. Same minor supply-chain hardening gap applies.

Impact: low · Exploitability: unlikely

Developer action: Pin to a commit SHA for consistency with the setup-node recommendation.

Sources:

All npm dependencies are dev-only; no runtime dependencies are shipped

low risk · high confidence

This extension has no runtime package dependencies. All the flagged packages are development tools used only for testing and code linting, and they are not included when users install the extension. The vulnerability alerts do not affect people who use the extension.

Technical assessment

The package.json declares only devDependencies (eslint, vitest, globals) and the manifest ships index.js and style.css as static assets. All OSV-scanner candidates are transitive dependencies of these dev tools. The lockfile confirms esbuild 0.21.5 as a vitest transitive dependency marked dev true. None of these packages are included in or executed by the production extension loaded by SillyTavern, so the advisories have no runtime reachability for end users.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

Tools

Limitations

Technical scan identity