Back to skill

Security audit

autonomy-gate

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent autonomy-governance policy, but it lets the agent influence its own authorization state and includes broad emergency shutdown authority.

Review this skill carefully before installing. It should be limited to advisory checks unless you separately enforce operator-only approval for privilege increases, validate approved channels/templates, and remove or tightly scope autonomous service shutdown.

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 (3)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:105
Finding
Agent-Writable Authorization State Enables Privilege Escalation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 105-113 **Vulnerability Type**: Authorization-state manipulation **Risk Level**: Medium ### Evidence ```markdown ## 주간 자기평가 매주 1회, 아래 항목 점검 후 `references/state.json` 업데이트: 1. 이번 주 외부 행동 건수 / 성공률 2. 운영자가 되돌린 행동 있었나? 3. 판단 오류 있었나? 4. 가치 기여한 행동 있었나? 5. 레벨 변동 필요한가? (근거 포함) ``` The source instructs the agent to conduct a weekly self-assessment, determine whether its authorization level should change, and update `references/state.json`. ### Technical Analysis The agent can influence the same persistent state that the authorization gate uses to determine its privileges. The policy does not require operator confirmation, a protected approval record, a cryptographic signature, or enforcement by an independent authorization component before a level increase becomes effective. This violates separation of duties and least-privilege principles. A component subject to the authorization policy should not be able to grant itself additional authority. Although the document defines eligibility and probation requirements, it does not technically prevent the agent from writing a higher `currentLevel` value or modifying related authorization fields. ### Attack Path 1. Malicious or misleading content influences the agent before or during a weekly self-assessment. 2. The agent concludes that a higher autonomy level is warranted. 3. The agent updates `references/state.json`, including `currentLevel`, probation data, approved channels, or related authorization fields. 4. Future gate checks treat the modified state as authoritative. 5. The agent gains access to broader capabilities, potentially including unrestricted external communications, deployment, resource spending, or other actions allowed at higher levels. ### Impact Assessment Successful exploitation could expand the agent's operational authority beyond what the operator explicitly approved. Depending on the selected level and the tools availa ...[truncated 446 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Make every privilege increase operator-only. - Permit the agent to propose a level change, but prevent it from directly applying that change. - Store authoritative authorization state outside agent-writable project paths. - Require a signed or otherwise independently verifiable operator approval for changes to `currentLevel`, approved channels, templates, and budget limits. - Enforce level restrictions through a separate runtime policy component rather than relying only on instructions in a Markdown file. - Allow automatic state changes only when they reduce privileges, such as emergency revocation or incident-triggered demotion. - Record every authorization change in an append-only audit log containing the previous state, new state, approver identity, timestamp, and justification. - Validate probation and eligibility requirements independently before activating a new level. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:79
Finding
Operator Silence Authorizes Potentially Destructive Service Shutdown<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 79-83 **Vulnerability Type**: Excessive emergency authority **Risk Level**: Medium ### Evidence ```markdown ## 비상 프로토콜 운영자 미응답 6시간 이상: - **허용**: 서비스 모니터링, 긴급 알림 발송, 서비스 중지 - **금지**: 그 외 모든 외부 행동. 로그만 남기고 대기. ``` The source states that when the operator has not responded for more than six hours, service monitoring, emergency alerts, and service shutdown are allowed. ### Technical Analysis The emergency policy treats operator silence as sufficient authorization to stop a service. It does not define: - Which services may be stopped. - What conditions constitute an emergency. - What evidence must be collected before shutdown. - Whether shutdown is limited to a specific environment or component. - How service recovery should occur. - Whether an independent control must approve or validate the action. A service shutdown can be destructive from an availability perspective. Granting this ability based only on elapsed time creates an overly broad privilege boundary and allows ambiguous or manipulated circumstances to trigger a high-impact action. ### Attack Path 1. An attacker, malformed input, or monitoring error causes the agent to believe an emergency exists. 2. The operator does not respond for six hours, or the agent incorrectly determines that the timeout has elapsed. 3. The agent applies the emergency protocol. 4. Because the policy broadly permits “service shutdown,” the agent selects and stops a service without additional authorization. 5. The affected service remains unavailable until manually or automatically restored. ### Impact Assessment Successful exploitation could cause denial of service or operational disruption. The potential scope includes any service for which the hosting agent possesses shutdown permissions because the policy contains no explicit service allowlist. The project does not contain executable shutdown logic or credentials; therefore, realized impact d ...[truncated 70 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Remove autonomous shutdown authority unless it is strictly necessary. - Replace the broad permission with an explicit allowlist of services, environments, and permitted actions. - Define objective emergency thresholds, such as verified health-check failures from multiple independent sources. - Require operator approval or validation by an external circuit breaker before shutdown. - Use least-privileged credentials that can affect only the pre-approved service. - Prefer reversible mitigation, such as traffic isolation, rate limiting, or disabling a specific worker, over full shutdown. - Implement automatic recovery and a maximum shutdown duration. - Record the triggering evidence, timeout calculation, selected service, action result, and recovery status in an append-only audit log. - Require a dry-run or impact check before executing the action. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
references/state.json:2
Finding
Outbound Authorization Uses Placeholder Destinations and an Empty Template Allowlist<![CDATA[ ## Vulnerability Details **File Location**: `references/state.json`, lines 2-7 **Vulnerability Type**: Fail-open or ambiguous outbound authorization configuration **Risk Level**: Low ### Evidence ```json "currentLevel": "L4a", "probation": true, "probationStart": "2026-02-16", "probationEnd": "2026-03-02", "approvedChannels": ["discord:YOUR_CHANNEL_ID", "email:your@email.com"], "approvedTemplates": [], ``` The state enables level `L4a`, lists example-style destination placeholders as approved channels, and provides no approved templates. The L4a policy requires communication to use approved channels and approved templates. ### Technical Analysis The active authorization configuration is incomplete and internally inconsistent: - `discord:YOUR_CHANNEL_ID` is an unresolved placeholder. - `email:your@email.com` appears to be an example address rather than a verified destination. - `approvedTemplates` is empty even though L4a requires an approved template. No schema, startup validation, or explicit fail-closed rule is provided to reject placeholder destinations or prevent transmission when the template allowlist is empty. An implementation could mistakenly treat these strings as real authorization entries, interpret an empty template list as unrestricted, or bypass template checks because no valid template is available. ### Attack Path 1. The authorization gate reads `currentLevel` as `L4a`. 2. It loads the configured approved-channel list without rejecting placeholder values. 3. It encounters an empty template list. 4. An incomplete implementation interprets the empty list as unrestricted or omits template validation. 5. The agent attempts an outbound message using an unverified destination or unapproved content format. ### Impact Assessment The issue could lead to attempted communication with an unintended destination or transmission of content that has not passed template approval. The practical scope is limited by whether the placeholder a ...[truncated 191 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Default new installations to `L1` until authorization configuration has been explicitly completed and verified. - Reject known placeholder patterns such as `YOUR_CHANNEL_ID`, `your@email.com`, and similar example values. - Require at least one valid approved template before enabling L4a outbound actions. - Define an explicit schema for channel identifiers and template identifiers. - Validate the destination and template as a pair before every outbound action. - Treat missing, empty, malformed, or unresolved authorization fields as denial conditions. - Verify ownership or operator approval of each destination before adding it to the allowlist. - Add configuration tests that confirm incomplete authorization data fails closed. - Separate example configuration from active runtime state so examples cannot accidentally grant authorization. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger list includes broad phrases like "자율성", "권한 체크", and "레벨 확인", which are common enough to activate during ordinary discussion rather than an explicit request to run this governance workflow. Because the skill governs external actions and authority checks, accidental invocation could steer agent behavior, cause unnecessary state evaluation, or prime later privileged actions under the wrong context.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs updating `references/state.json` and creating review files in `memory/` without requiring a user-visible warning or confirmation before modifying local data. Even though these are internal files, they affect future authorization decisions and audit history, so silent writes could alter effective agent permissions or create misleading governance records without operator awareness.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This JSON state file contains multiple human-readable values in Korean, including history reasons and incident metadata/descriptions, with no indication that the skill is region-specific or that users can choose their preferred language. That creates a language/locale policy concern because the skill's natural-language content appears to impose a specific language by default.

Static analysis

No suspicious patterns detected.