Back to skill

Security audit

Ai Company Cro 2.0.0

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent CRO/risk-governance package, but it grants and describes high-impact operational actions like automatic circuit breaking, rollback, isolation, cross-agent escalation, and long-term audit logging without enough scoping or user confirmation.

Install only in an environment where cross-agent escalation and circuit-breaker recommendations are expected. Require explicit approval before any halt, rollback, isolation, permission restriction, agent provisioning, or persistent audit write, and clarify where logs are stored and who can read them.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
AGENTS.md:7
Finding

Unconditional Loading of Persistent User and Session Context

Content
View full analysis

Vulnerability Details

File Location: AGENTS.md:7-11
Vulnerability Type: Excessive access to persistent context
Risk Level: Medium

Vulnerable Code

markdown
Before doing anything else:

1. Read `SOUL.md` — this is who you are
2. Read `USER.md` — this is who you're helping
3. Read `memory/YYYY-MM-DD.md` (today + yesterday) for recent context

Technical Analysis

The startup procedure requires the agent to read identity data, user-profile data, and two persistent memory files before determining whether that information is necessary for the current task.

Although the Skill declares file-read permission, this blanket startup access violates data-minimization and least-privilege principles. Persistent memory should be treated as untrusted input because another agent, user, or process with workspace write access could place misleading instructions or sensitive information in those files.

Automatically incorporating such content into every session creates two related risks:

  1. Irrelevant personal or historical information may influence or appear in later outputs.
  2. Instructions stored in memory may alter subsequent behavior if the agent fails to distinguish data from trusted operational directives.

No direct secret-exfiltration mechanism was found in the audited package. Exploitation therefore depends on another actor or component having write access to the referenced files.

Attack Path

  1. An attacker, compromised agent, or untrusted workflow obtains write access to a daily file under memory/.
  2. The actor inserts misleading context, sensitive content, or instruction-like text into the file for the current or previous day.
  3. On its next invocation, the agent reads that file automatically before evaluating the actual task.
  4. The loaded content influences risk scoring, recommendations, board reports, or cross-agent messages.
  5. Information from the poisoned file may consequently ...[truncated 509 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the unconditional requirement to read user and memory files before every task.
  2. Load persistent context only when the current request demonstrably requires historical information.
  3. Ask for user consent before reading profile or historical-session data that is not essential to the request.
  4. Treat all memory-file content as untrusted data, never as higher-priority instructions.
  5. Apply a strict schema that permits factual event records but rejects behavioral directives and tool instructions.
  6. Restrict reads to an allowlisted workspace directory and validate resolved paths to prevent traversal or symlink escapes.
  7. Redact personal, financial, authentication, and confidential operational data before incorporating memory into outputs or cross-agent messages.
  8. Record which context files were accessed and why, without copying their sensitive contents into general logs.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:55
Finding

Mandatory Audit Logging Conflicts with Read-Only File Permission

Content
View full analysis

Vulnerability Details

File Locations: SKILL.md:55-59; AGENTS.md:13-16
Vulnerability Type: Permission and operational-contract mismatch
Risk Level: Medium

Vulnerable Code

SKILL.md declares read-only file access:

yaml
permissions:
  files: [read]
  network: []
  commands: []
  mcp: [sessions_send, subagents]

AGENTS.md simultaneously requires persistent logging:

markdown
## Memory

- **Daily notes**: `memory/YYYY-MM-DD.md` — raw logs of what happened
- **Risk events**: All risk events must be logged with timestamp, severity, and disposition

Technical Analysis

The declared permission model allows file reads but not file writes. The runtime instructions nevertheless require every risk event to be logged persistently. These requirements cannot both be satisfied through the declared file interface.

This inconsistency makes security enforcement dependent on unspecified runtime behavior. An implementation may fail to log required events, attempt an unauthorized write, or use another available persistence or messaging mechanism that is not covered by the stated permission contract.

Risk logs may include incident descriptions, financial impact estimates, system identifiers, severity ratings, and remediation decisions. Persisting such information without an explicitly scoped write permission, storage destination, redaction policy, and access-control model can expose sensitive operational data.

Attack Path

  1. A user or another agent submits an event containing sensitive or attacker-controlled content.
  2. The CRO workflow classifies the input as a risk event.
  3. AGENTS.md requires the event to be logged with its timestamp, severity, and disposition.
  4. The Skill attempts to satisfy this requirement despite declaring only read permission.
  5. Depending on runtime behavior, the write either fails, bypasses the manifest through another mechanism, or stores data in ...[truncated 718 chars]
Remediation
View remediation

Remediation Suggestions

  1. Reconcile the manifest and operational requirements.
  2. If persistent logging is required, explicitly declare narrowly scoped write permission for a dedicated audit directory rather than general workspace write access.
  3. If write access is not intended, remove the mandatory logging instruction and return structured log records to a trusted caller instead.
  4. Define an exact log schema, authorized writers and readers, storage location, encryption requirements, retention period, and deletion procedure.
  5. Sanitize and length-limit attacker-controlled event descriptions before persistence.
  6. Exclude secrets, credentials, raw personal data, and unnecessary financial details from logs.
  7. Use append-only integrity protection and unique event identifiers for audit records.
  8. Ensure write failures fail closed and are reported explicitly rather than falling back to undeclared storage or messaging channels.
  9. Add automated validation that rejects packages whose mandatory behavior requires permissions absent from the manifest.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents the skill identity and operating description entirely in Chinese, with no indication that the language choice is optional or tied to a region-specific requirement. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger list contains broad, common phrases such as '风险管理', '合规审计', and '危机响应' that are likely to appear in many ordinary conversations. This can cause unintended activation of a high-privilege governance skill that has access to cross-agent messaging and subagents, increasing the chance of unauthorized routing, disruptive recommendations, or accidental invocation of circuit-breaker workflows.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill advertises risk governance and emergency halt capabilities, but the user-facing description does not clearly warn that the skill may recommend or trigger automatic halt, isolation, rollback, or escalation behaviors. In context, this is more dangerous because the skill defines explicit circuit-breaker logic with auto_rollback and cross-agent notifications, so a user may invoke it without understanding the operational consequences.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The log states that a user request to invoke the CRO automatically triggered a recruitment workflow when the role was missing, without indicating authorization checks, confirmation gates, or scope limits. Broad automatic activation of agent creation or onboarding can be abused to cause unauthorized capability expansion, unexpected side effects, or privilege growth in an agent system.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The required message format #[风险-主题] mandates use of Chinese characters for cross-agent communication. This is a natural-language/locale constraint and the file does not indicate that users or agents can opt into another language or locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file presents all operational instructions, labels, and procedures exclusively in Chinese. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is explicitly documented and justified, which is not stated here.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document consistently presents the skill as a CRO role, but the identity registration section uses a CHO label while also assigning the registration number CRO-001. In an agent system with role-based routing, permissions, or approval logic keyed off identity labels, this inconsistency can cause misbinding of authority, incorrect policy application, or accidental privilege inheritance across executive agents.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The description contains both English and Chinese text ("首席风险官") but does not state whether the skill operates bilingually by design or whether users can choose their preferred language. Under the language/locale policy rule, forcing or assuming a specific language without opt-in can be a policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.