Warden Scheduled Scan Results
Run: 2026-08-24T06:29:09.646Z
Commit: e6ef59b
Summary
| Severity |
Count |
| High |
1 |
| Medium |
4 |
| Low |
3 |
Findings
BR3-5ST Unsanitized CLI arguments enable Ruby code injection into generated Homebrew formula (L81-L90) · high
CLI arguments for version, SHA, and URL are interpolated into a Ruby formula template without sanitization, enabling arbitrary code injection into the generated Homebrew formula.
AVG-YAA finally block may suppress original invocation error (L75) · medium
If service.disconnect() throws, the original error from invokeTool is lost because a finally block exception overrides the preceding try exception.
Z4X-7AS Unhandled spawn error in startDaemonBackground can crash process (L127-L137) · medium
spawn() with stdio: 'ignore' and no 'error' listener will crash the Node.js process if spawn fails (e.g., EMFILE, ENOMEM, or the Node.js binary is no longer accessible). The returned ChildProcess emits an 'error' event asynchronously on spawn failure; without a listener, Node.js throws it as an uncaught exception.
M9Q-JQV ensureDaemonRunning returns early without ensuring daemon readiness (L186-L197) · medium
When client.status() throws any error other than DaemonVersionMismatchError, ensureDaemonRunning returns silently instead of retrying or restarting the daemon, breaking its readiness guarantee.
7B9-VVX startDaemonForeground masks signal exits as successful (L239-L240) · medium
The 'exit' handler uses code ?? 0, which treats signal terminations (where code is null) as exit code 0, making crashes or kills indistinguishable from clean exits.
B3E-HLC Build script uses predictable temporary directory instead of mktemp (L12-L118) · low
bundle-axe.sh creates its temporary directory with a hard-coded /tmp/axe-download-$$ path instead of using mktemp -d. Because $$ expands to the shell PID, the path is predictable. If the directory already exists (for example from a prior interrupted run), mkdir -p succeeds silently. curl -o then writes into that directory and will follow any symlink planted for axe-release.tar.gz, redirecting the downloaded content to an arbitrary file path. There is also no EXIT trap to clean up on failure, so interrupted runs leave the predictable directory behind.
K4Y-ARB install_node_runtime_for_arch leaks temp directory on error exits (L195) · low
The RETURN trap registered for temp directory cleanup does not execute on explicit exit inside a function, leaving behind the download directory when validation fails.
965-3L8 usageBar incorrectly renders non-zero usage for zero-byte entries (L78-L79) · low
The Math.max(1, ...) clamp forces zero-byte items to render one filled bar character, making the usage chart visually misleading.
Generated by Warden
Warden Scheduled Scan Results
Run: 2026-08-24T06:29:09.646Z
Commit:
e6ef59bSummary
Findings
scripts/create-homebrew-formula.shBR3-5STUnsanitized CLI arguments enable Ruby code injection into generated Homebrew formula (L81-L90) · highCLI arguments for version, SHA, and URL are interpolated into a Ruby formula template without sanitization, enabling arbitrary code injection into the generated Homebrew formula.
src/cli/cli-tool-catalog.tsAVG-YAAfinally block may suppress original invocation error (L75) · mediumIf
service.disconnect()throws, the original error frominvokeToolis lost because afinallyblock exception overrides the precedingtryexception.src/cli/daemon-control.tsZ4X-7ASUnhandled spawn error in startDaemonBackground can crash process (L127-L137) · mediumspawn()withstdio: 'ignore'and no'error'listener will crash the Node.js process if spawn fails (e.g., EMFILE, ENOMEM, or the Node.js binary is no longer accessible). The returnedChildProcessemits an'error'event asynchronously on spawn failure; without a listener, Node.js throws it as an uncaught exception.M9Q-JQVensureDaemonRunning returns early without ensuring daemon readiness (L186-L197) · mediumWhen
client.status()throws any error other thanDaemonVersionMismatchError,ensureDaemonRunningreturns silently instead of retrying or restarting the daemon, breaking its readiness guarantee.7B9-VVXstartDaemonForeground masks signal exits as successful (L239-L240) · mediumThe
'exit'handler usescode ?? 0, which treats signal terminations (wherecodeisnull) as exit code 0, making crashes or kills indistinguishable from clean exits.scripts/bundle-axe.shB3E-HLCBuild script uses predictable temporary directory instead of mktemp (L12-L118) · lowbundle-axe.sh creates its temporary directory with a hard-coded /tmp/axe-download-$$ path instead of using mktemp -d. Because $$ expands to the shell PID, the path is predictable. If the directory already exists (for example from a prior interrupted run), mkdir -p succeeds silently. curl -o then writes into that directory and will follow any symlink planted for axe-release.tar.gz, redirecting the downloaded content to an arbitrary file path. There is also no EXIT trap to clean up on failure, so interrupted runs leave the predictable directory behind.
scripts/package-macos-portable.shK4Y-ARBinstall_node_runtime_for_arch leaks temp directory on error exits (L195) · lowThe RETURN trap registered for temp directory cleanup does not execute on explicit
exitinside a function, leaving behind the download directory when validation fails.src/cli/commands/purge-ui.ts965-3L8usageBar incorrectly renders non-zero usage for zero-byte entries (L78-L79) · lowThe
Math.max(1, ...)clamp forces zero-byte items to render one filled bar character, making the usage chart visually misleading.Generated by Warden