registry  /  @bumaruf/ttm-cli  /  0.4.0

@bumaruf/ttm-cli@0.4.0

Terminal theme manager — pick a theme by seeing it live in the window you're sitting in

AI Security Review

scanned 2h ago · by lpm-firewall-ai

A package-owned remote catalogue supplies theme names that are not character-restricted. Those names reach terminal output and an unescaped Windows Terminal JSONC replacement after a user applies a remote theme.

Static reason
No blocking static signals were detected.
Trigger
Run `ttm` with a remote catalogue entry; Windows configuration injection requires explicitly applying that entry.
Impact
A compromised catalogue could emit terminal control sequences or alter Windows Terminal profile defaults.
Mechanism
Remote theme-name terminal-output and JSONC injection.
Rationale
No source indicates malicious install-time behavior, credential theft, remote payload execution, stealth persistence, or AI-agent control-surface mutation. The unescaped remotely sourced name nevertheless creates a concrete user-triggered configuration and terminal-output injection risk.
Evidence
package.jsonsrc/catalogue/remote.tssrc/catalogue/index-format.tssrc/backends/windows-terminal.tssrc/cli.tssrc/tui/render.ts$XDG_CACHE_HOME/ttm/index.json$XDG_CACHE_HOME/ttm/meta.json$LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json$LOCALAPPDATA\Microsoft\Windows Terminal\settings.json$LOCALAPPDATA\Microsoft\Windows Terminal\Fragments\ttm\ttm.json
Network endpoints2
bumaruf.github.io/ttm-cli/index.jsonregistry.npmjs.org/@bumaruf/ttm-cli/latest

Decision evidence

public snapshot
AI called this Suspicious at 88.0% confidence as Critical Vulnerability with low false-positive risk.
Evidence for warning
  • `src/catalogue/index-format.ts` accepts any nonempty remote theme name.
  • `src/backends/windows-terminal.ts` interpolates `theme.name` into JSONC without escaping.
  • `src/cli.ts` and `src/tui/render.ts` render remote theme names directly to the terminal.
  • `src/catalogue/remote.ts` fetches the unpinned remote catalogue before normal CLI use.
Evidence against
  • `package.json` declares no preinstall/install/postinstall hook; `prepare` runs `lefthook install`.
  • Network use is limited to the package catalogue and npm latest-version endpoint.
  • No credential harvesting, dynamic code loading, eval, shell-string execution, or foreign AI-agent configuration writes were found.
  • Subprocess use is fixed command-array terminal integration (`dconf`, `gsettings`, `kitty`) or the package's notifier child.
Behavioral surface
Source
ChildProcessEnvironmentVarsFilesystem
Supply chain
UrlStrings
Manifest
WildcardDependency
scanned 25 file(s), 79.8 KB of source, external domains: bumaruf.github.io, draculatheme.com, ethanschoonover.com, github.com, monokai.pro, registry.npmjs.org, rosepinetheme.com, www.nordtheme.com

Source & flagged code

4 flagged · loading source
src/catalogue/index-format.tsView file
Published source reference
Medium
Ai Review Evidence

`src/catalogue/index-format.ts` accepts any nonempty remote theme name.

src/catalogue/index-format.tsView on unpkg
src/backends/windows-terminal.tsView file
Published source reference
Medium
Ai Review Evidence

`src/backends/windows-terminal.ts` interpolates `theme.name` into JSONC without escaping.

src/backends/windows-terminal.tsView on unpkg
src/cli.tsView file
Published source reference
Medium
Ai Review Evidence

`src/cli.ts` and `src/tui/render.ts` render remote theme names directly to the terminal.

src/cli.tsView on unpkg
src/catalogue/remote.tsView file
Published source reference
Medium
Ai Review Evidence

`src/catalogue/remote.ts` fetches the unpinned remote catalogue before normal CLI use.

src/catalogue/remote.tsView on unpkg

Findings

6 Medium4 Low
MediumEnvironment Vars
MediumWildcard Dependency
MediumAi Review Evidencesrc/catalogue/index-format.ts
MediumAi Review Evidencesrc/backends/windows-terminal.ts
MediumAi Review Evidencesrc/cli.ts
MediumAi Review Evidencesrc/catalogue/remote.ts
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowUrl Strings