Back to skill

Security audit

Enterprise Agent OS

Security checks for vulnerabilities and agentic risk

Overview

This skill is for legitimate enterprise orchestration, but it asks agents to use broad enterprise credentials and run mutable remote code without enough scoping or safety controls.

Review this before installing in any real enterprise environment. Use a pinned, verified release; run it in an isolated test environment first; avoid production credentials in local .env files; use least-privilege service accounts and a secret manager; narrow auto-invocation; require explicit approval for workflows, exports, and admin actions; and verify server-side authorization before relying on the documented examples.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
EXAMPLES.md:499
Finding

Workflow Execution Is Gated by Transport Success Instead of the Authorization Decision

Content
View full analysis

Vulnerability Details

File Location: EXAMPLES.md, lines 499-508
Vulnerability Type: Improper authorization-result validation
Risk Level: High

Vulnerable code:

bash
# 1. Check permissions
curl -X POST /api/v1/permissions/check -d '{...}'

# 2. If allowed, execute operation
if [ $? -eq 0 ]; then
  curl -X POST /api/v1/workflows/execute -d '{...}'
fi

Technical Analysis

The example uses the exit status of curl as if it represented the permission decision. By default, curl returns a successful exit status when it successfully completes the HTTP exchange, even if the server returns an authorization denial such as HTTP 401 or 403. It can also return zero when a permission endpoint returns HTTP 200 with an application-level result such as "allowed": false.

The script neither enables curl --fail/--fail-with-body nor parses and validates the response body's authorization field. Consequently, a completed permission-check request may satisfy [ $? -eq 0 ] regardless of whether access was granted.

The relative URLs shown in this conceptual example require a configured host or correction before execution. Once used with a valid API base URL, however, the authorization-control error remains.

Attack Path

  1. An attacker or unauthorized user requests a sensitive cross-system workflow.
  2. The client sends the pre-flight request to the permission-check endpoint.
  3. The endpoint returns a normal HTTP response containing a denial, or returns an HTTP authorization error without causing curl to fail.
  4. curl exits with status zero because the HTTP exchange completed.
  5. The shell condition treats the transport-level success as an authorization grant.
  6. The client sends the workflow-execution request.
  7. If the workflow endpoint relies on this client-side pre-flight check instead of independently enforcing authorization, the unauthorized workflow executes.

Impact Assessment

...[truncated 771 chars]

Remediation
View remediation

Remediation Suggestions

  • Do not use process exit status alone as an authorization decision.
  • Use curl --fail-with-body so HTTP error responses produce a nonzero status.
  • Parse the JSON response and require the authorization field to be exactly true before proceeding.
  • Fail closed when the response is missing, malformed, timed out, or ambiguous.
  • Require the workflow endpoint to perform its own server-side authorization check. Client-side pre-flight checks must never be the security boundary.
  • Consider issuing a short-lived, signed authorization-decision token bound to the user, action, resource, workflow, and expiration time. Validate that token at execution.
  • Add tests covering HTTP 401, HTTP 403, HTTP 500, malformed JSON, timeouts, and HTTP 200 responses containing "allowed": false.

A safer illustrative pattern is:

bash
response="$(curl --fail-with-body -sS \
  -X POST "$API_BASE/api/v1/permissions/check" \
  -H "Content-Type: application/json" \
  -d '{...}')" || exit 1

allowed="$(printf '%s' "$response" | jq -er '.allowed')"
[ "$allowed" = "true" ] || exit 1

curl --fail-with-body -sS \
  -X POST "$API_BASE/api/v1/workflows/execute" \
  -d '{...}'

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:80
Finding

Mutable Remote Repository and Unverified Dependencies Are Retrieved and Executed

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 80-96; equivalent instructions also appear in README.md lines 36-41 and QUICKSTART.md lines 12-21 and 41-50
Vulnerability Type: Unpinned remote payload and software supply-chain exposure
Risk Level: Medium

Vulnerable code from SKILL.md:

bash
# Clone project
git clone https://github.com/ZhenRobotics/openclaw-enterprise-hub.git ~/enterprise-agent-os
cd ~/enterprise-agent-os

# Install dependencies
npm install

# Configure environment
cp .env.example .env
nano .env  # Add database, Redis, system credentials

# Setup database
npm run db:migrate

# Start services
npm run dev

Equivalent manual-installation code from README.md:

bash
git clone https://github.com/ZhenRobotics/openclaw-enterprise-hub.git
cd openclaw-enterprise-hub
npm install
npm run dev

Inconsistent repository instructions from QUICKSTART.md:

bash
# Clone repository
git clone https://github.com/YourOrg/openclaw-enterprise-hub.git
cd openclaw-enterprise-hub

# Start all services
docker-compose up -d
bash
# Clone repository
git clone https://github.com/YourOrg/openclaw-enterprise-hub.git
cd openclaw-enterprise-hub

# Install Node.js dependencies
npm install

# Or use pnpm (faster)
pnpm install

Technical Analysis

The installation process clones the mutable default branch of an external repository and immediately installs or executes its contents. No immutable commit hash, signed release tag, artifact checksum, or signature-verification procedure is specified. The effective code therefore can change after this skill package has been reviewed.

npm install and pnpm install may execute package lifecycle hooks such as preinstall, install, and postinstall. Subsequent commands including npm run db:migrate, npm run dev, and docker-compose up also execute code and container definitio ...[truncated 2192 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace default-branch cloning with an immutable, reviewed commit or signed release.
  • Publish cryptographic checksums for release archives and require users to verify them before execution.
  • Use signed Git tags or release attestations and document signature verification.
  • Identify one canonical repository and remove all YourOrg placeholder references.
  • Include a reviewed lockfile and use npm ci rather than unconstrained npm install.
  • Pin dependencies and container images to immutable versions or digests.
  • Audit all npm lifecycle scripts, migration scripts, startup scripts, and Docker Compose files before execution.
  • Consider installing dependencies initially with lifecycle scripts disabled, such as npm ci --ignore-scripts, and explicitly run only reviewed build steps afterward.
  • Run installation and development services under a dedicated, unprivileged account or isolated container with minimal filesystem and network access.
  • Do not expose production enterprise credentials to installation scripts. Add credentials only after source and dependency verification, and use a managed secret store for production.
  • Generate and review a software bill of materials, run dependency vulnerability scanning, and verify package provenance in CI.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (23)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · QUICKSTART.md (reported line 81)May include surrounding context.

bash
# Copy environment template
cp .env.example .env

# Edit with your settings
nano .env

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · QUICKSTART.md (reported line 84)May include surrounding context.

cp .env.example .env

Edit with your settings

nano .env

text

**Minimum required configuration:**

Credential Access

High
Category
Privilege Escalation
Confidence
97% confidence
Finding

The instruction to populate .env with system credentials creates a clear secret-handling risk, especially given the listed integrations include admin-capable enterprise platforms. If users follow this pattern without additional controls, credentials may be stored insecurely, leaked through local files, backups, shell history, or source control, enabling compromise of connected systems.

Content

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

md
npm install

# Configure environment
cp .env.example .env
nano .env  # Add database, Redis, system credentials

# Setup database

Credential Access

High
Category
Privilege Escalation
Confidence
97% confidence
Finding

The repeated .env setup context reinforces insecure credential onboarding without any caution about handling privileged enterprise secrets. In this skill's context, those secrets may grant access to Salesforce, SAP, Jira, databases, and policy engines, so insecure storage materially raises the blast radius of a leak.

Content

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

md
# Configure environment
cp .env.example .env
nano .env  # Add database, Redis, system credentials

# Setup database
npm run db:migrate

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · EXAMPLES.md (reported line 16)May include surrounding context.

Execution

bash
curl -X POST http://localhost:3000/api/v1/permissions/check \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "john.doe@company.com",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The workflow example sends customer onboarding details to Slack via webhook, which is an external transmission of business/customer data, but it provides no caution about data sensitivity, approved channels, or webhook secrecy. This is dangerous because agents may copy the pattern into production and leak customer data or secrets to third-party messaging systems outside approved compliance boundaries.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · EXAMPLES.md (reported line 147)May include surrounding context.

Deployment

bash
curl -X POST http://localhost:3000/api/v1/workflows \
  -H "Content-Type: application/yaml" \
  --data-binary @customer-onboarding.yaml

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The audit export example demonstrates retrieval of sensitive customer financial-access history, including user identities and IP addresses, without any privacy, minimization, or authorization warning. In a skill intended for agent use, this can encourage broad exfiltration of regulated audit data and normalize handling sensitive records without confirming legal basis or least-privilege constraints.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The failure-simulation section shows calls to admin endpoints that alter live system state, but it lacks strong cautionary text indicating these are destructive or test-only operations. In agent-driven environments, examples often become executable playbooks, so this materially raises the risk of accidental denial of service or operational disruption.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The examples document administrative test endpoints that can intentionally kill and recover adapters, which is a state-changing control surface beyond normal enterprise orchestration usage. In an agent-skill context, publishing these endpoints without strong warnings, access restrictions, or environment scoping can normalize dangerous actions and increase the chance an agent or operator invokes disruptive functionality inappropriately.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · EXAMPLES.md (reported line 473)May include surrounding context.

md
// Agent recognizes this requires Enterprise Agent OS skill
if (containsKeywords(userMessage, ['permission', 'access', 'salesforce', 'sap'])) {
  // Use the skill
  const response = await fetch('http://localhost:3000/api/v1/permissions/check', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({

Internal Network Request

Medium
Category
Server-Side Request Forgery
Confidence
70% confidence
Finding

Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.

Content

Scanner excerpt · EXAMPLES.md (reported line 473)May include surrounding context.

md
// Agent recognizes this requires Enterprise Agent OS skill
if (containsKeywords(userMessage, ['permission', 'access', 'salesforce', 'sap'])) {
  // Use the skill
  const response = await fetch('http://localhost:3000/api/v1/permissions/check', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · QUICKSTART.md (reported line 26)May include surrounding context.

md
docker-compose ps

# Check health
curl http://localhost:3000/health

# View logs
docker-compose logs -f

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
60% confidence
Finding

Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.

Content

Scanner excerpt · QUICKSTART.md (reported line 97)May include surrounding context.

md
# API
PORT=3000
NODE_ENV=development

# At least one system (for demo)
SALESFORCE_CLIENT_ID=your_salesforce_client_id

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The quickstart instructs users to place third-party credentials in a local .env file but does not warn that the file contains secrets that must be excluded from source control and protected with least-privilege filesystem access. In a real enterprise setup, this omission can lead to accidental secret disclosure through commits, support bundles, backups, or shared development environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The guide tells users to download a Google service account JSON key and reference it from .env without highlighting that the JSON key is highly sensitive long-lived credential material. If mishandled, an attacker who obtains the key may be able to impersonate the service account and access Google Workspace APIs at the scope granted.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill declares very broad automatic invocation triggers such as generic references to access issues, compliance auditing, and combinations of major enterprise systems. In an enterprise orchestration skill with permission-checking and workflow automation capabilities, ambiguous triggers increase the chance the agent will invoke the skill in contexts the user did not intend, potentially exposing sensitive metadata, initiating privileged actions, or over-trusting the skill’s outputs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The setup instructions direct users to place database, Redis, and third-party system credentials into a local .env file without warning about the sensitivity and privilege level of those secrets. Because this skill orchestrates multiple enterprise systems, compromise or mishandling of these credentials could enable broad unauthorized access across integrated platforms.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 99)May include surrounding context.

npm run dev

Verify

curl http://localhost:3000/health

text

## Usage

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill explicitly handles employee identities, customer identifiers, cross-system permissions, and audit exports, but it does not include safeguards around sensitive data handling, minimization, authorization boundaries, or privacy obligations. In an enterprise context, prompting an agent to process and export access history without strong warnings increases the risk of unauthorized disclosure of personal, customer, or regulated data.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The auto-trigger keywords are broad and map to common enterprise phrases such as permission checks, workflow automation, and system integration. In an agent environment, this can cause unintended invocation of a highly privileged orchestration skill for ambiguous requests, increasing the chance of unnecessary access to enterprise systems or sensitive metadata.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
### DON'T:
- Bypass permission checks
- Assume permissions are consistent
- Execute workflows without validation
- Ignore audit requirements

Excessive Permissions

Low
Category
Privilege Escalation
Confidence
85% confidence
Finding

Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.

Content

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

md
- Provide compliance-ready reports

### DON'T:
- Bypass permission checks
- Assume permissions are consistent
- Execute workflows without validation
- Ignore audit requirements

Static analysis

No suspicious patterns detected.