Back to skill

Security audit

Agency Agents 1.0.2

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a disclosed multi-agent prompt skill, but its manual install path and saved-output behavior create review-worthy persistence and provenance risks.

Install through ClawHub rather than the documented manual GitHub clone path. Review or replace the backend deployment examples before using them, especially database credentials, Kafka transport security, and image pinning. Treat outputs saved under ~/clawd/agency-agents as retained local data and avoid sending secrets or regulated information unless you have checked storage and cleanup behavior.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
agents/engineering/backend-architect.md:211
Finding

Hardcoded Trivial Database Credentials in Deployment Template

Content
View full analysis

Vulnerability Details

File Location: agents/engineering/backend-architect.md, lines 211-237
Vulnerability Type: Hardcoded credentials in deployable configuration
Risk Level: Medium

Vulnerable Code

yaml
auth-service:
  build: ./auth-service
  ports:
    - "3001:3001"
  environment:
    - DATABASE_URL=postgresql://user:pass@postgres:5432/auth
    - JWT_SECRET=${JWT_SECRET}
    - REDIS_URL=redis://redis:6379

product-service:
  build: ./product-service
  ports:
    - "3002:3002"
  environment:
    - DATABASE_URL=postgresql://user:pass@postgres:5432/products
    - ELASTICSEARCH_URL=http://elasticsearch:9200

order-service:
  build: ./order-service
  ports:
    - "3003:3003"
  environment:
    - DATABASE_URL=postgresql://user:pass@postgres:5432/orders
    - KAFKA_BROKERS=kafka:9092

postgres:
  image: postgres:15-alpine
  volumes:
    - postgres_data:/var/lib/postgresql/data
  environment:
    - POSTGRES_USER=user
    - POSTGRES_PASSWORD=pass

Technical Analysis

The backend agent provides a directly reusable Docker Compose template containing the fixed database username user and password pass. The same credentials are embedded in three service connection strings and in the PostgreSQL server configuration.

Because this is presented as a technical deliverable rather than explicitly restricted pseudocode, users may copy the configuration into development, staging, or production deployments. A predictable credential offers no meaningful resistance if PostgreSQL becomes externally reachable, if another container on the network is compromised, or if the configuration is disclosed through logs, source control, deployment dashboards, or process environment inspection.

Environment variables do not protect a secret when the secret is hardcoded directly into the configuration. Reusing the same account across multiple databases also broadens the effect of creden ...[truncated 1283 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove all literal database passwords and connection strings containing credentials.

  • Require secrets through fail-closed variable expansion, for example:

    yaml
    environment:
      POSTGRES_USER: ${POSTGRES_USER:?POSTGRES_USER is required}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
    
  • Construct application connection strings from secret-injected values rather than committing complete credential-bearing URLs.

  • Generate high-entropy, unique credentials for each environment and service.

  • Use Docker secrets, Kubernetes Secrets with an external secret manager, or a managed secret service instead of plaintext Compose variables in production.

  • Assign separate least-privilege database roles to the authentication, product, and order services.

  • Explicitly label local examples as non-production templates and prevent startup when required secrets are missing.

  • Add secret scanning and configuration linting to generated-project quality checks.

T08 · Insecure Dependencies

Warning
Location
agents/engineering/backend-architect.md:245
Finding

Mutable Kafka Container Image Without Version or Digest Pinning

Content
View full analysis

Vulnerability Details

File Location: agents/engineering/backend-architect.md, line 245
Vulnerability Type: Mutable third-party container dependency
Risk Level: Medium

Vulnerable Code

yaml
kafka:
  image: confluentinc/cp-kafka:latest
  environment:
    - KAFKA_BROKER_ID=1
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
    - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092

Technical Analysis

The latest tag is mutable. It can resolve to different image contents at different times even when the project configuration remains unchanged. Consequently, the effective third-party component executed by the generated deployment is not the component reviewed when the Skill was audited.

If the publisher account, registry, release process, or tag is compromised, a later pull can retrieve attacker-controlled image content. Even without malicious compromise, an incompatible update can unexpectedly change behavior or security characteristics. The absence of digest pinning also prevents reliable verification that all environments execute identical image bytes.

Attack Path

  1. A user adopts the supplied Compose configuration.
  2. The deployment pulls confluentinc/cp-kafka:latest.
  3. The registry tag later moves to a different image, whether through routine publication or supply-chain compromise.
  4. A rebuild, deployment, or explicit image pull downloads the changed image.
  5. The container runs with the network, volume, environment, and other permissions granted to the Kafka service.
  6. If the replacement image is malicious, it can access resources available from the container and communicate through permitted network paths.

Malicious exploitation is conditional on compromise or unauthorized replacement of the upstream image or publishing channel; the confirmed weakness is that the configuration does not cryptographically bind the dependency to reviewed content.

Impact Assessment

Imp ...[truncated 391 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace latest with a tested, explicit release version.

  • For reproducible and tamper-resistant deployments, pin the image by digest:

    yaml
    image: confluentinc/cp-kafka@sha256:REVIEWED_DIGEST
    
  • Maintain a controlled update process that verifies image provenance, signatures, vulnerability scan results, release notes, and compatibility before changing the digest.

  • Configure automated dependency monitoring to propose reviewed upgrades rather than silently consuming tag changes.

  • Prefer registries and images that support signed provenance, and enforce signature verification in the deployment environment where available.

  • Run the container as a non-root user with read-only filesystems, restricted Linux capabilities, limited network access, and no host runtime socket.

T08 · Insecure Dependencies

Warning
Location
README.md:108
Finding

Manual Installation Uses an Unverified Placeholder Repository

Content
View full analysis

Vulnerability Details

File Location: README.md, lines 108-110
Additional Location: docs/QUICKSTART.md, lines 21-26
Vulnerability Type: Unsafe and unverified installation source
Risk Level: Medium

Vulnerable Code

bash
# Or install manually
git clone https://github.com/your-repo/agency-agents-openclaw.git
cp -r agency-agents-openclaw ~/.openclaw/skills/

The quick-start guide repeats the same installation source:

bash
# Clone repository
git clone https://github.com/your-repo/agency-agents-openclaw.git

# Copy to the Skill directory
cp -r agency-agents-openclaw ~/.openclaw/skills/

Technical Analysis

The manual installation procedure references the placeholder namespace your-repo instead of a verified repository controlled by the declared publisher. It also does not pin a release tag or commit and provides no checksum or signature.

Copying the resulting repository into ~/.openclaw/skills/ installs its contents into a persistent Skill discovery location. If the placeholder URL is replaced, redirected, or made valid under ownership unrelated to the package publisher, users could install unreviewed prompt instructions or other Skill components. Even if a legitimate repository is eventually substituted, cloning its default branch means installation content can change after audit without a corresponding version constraint.

Attack Path

  1. A user follows the documented manual installation procedure.
  2. The user clones whatever content the placeholder URL resolves to at that time.
  3. No tag, commit, signature, or checksum is checked.
  4. The user copies the downloaded content into ~/.openclaw/skills/.
  5. OpenClaw discovers and loads the installed Skill in later sessions.
  6. If the repository contains attacker-controlled Skill instructions or components, those contents can influence subsequent agent behavior within the permissions available to OpenClaw.

Th ...[truncated 813 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace the placeholder with the publisher’s verified canonical repository.
  • Pin manual installation to a reviewed release tag or immutable commit rather than the default branch.
  • Publish SHA-256 checksums or signed release manifests and instruct users to verify them before installation.
  • Use signed Git tags or artifact signatures tied to a documented publisher identity.
  • Ensure the repository URL, package owner, _meta.json owner, and documentation consistently identify the same publisher.
  • Prefer installation through a registry that verifies artifact integrity and publisher ownership.
  • Update both README.md and docs/QUICKSTART.md so no unsafe fallback remains.
  • Add a warning that users must inspect downloaded Skill files before copying them into the persistent OpenClaw Skill directory.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file presents the skill/project summary entirely in Chinese from the title onward, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking audience. Under the policy, forcing a specific language without opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire skill README is written in Chinese, including product description, usage guidance, pricing, and support information, with no indication that other languages are available or that Chinese is an optional locale. Under the policy criteria, this is a language/locale constraint presented without user opt-in or documented regional justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description and the entire user-facing documentation are written in Chinese, with no indication that other languages are supported or that Chinese is optional. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s description, headings, instructions, templates, and examples are predominantly written in Chinese, which effectively imposes a specific language for interaction. There is no indication that users may choose another language, nor any documented reason that this skill must be Chinese-only.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · agents/engineering/backend-architect.md (reported line 89)May include surrounding context.

md
description: 电商平台 API

servers:
  - url: https://api.example.com/v1

paths:
  /products:

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly emphasizes 'security first' but its docker-compose example includes weak/default credentials (for example POSTGRES_USER=user and POSTGRES_PASSWORD=pass) and an insecure Kafka PLAINTEXT listener. Even as sample content, these patterns are commonly copied into real deployments, which can lead to unauthorized access, credential reuse, interception of service traffic, and weakened overall security posture.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest description and the entire skill content present the role and instructions exclusively in Chinese, indicating a fixed language/locale expectation. Under the policy, forcing a specific language without an explicit user choice or opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown skill mandates a single language in its natural-language description and instructions, with no opt-in or alternative language option for users. The policy for this audit flags language or locale constraints when they are imposed without user choice or explicit justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description and nearly all instructional content are written in Chinese, and the file does not state that other languages are supported or that Chinese is optional. Under the language/locale policy, a skill should not impose a specific language unless the user opts in or the regional constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is written entirely in Chinese and does not provide any mechanism to respect the user's preferred language or document a legitimate locale restriction. In a multi-agent environment, this can cause user misunderstanding, reduce reviewer visibility, and lead to incorrect approvals or missed risks when operators cannot reliably interpret quality-gate decisions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file presents all guidance and examples exclusively in Chinese, which can amount to a language policy violation when no user choice, alternative locale, or justification is provided. The content does not indicate that the skill is region-specific or that other language documentation is available.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The quickstart guides users through using the skill but does not warn early and clearly that agent outputs are automatically persisted to the workspace. Because users may submit proprietary code, credentials, business plans, or personal data in prompts, silent auto-saving increases the chance of unintended local data retention and later disclosure through backups, shared machines, or repository commits.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill defaults entirely to Chinese without offering language negotiation or a documented locale restriction. This can lead to misunderstanding of instructions, QA criteria, or status outputs, which in an orchestrator is operationally risky because errors can propagate across multiple delegated agents and reduce the effectiveness of human oversight.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The orchestrator is positioned as a general-purpose entry point for broad project execution, with examples spanning software development and marketing. Without clear activation boundaries, it can preempt more specialized skills and cause over-broad delegation, increasing the chance of inappropriate tool/agent use, missed safeguards, or routing sensitive requests through a less constrained workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The package description is written in Chinese, and the manifest repeatedly uses Chinese-only descriptive text for the skill and pricing metadata. In this manifest there is no indication that language choice is optional or that the skill is intentionally limited to a Chinese-speaking or China-specific context, which can violate a language/locale policy requiring user opt-in or clear justification.

Content

No source excerpt is available for this finding.