TavernKeeper Scan Report

maxime-fleury/ST-cardEditor

Commit 2c3986b 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.

Contextual expected matches (5)

JavaScript analysis reported javascript.xray.serialize-environment

Expected behavior · high confidence

The flagged line simply reads the PORT setting from the environment so the server can listen on a configurable port, defaulting to 8182. This is a normal and expected part of any web server and does not expose or steal any sensitive information.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.serialize-environment. The match applies to this repository.

Contextual assessment: The flagged line reads process.env.PORT with a fallback to 8182 and parses it as an integer for the Bun.serve port. This is a standard and benign server configuration pattern. No other environment variables are read, serialized, or transmitted. The server code also includes directory-traversal guards for static file serving and a fixed OpenRouter proxy target. No credential exfiltration or environment serialization is present.

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.xray.serialize-environment
File role
production
Source
server.js:6

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The flagged text is part of standard code for reading streaming responses from AI providers. It is not a suspicious link or data-theft mechanism. The tool sends requests only to legitimate AI service endpoints that the user selects, which is exactly what it is designed to do.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.

Contextual assessment: The scanner flagged line 409 which contains the string 'data: ' used as an SSE protocol field prefix in a streaming response parser. This is not a data: URI or a suspicious external link; it is standard Server-Sent Events parsing logic for an OpenAI-compatible chat completions endpoint. The network destinations in this file are the well-known provider API base URLs enumerated in the PROVIDERS registry plus a user-configurable custom endpoint. API keys are retrieved from local storage and sent as Bearer tokens only to the selected provider endpoint, which matches the project's stated purpose of AI-assisted card editing across multiple model providers.

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.xray.shady-link
File role
production
Source
js/aiService.js:409

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The flagged links are just example addresses for local AI tools shown in the settings menu, repeated once for each of the 10 supported languages. They are plain text in a translation file, not actual network connections or code that runs anything.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. 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.xray.shady-link
File role
production
Source
js/i18n.js:158

OpenGrep reported tavernkeeper.download-and-execute.shell-pipeline

Expected behavior · high confidence

The flagged text is just the standard one-line command to install the Bun runtime, copied from Bun's own documentation into the project's setup guide. It only runs if a developer manually copies and pastes it during setup, and it comes from the official Bun installer URL.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.download-and-execute.shell-pipeline. The match applies to this repository.

Contextual assessment: The scanner matched the standard Bun runtime installation instruction in README documentation. This is a well-known install pattern from the official Bun project, appears in a markdown code block under installation instructions, and is not executable code shipped by the project. No downloaded content is executed by the application itself.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.download-and-execute.shell-pipeline
File role
documentation
Source
README.md:184-185

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This is a normal text-formatting rule that converts markdown code blocks into styled HTML for display. It runs after the text is already escaped for safety, and the pattern itself does not have any performance or security problems.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The flagged regex on line 492 is a markdown-to-HTML formatting pattern that matches triple-backtick code fences. It uses a lazy quantifier over a character class, which does not exhibit catastrophic backtracking. The regex is applied after Ui.escapeHtml escapes the AI response text, so the replaced content is already sanitized before HTML tags are inserted. This is a standard text-rendering utility for displaying AI chat output in a card editor extension and matches the project's stated purpose.

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.xray.unsafe-regex
File role
production
Source
js/aiChat.js:492

Related contextual observations

AI response content is escaped before HTML injection

low risk · high confidence

AI-generated text is cleaned of dangerous characters before being turned into formatted HTML, which is the correct approach for displaying model output safely.

Technical assessment

Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

API key handling is proportional to stated purpose

low risk · high confidence

The tool stores your API key locally and sends it only to the AI service you choose. There is no sign of keys being sent anywhere unexpected.

Technical assessment

API keys are stored via CardStorage and sent only as Authorization Bearer headers to the user-selected provider endpoint. There is no evidence of keys being logged, sent to third-party endpoints, or exfiltrated. The custom provider mode allows a user-supplied endpoint, which is an expected feature for OpenAI-compatible local models.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity