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## 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
## 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## 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
## 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
Content
```bash
# Copy environment template
cp .env.example .env

# Edit with your settings
nano .env
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
cp .env.example .env

# Edit with your settings
nano .env
```

**Minimum required configuration:**
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
npm install

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

# Setup database
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.

Credential Access

High
Category
Privilege Escalation
Content
# Configure environment
cp .env.example .env
nano .env  # Add database, Redis, system credentials

# Setup database
npm run db:migrate
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.

External Transmission

Medium
Category
Data Exfiltration
Content
### Execution
```bash
curl -X POST http://localhost:3000/api/v1/permissions/check \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "john.doe@company.com",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
### Deployment
```bash
curl -X POST http://localhost:3000/api/v1/workflows \
  -H "Content-Type: application/yaml" \
  --data-binary @customer-onboarding.yaml
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
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.

Missing User Warnings

Medium
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.

Context-Inappropriate Capability

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
// 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({
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Internal Network Request

Medium
Category
Server-Side Request Forgery
Content
// 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({
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.

External Transmission

Medium
Category
Data Exfiltration
Content
docker-compose ps

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

# View logs
docker-compose logs -f
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
# API
PORT=3000
NODE_ENV=development

# At least one system (for demo)
SALESFORCE_CLIENT_ID=your_salesforce_client_id
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.

Missing User Warnings

Medium
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.

Missing User Warnings

Medium
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.

Vague Triggers

Medium
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.

Missing User Warnings

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
npm run dev

# Verify
curl http://localhost:3000/health
```

## Usage
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
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.

Vague Triggers

Medium
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.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### DON'T:
- Bypass permission checks
- Assume permissions are consistent
- Execute workflows without validation
- Ignore audit requirements
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.

Excessive Permissions

Low
Category
Privilege Escalation
Content
- Provide compliance-ready reports

### DON'T:
- Bypass permission checks
- Assume permissions are consistent
- Execute workflows without validation
- Ignore audit requirements
Confidence
85% confidence
Finding
Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.

Static analysis

No suspicious patterns detected.