Back to skill

Security audit

Hermes Continuation Maintainer

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent and task-focused, but it reads Hermes conversation logs/state and can print private message content without a clear redaction or opt-in safeguard.

Install only if you are comfortable with a local diagnostic script reading Hermes logs and the Hermes state database. Run it in a private terminal, avoid pasting full JSON/text output into shared tickets or CI logs, and review any proposed patches to Hermes runtime files before applying them.

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
scripts/scan_hermes_continuation.py:154
Finding

Unredacted Hermes Conversation Data Exposed Through Scanner Output

Content
View full analysis
list[dict[str, Any]]: path = Path(db_path) if not path.exists() or not sessions: return [] con = sqlite3.connect(path) try: out: list[dict[str, Any]] = [] for session in sorted(sessions): rows = con.execute( """ select id, session_id, length(content), finish_reason, content from messages where session_id=? and role='assistant' and finish_reason='stop' order by id desc limit ? """, (session, limit), ).fetchall() for mid, sid, size, finish_reason, content in rows: out.append( { "id": mid, "session": sid, "length": size, "finish_reason": finish_reason, "content": (content or "")[:700], } ) return out finally: con.close() ``` At lines 242-273, the scanner reads the complete log and associates raw user messages with output records: ```python for line in log.read_text(errors="ignore").splitlines(): match = TURN_RE.search(line) if match and is_recent(match.group("ts"), cutoff): ...[truncated 4641 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script reads Hermes logs and the state database, extracts assistant message content, and prints snippets to stdout or JSON output. Because those logs and database records can contain sensitive conversation content, credentials, file paths, or other private data, running the tool can disclose information to whoever receives the output, especially in shared terminals, CI logs, support bundles, or copied reports.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The script embeds Chinese trigger and classification markers alongside English ones, effectively enforcing special-case handling for specific languages/locales while providing no user choice or explanation of supported locale scope. This is a natural-language policy concern because locale behavior is fixed in the implementation rather than being user-selectable or clearly justified as region-specific.

Content

No source excerpt is available for this finding.