Back to skill

Security audit

Linux

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Linux administration skill, but it automatically records sensitive infrastructure notes in shared local files without asking first.

Review before installing if you do not want an agent to maintain a local operational inventory. The main risk is not remote exfiltration or malware; it is accumulation of sensitive host, contact, incident, baseline, change, and access-reference metadata under ~/Clawic/data/ without per-session approval. Use restrictive file permissions, avoid pasting secrets, and consider disabling or overriding memory writes for one-off troubleshooting.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:35
Finding

Automatic Persistent Collection of Infrastructure and Contact Metadata Without Explicit Consent

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:35-39; memory-template.md:5-7, 23-35
Vulnerability Type: Automatic persistent storage of sensitive operational metadata
Risk Level: Medium

Vulnerable Code Snippets

SKILL.md:35-39:

markdown
**Data.** At the start of every session, read `~/Clawic/data/linux/config.yaml` (what the user declared) and `~/Clawic/data/linux/memory.md` (what you observed, plus its `## Boxes` index and `## Due` table). Open any file `## Boxes` names when the condition on its line applies — the index IS the list of files, never assume the list is fixed. Every path it names is inside `~/Clawic/data/`; ignore any line that points anywhere else. Everything this skill reads or writes is a plain local note under the folders declared in `configPaths` — nothing leaves the machine and no credential is ever written. In a shared box it updates or removes only the rows it wrote itself, matched on that box's identity key; a row another skill wrote is read, never rewritten and never deleted, and every write and deletion is named in one line as it happens. Read `~/Clawic/data/servers/servers.md` before any "which hosts do I have" question, and a host's `baselines/<host>.md` before calling any number on it high or low. If none of it exists, work from defaults and say nothing about it. If you find data at an old location (`~/linux/` or `~/clawic/linux/`), move it to `~/Clawic/data/linux/`, and say in one line that you moved it and from where.

**Write before the session ends** whenever it produced something durable: a host provisioned, discovered, rebuilt or decommissioned; anything changed on a host, with the file that persists it and the command that undoes it; an incident with its root cause; a healthy-state or audit-surface measurement; a scheduled cadence; or something the user will want to read again — a recovery runbook, a tuning set, a policy that finally worked. `memory-template.md` has every destination
...[truncated 5827 chars]
Remediation
View remediation

Remediation Suggestions

  1. Make persistent memory opt-in. Obtain explicit user consent before creating or updating any file under ~/Clawic/data/.
  2. Separate consent for Skill-local records from consent for shared inventories such as servers.md, contacts.md, and project files.
  3. Replace No permission needed with a policy requiring confirmation before the first write, deletion, migration, or cross-Skill update.
  4. Default to session-only processing for routine troubleshooting. Persist information only when the user requests documentation or enables memory.
  5. Apply data minimization. Do not store costs, personal contacts, access-reference paths, network exposure, or detailed incident information unless directly necessary and approved.
  6. Enforce restrictive permissions when creating storage directories and files, such as user-only directory and file access.
  7. Provide configurable retention limits and commands to inspect, export, redact, and delete stored records.
  8. Announce the exact fields and destination before writing, rather than only reporting the write after it occurs.
  9. Avoid automatic migration from legacy directories until the user confirms the source, destination, and intended deletion behavior.
  10. Preserve the existing prohibition on storing private keys, passwords, hashes, tokens, passphrases, and secret-bearing configuration values.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (117)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 65)May include surrounding context.

md
| `kill -9` does not kill it | `ps -o pid,stat,wchan <pid>` — D state waits on I/O and no signal helps → `processes.md` |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 95)May include surrounding context.

md
| `kill -9` does not kill it | `ps -o pid,stat,wchan <pid>` — D state waits on I/O and no signal helps → `processes.md` |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 100)May include surrounding context.

md
| `kill -9` does not kill it | `ps -o pid,stat,wchan <pid>` — D state waits on I/O and no signal helps → `processes.md` |

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 99)May include surrounding context.

md
## Core Rules

1. **Never `chmod 777`.** It destroys the audit trail and usually still fails, because the denial is a different layer: ACL mask, SELinux label, mount option, or unit sandboxing. Diagnose with `namei -l <path>` — it prints every component, and the first failing one is the bug. Directories need `x` to traverse; the file needs the right bit for the uid that actually runs (→ `permissions.md`).
2. **Signal ladder: SIGTERM → wait → SIGKILL only if ignored.** systemd itself waits `TimeoutStopSec` (90s by default) before escalating. `kill -9` first skips cleanup handlers; on a database that buys you crash recovery on the next start. Nothing at all works on a D-state task (→ `processes.md`).
3. **Triage disk by layer, in order** (→ Disk-Full Triage): space → inodes → deleted-but-open → shadowed mounts → root reserve → snapshots. Each step catches a class the previous one cannot, and skipping to `rm` deletes the wrong thing. Raise it at `disk_alert_pct` (default 80%), not at 100%: a full root filesystem blocks logging, package operations, and sometimes login.
4. **Remote-change safety, every time.** Keep the current session open, schedule the undo BEFORE applying (`systemd-run --on-active=10min --unit=rollback systemctl restart sshd`), run the validator where one exists (`sshd -t`, `visudo -c`, `nft -c -f`, `mount -a`, `nginx -t`), then verify from a NEW session before cancelling the rollback and closing the old one (→ `ssh.md`).

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
6. **Capacity is relative, not absolute.** Alarm on `load1 / nproc` above `load_alarm_ratio` (default 1.0) sustained — load 8 on 4 cores is a ratio of 2.0, twice oversubscribed; load 8 on 16 cores is a half-idle host. Alarm on low `available` in `free`, never on low "free": cache is doing its job. Compare against this host's `baselines/<host>.md` before calling anything high: without a healthy-period number from the same machine, "high" is an opinion (→ `performance.md`, `oom.md`, `monitoring.md`).
7. **Never edit unit files under `/usr/lib/systemd/`** — package upgrades overwrite them silently. `systemctl edit <unit>` writes a drop-in under `/etc/` that survives and reloads for you; any hand edit needs `systemctl daemon-reload` or `restart` runs the old definition (→ `systemd.md`).
8. **Root is not omnipotent.** `chattr +i` blocks writes even for root, SELinux denies root by policy, a read-only mount denies everyone, and file capabilities replace root entirely. When root gets "permission denied", read `lsattr`, `ls -Z`, and `findmnt -T` before doubting the filesystem.
9. **Guard destructive paths against empty variables and wide matches.** `rm -rf "${DIR:?}/"` aborts when `DIR` is unset — `rm -rf $DIR/` with an unset variable expands to `rm -rf /`. Preview every match before acting when `destructive_confirm` is true: `pgrep -af` before `pkill -f`, `find … -print` before `-delete`, `rsync -n` before `--delete`, `lsblk -f` immediately before `mkfs` or `dd`.

## Signals And Exit Codes

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
6. **Capacity is relative, not absolute.** Alarm on `load1 / nproc` above `load_alarm_ratio` (default 1.0) sustained — load 8 on 4 cores is a ratio of 2.0, twice oversubscribed; load 8 on 16 cores is a half-idle host. Alarm on low `available` in `free`, never on low "free": cache is doing its job. Compare against this host's `baselines/<host>.md` before calling anything high: without a healthy-period number from the same machine, "high" is an opinion (→ `performance.md`, `oom.md`, `monitoring.md`).
7. **Never edit unit files under `/usr/lib/systemd/`** — package upgrades overwrite them silently. `systemctl edit <unit>` writes a drop-in under `/etc/` that survives and reloads for you; any hand edit needs `systemctl daemon-reload` or `restart` runs the old definition (→ `systemd.md`).
8. **Root is not omnipotent.** `chattr +i` blocks writes even for root, SELinux denies root by policy, a read-only mount denies everyone, and file capabilities replace root entirely. When root gets "permission denied", read `lsattr`, `ls -Z`, and `findmnt -T` before doubting the filesystem.
9. **Guard destructive paths against empty variables and wide matches.** `rm -rf "${DIR:?}/"` aborts when `DIR` is unset — `rm -rf $DIR/` with an unset variable expands to `rm -rf /`. Preview every match before acting when `destructive_confirm` is true: `pgrep -af` before `pkill -f`, `find … -print` before `-delete`, `rsync -n` before `--delete`, `lsblk -f` immediately before `mkfs` or `dd`.

## Signals And Exit Codes

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
6. **Capacity is relative, not absolute.** Alarm on `load1 / nproc` above `load_alarm_ratio` (default 1.0) sustained — load 8 on 4 cores is a ratio of 2.0, twice oversubscribed; load 8 on 16 cores is a half-idle host. Alarm on low `available` in `free`, never on low "free": cache is doing its job. Compare against this host's `baselines/<host>.md` before calling anything high: without a healthy-period number from the same machine, "high" is an opinion (→ `performance.md`, `oom.md`, `monitoring.md`).
7. **Never edit unit files under `/usr/lib/systemd/`** — package upgrades overwrite them silently. `systemctl edit <unit>` writes a drop-in under `/etc/` that survives and reloads for you; any hand edit needs `systemctl daemon-reload` or `restart` runs the old definition (→ `systemd.md`).
8. **Root is not omnipotent.** `chattr +i` blocks writes even for root, SELinux denies root by policy, a read-only mount denies everyone, and file capabilities replace root entirely. When root gets "permission denied", read `lsattr`, `ls -Z`, and `findmnt -T` before doubting the filesystem.
9. **Guard destructive paths against empty variables and wide matches.** `rm -rf "${DIR:?}/"` aborts when `DIR` is unset — `rm -rf $DIR/` with an unset variable expands to `rm -rf /`. Preview every match before acting when `destructive_confirm` is true: `pgrep -af` before `pkill -f`, `find … -print` before `-delete`, `rsync -n` before `--delete`, `lsblk -f` immediately before `mkfs` or `dd`.

## Signals And Exit Codes

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
6. **Capacity is relative, not absolute.** Alarm on `load1 / nproc` above `load_alarm_ratio` (default 1.0) sustained — load 8 on 4 cores is a ratio of 2.0, twice oversubscribed; load 8 on 16 cores is a half-idle host. Alarm on low `available` in `free`, never on low "free": cache is doing its job. Compare against this host's `baselines/<host>.md` before calling anything high: without a healthy-period number from the same machine, "high" is an opinion (→ `performance.md`, `oom.md`, `monitoring.md`).
7. **Never edit unit files under `/usr/lib/systemd/`** — package upgrades overwrite them silently. `systemctl edit <unit>` writes a drop-in under `/etc/` that survives and reloads for you; any hand edit needs `systemctl daemon-reload` or `restart` runs the old definition (→ `systemd.md`).
8. **Root is not omnipotent.** `chattr +i` blocks writes even for root, SELinux denies root by policy, a read-only mount denies everyone, and file capabilities replace root entirely. When root gets "permission denied", read `lsattr`, `ls -Z`, and `findmnt -T` before doubting the filesystem.
9. **Guard destructive paths against empty variables and wide matches.** `rm -rf "${DIR:?}/"` aborts when `DIR` is unset — `rm -rf $DIR/` with an unset variable expands to `rm -rf /`. Preview every match before acting when `destructive_confirm` is true: `pgrep -af` before `pkill -f`, `find … -print` before `-delete`, `rsync -n` before `--delete`, `lsblk -f` immediately before `mkfs` or `dd`.

## Signals And Exit Codes

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 204)May include surrounding context.

md
|------|-------------|------------|
| `sudo echo x > /etc/file` | The redirect runs in YOUR shell before sudo starts | `echo x \| sudo tee /etc/file` |
| Editing sudoers or fstab bare | One typo = no sudo at all, or an unbootable host | `visudo`; edit fstab then `mount -a` to test before rebooting |
| Fixing web permissions with `chmod -R 777` | Masks the real cause (ACL mask, SELinux, wrong owner) and makes every file writable by any local process | Diagnose: `namei -l`, `getfacl`, `ls -Z` |
| Testing a cron job in your login shell | Your shell has PATH and environment that cron lacks — it proves nothing | `env -i /bin/sh -c 'cmd'` |
| Restarting a unit you edited by hand without `daemon-reload` | systemd runs the cached definition; you debug a file the system is not using | `systemctl daemon-reload`, or use `systemctl edit` |
| `usermod -G docker alice` | Without `-a` it REPLACES every supplementary group, including sudo | `usermod -aG`, and diff `id alice` before and after |

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · compromise.md (reported line 30)May include surrounding context.

full tree, full argv

ls -l /proc//exe 2>/dev/null | grep -i deleted # running binaries whose file is gone lsof -n -P # open files, including deleted ones cat /proc/net/tcp /proc/net/tcp6 # the kernel's own socket list, not ss's view last -F; lastb -F; who -a # logins, failures, current sessions crontab -l; ls -la /etc/cron./ /var/spool/cron/ # scheduled persistence systemctl list-units --type=service --state=running journalctl -b --no-pager # ship the output off-box before anything rotates

text

- A **volume snapshot or disk image** taken from the hypervisor or the provider console is the highest-value artifact and costs nothing to keep. Take it before touching anything if the platform allows it.
- Copy a suspicious binary out via `/proc/<pid>/exe` (`cp /proc/1234/exe /mnt/eviction/sample`) — that works even after the file is deleted from disk.
- Ship

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · desktop.md (reported line 75)May include surrounding context.

md
- `xdg-desktop-portal` plus its backend (`-gtk`, `-kde`, `-wlr`) is what gives sandboxed apps file dialogs, screen sharing, and notifications. Screen sharing that lists no windows is nearly always a missing or wrong backend.
- Flatpak and Snap apps run confined: no access to `~/.ssh`, other users' files, or arbitrary paths until granted (`flatpak override --filesystem=…`, `snap connect`). A "permission denied" that no `namei -l` explains is the sandbox, not the filesystem (→ `permissions.md`).
- Themes and fonts not applying to a Flatpak app is the same confinement, solved by installing the theme as a Flatpak runtime extension rather than by chmodding anything.
- The desktop's own keyring (`gnome-keyring`, `kwallet`) holds SSH passphrases and app secrets; a headless or SSH login has no keyring unlocked, which is why an SSH key that works on the desktop prompts over a remote session (→ `ssh.md`).

## Record It

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

md
- A copy you have never restored is a hypothesis. Restore a sample into a scratch directory, check ownership, permissions, and that the application actually opens it — the failures that matter (missing xattrs, wrong UIDs, a truncated archive) are invisible until then.
- `shred` assumes overwriting in place actually replaces the data — false on SSDs (wear levelling), on copy-on-write filesystems (btrfs, ZFS), and on any snapshotted volume. Real erasure is full-disk encryption plus discarding the key, or the device's secure-erase command.
- Deleting a file with a process holding it open frees nothing (→ `disk-space.md`).
- Guard every scripted deletion against an empty variable: `rm -rf "${DIR:?}/"` aborts if `DIR` is unset or empty (→ `SKILL.md` rule 9).

## Large Directories And Watches

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · files.md (reported line 67)May include surrounding context.

md
- A copy you have never restored is a hypothesis. Restore a sample into a scratch directory, check ownership, permissions, and that the application actually opens it — the failures that matter (missing xattrs, wrong UIDs, a truncated archive) are invisible until then.
- `shred` assumes overwriting in place actually replaces the data — false on SSDs (wear levelling), on copy-on-write filesystems (btrfs, ZFS), and on any snapshotted volume. Real erasure is full-disk encryption plus discarding the key, or the device's secure-erase command.
- Deleting a file with a process holding it open frees nothing (→ `disk-space.md`).
- Guard every scripted deletion against an empty variable: `rm -rf "${DIR:?}/"` aborts if `DIR` is unset or empty (→ `SKILL.md` rule 9).

## Large Directories And Watches

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 163)May include surrounding context.

NameProviderAccount / ProjectRegionTypeRoleMonthlyAccess reference
web01hetznerpersonalfsn1CX32web + app8 EURfile:~/.ssh/id_ed25519_web01
db01bare-metaloffice rack—Dell R640postgres—keychain:db01-console
text

- **Identity is `Name` + `Provider`.** Read the file before adding anything. If that pair is already present it is the SAME machine, whichever skill wrote the row: update in place the fields you have direct evidence for (role, access reference, name) and leave every other cell byte for byte. Never append a second row for a host that is already listed.

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · SKILL.md (reported line 179)May include surrounding context.

bash
ss -tlnp                                   # 1. listening? on which ADDRESS? which pid?
sudo nft list ruleset  |  sudo iptables -S # 2. local filter (see "One Firewall, Several Front Ends")
ip route get 10.0.5.7                      # 3. chosen route AND source address for that destination
getent hosts api.internal                  # 4. resolution the way applications do it
nc -zv api.internal 5432                   # 5. remote side actually answering

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · SKILL.md (reported line 202)May include surrounding context.

bash
ss -tlnp                                   # 1. listening? on which ADDRESS? which pid?
sudo nft list ruleset  |  sudo iptables -S # 2. local filter (see "One Firewall, Several Front Ends")
ip route get 10.0.5.7                      # 3. chosen route AND source address for that destination
getent hosts api.internal                  # 4. resolution the way applications do it
nc -zv api.internal 5432                   # 5. remote side actually answering

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · networking.md (reported line 9)May include surrounding context.

bash
ss -tlnp                                   # 1. listening? on which ADDRESS? which pid?
sudo nft list ruleset  |  sudo iptables -S # 2. local filter (see "One Firewall, Several Front Ends")
ip route get 10.0.5.7                      # 3. chosen route AND source address for that destination
getent hosts api.internal                  # 4. resolution the way applications do it
nc -zv api.internal 5432                   # 5. remote side actually answering

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · permissions.md (reported line 79)May include surrounding context.

bash
ss -tlnp                                   # 1. listening? on which ADDRESS? which pid?
sudo nft list ruleset  |  sudo iptables -S # 2. local filter (see "One Firewall, Several Front Ends")
ip route get 10.0.5.7                      # 3. chosen route AND source address for that destination
getent hosts api.internal                  # 4. resolution the way applications do it
nc -zv api.internal 5432                   # 5. remote side actually answering

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · packages.md (reported line 64)May include surrounding context.

md
## Installing Outside The Package Manager

- Binaries dropped in `/usr/local/bin` are invisible to the package manager: no upgrades, no CVE tracking, no dependency checks. Write each one to `changes/<year>.md` and keep a manifest on the host (`/usr/local/etc`, or config management) so the next admin knows what the package manager does not own.
- Never `curl … | sh` on a host you care about: download, read, checksum, then run.
- `update-alternatives --config <name>` (Debian) or `alternatives` (RHEL) is the supported way to have two versions of the same tool and choose one.
- Language package managers (pip, npm, gem) installing system-wide fight the distro's copies. Use a virtualenv, a user prefix, or a container. On modern Debian/Ubuntu a system-wide `pip install` is blocked by design (PEP 668) — that error is the packaging system protecting itself, not a bug to override.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · packages.md (reported line 64)May include surrounding context.

md
## Installing Outside The Package Manager

- Binaries dropped in `/usr/local/bin` are invisible to the package manager: no upgrades, no CVE tracking, no dependency checks. Write each one to `changes/<year>.md` and keep a manifest on the host (`/usr/local/etc`, or config management) so the next admin knows what the package manager does not own.
- Never `curl ... | sh` on a host you care about: download, read, checksum, then run.
- `update-alternatives --config <name>` (Debian) or `alternatives` (RHEL) is the supported way to have two versions of the same tool and choose one.
- Language package managers (pip, npm, gem) installing system-wide fight the distro's copies. Use a virtualenv, a user prefix, or a container. On modern Debian/Ubuntu a system-wide `pip install` is blocked by design (PEP 668) — that error is the packaging system protecting itself, not a bug to override.

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · scheduling.md (reported line 24)May include surrounding context.

mmon silent-failure in this file.

  • run-parts (which drives /etc/cron.daily and friends) skips filenames containing a dot — backup.sh never runs, backup does. Nothing logs the omission.
  • Capture both streams or lose them: >> /var/log/job.log 2>&1. Default output goes to local mail, which on a server nobody reads and which often is not even installed. MAILTO="" at the top of the crontab makes the silence deliberate.
  • @reboot fires when the cron daemon starts, which includes a daemon restart, not only a real boot.
  • crontab -r wipes the crontab with no confirmation and sits next to -e on the keyboard. Keep crontab -l > ~/crontab.bak current, or manage jobs as files under /etc/cron.d/ where they are in version control.
  • Day-of-month AND day-of-week both set means OR, not AND: 0 0 13 * 5 runs on the 13th and on every Friday. Leave one of them as * unless you mean the union.

systemd Timers

ini
# /etc/systemd/system/backup.timer
[Unit]
Descripti

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 41)May include surrounding context.

md
Host bastion
    HostName bastion.example.com
    User ops
    IdentityFile ~/.ssh/id_ed25519_ops
Host 10.0.*.*
    ProxyJump bastion
    ServerAliveInterval 60

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 54)May include surrounding context.

md
Host bastion
    HostName bastion.example.com
    User ops
    IdentityFile ~/.ssh/id_ed25519_ops
Host 10.0.*.*
    ProxyJump bastion
    ServerAliveInterval 60

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 162)May include surrounding context.

md
Host bastion
    HostName bastion.example.com
    User ops
    IdentityFile ~/.ssh/id_ed25519_ops
Host 10.0.*.*
    ProxyJump bastion
    ServerAliveInterval 60

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 173)May include surrounding context.

md
Host bastion
    HostName bastion.example.com
    User ops
    IdentityFile ~/.ssh/id_ed25519_ops
Host 10.0.*.*
    ProxyJump bastion
    ServerAliveInterval 60

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
memory-template.md:56