Back to skill

Security audit

Praesidia

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for Praesidia agent verification, but it can change live guardrails and send sensitive content or API keys to configurable endpoints without enough user-facing safeguards.

Review this skill before installing if you use Praesidia in production. Use only trusted HTTPS API destinations, avoid reusing production keys with custom or local endpoints, confirm any guardrail changes before applying them, and do not submit secrets, regulated data, or confidential messages for validation unless you accept that they will be sent to the configured Praesidia endpoint.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:52
Finding

Configurable API Destination Can Expose the Praesidia Bearer Token

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:21-40, 52-58 and equivalent guidance in README.md:70-97, 121-122, 149-208
Vulnerability Type: Credential disclosure through an unrestricted network destination
Risk Level: High

Vulnerable Code

json
{
  "skills": {
    "entries": {
      "praesidia": {
        "apiKey": "pk_live_your_key_here",
        "env": {
          "PRAESIDIA_API_URL": "https://api.praesidia.ai"
        }
      }
    }
  }
}

The documentation explicitly permits non-TLS and custom destinations:

markdown
For local development, use `http://localhost:3000` as the URL.

The configured destination is then used in an authenticated request:

javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/agents/chatbot-v2/agent-card",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Accept": "application/json"
  }
})

Technical Analysis

PRAESIDIA_API_URL controls the destination receiving the Authorization header. The Skill does not require HTTPS, restrict authenticated requests to an approved hostname, validate redirect destinations, or warn that a custom deployment receives the configured bearer credential.

Custom deployments are a declared feature and may be legitimate. However, attaching a sensitive bearer token to an unrestricted endpoint creates a credential-exfiltration boundary. A configuration mistake, compromised configuration, malicious support instruction, or attacker-controlled custom endpoint can receive the token. Permitting HTTP further allows interception or modification of requests when the endpoint is not strictly loopback-only.

This behavior exceeds safe minimum privilege because public agent discovery does not require authentication, while the Skill notes that authorization may nevertheless be included for additional results. Credentials should only be sent when an operation actually requires th ...[truncated 1546 chars]

Remediation
View remediation

Remediation Suggestions

  1. Allow authenticated production requests only to an explicit HTTPS hostname allowlist, defaulting to https://api.praesidia.ai.
  2. Treat custom deployments as a separate, explicit trust decision. Display the destination and obtain confirmation before sending a credential to a new host.
  3. Require HTTPS for every non-loopback destination. Permit HTTP only when the parsed hostname is exactly a recognized loopback address such as localhost, 127.0.0.1, or ::1.
  4. Validate the final parsed scheme and hostname rather than relying on string prefixes.
  5. Disable cross-origin redirects for authenticated requests, or strip the Authorization header whenever a redirect changes scheme, hostname, or port.
  6. Do not include authorization on public discovery calls unless authenticated results are specifically required.
  7. Use separately scoped credentials for production and custom development deployments. Never reuse a production key with a local or third-party endpoint.
  8. Document clearly that a custom endpoint receives the bearer token and may receive private organization data.
  9. Support short-lived, least-privilege tokens with separate read-only and guardrail-management scopes.
  10. Revoke and rotate any key suspected of having been sent to an untrusted endpoint.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:251
Finding

Guardrail Validation Sends Potentially Sensitive User Content to an External Service Without Explicit Disclosure

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:251-276; corresponding endpoint documentation in README.md:203-217; incomplete privacy disclosure in README.md:665-681
Vulnerability Type: Unclear external transmission of user-supplied sensitive information
Risk Level: Medium

Vulnerable Code

javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/organizations/${orgId}/guardrails/validate",
  method: "POST",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    content: "User's message here",
    agentId: "${agentId}",
    scope: "INPUT"
  })
})

The documented response includes processing of that externally submitted content:

markdown
**Response shows:**
- Whether content passed or failed
- Which guardrails were triggered
- Suggested actions (block, redact, warn)
- Modified content (if redaction applied)

Technical Analysis

The validation feature sends the complete supplied message to the Praesidia API or configured custom endpoint. Messages submitted for security validation can contain precisely the data that guardrails are intended to detect, including personally identifiable information, API keys, payment-card data, Social Security numbers, healthcare information, confidential prompts, or proprietary business material.

External processing is necessary for the declared remote validation feature. The security issue is that the Skill does not instruct the assistant to:

  • Clearly disclose that the message will leave the local environment.
  • Identify the destination receiving it.
  • Obtain confirmation before transmitting sensitive content.
  • Minimize or locally redact obvious secrets first.
  • Explain server-side retention, logging, subprocessors, or jurisdictional handling.

The README statement that “No user data is logged by this skill” is too narrow to resolve this c ...[truncated 1620 chars]

Remediation
View remediation

Remediation Suggestions

  1. Before validation, state that the selected content will be transmitted to the configured external endpoint and identify its hostname.
  2. Obtain explicit user confirmation when content may contain credentials, PII, healthcare data, payment data, or other confidential material.
  3. Add a clear instruction never to submit passwords, private keys, session tokens, or live API credentials.
  4. Perform local preprocessing to detect and redact obvious secrets before external submission whenever doing so does not defeat the requested validation.
  5. Send only the smallest text segment necessary for the validation task rather than an entire conversation, document, or agent transcript.
  6. Offer a preview showing exactly what will be transmitted.
  7. Document the remote service's retention period, logging behavior, subprocessors, processing locations, deletion controls, and applicable privacy terms.
  8. Require an additional warning for custom endpoints because their data-handling practices are not controlled by Praesidia.
  9. Support a local-only validation mode for high-sensitivity environments.
  10. Update the privacy section to distinguish local logging from remote receipt and processing of submitted content.
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 (12)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill includes direct instructions to apply guardrails via a POST request that changes an agent’s active security configuration, but it does not warn the assistant to require explicit user confirmation, distinguish test vs production environments, or describe rollback/safety checks. In a skill specifically designed to manage agent security policy, this omission is risky because an assistant could make live configuration changes that block traffic, redact content, or alter compliance behavior unexpectedly.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The content-validation flow tells the assistant to submit arbitrary user content to Praesidia’s external API for inspection without a prominent privacy/data-handling warning. Because this feature is likely to be used on sensitive prompts, messages, or regulated data, users may unknowingly transmit secrets, PII, or confidential business content to a third-party service.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 645)May include surrounding context.

md
### Skill Not Loading

1. Check file location: `~/.openclaw/skills/praesidia/SKILL.md`
2. Verify YAML frontmatter is valid
3. Restart OpenClaw
4. Check OpenClaw logs for errors

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger description is broad enough to overlap with generic security, compliance, and 'is this safe?' requests, which can cause the skill to activate in situations involving unrelated security decisions. In context, this is more dangerous because the skill presents trust scores and safety judgments, so an over-triggered invocation could bias or override more appropriate analysis paths.

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 · README.md (reported line 243)May include surrounding context.

Compliance: SOC2, GDPR Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card

text

---

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 · README.md (reported line 658)May include surrounding context.

Compliance: SOC2, GDPR Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card

text

---

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 · SKILL.md (reported line 79)May include surrounding context.

Compliance: SOC2, GDPR Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card

text

---

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 · SKILL.md (reported line 315)May include surrounding context.

Compliance: SOC2, GDPR Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card

text

---

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 · SKILL.md (reported line 320)May include surrounding context.

Compliance: SOC2, GDPR Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card

text

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill describes creating guardrails that can block, redact, replace, retry, or escalate agent traffic, but does not prominently warn about operational impact such as service disruption, false positives, or behavior changes. In a production agent-management context, silently applying such controls can affect availability, user experience, and compliance workflows.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs sending user-provided content to an external validation API without requiring a clear user-facing notice or consent flow. This creates privacy and compliance risk because sensitive prompts, personal data, or confidential business content may be transmitted off-platform during guardrail validation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

L485 states 'API keys stored in OpenClaw config (never exposed to users)', yet L23-L37 explicitly instructs users to place the live API key in ~/.openclaw/openclaw.json. While this may mean 'not exposed in responses,' the wording directly contradicts the documented storage location and could mislead about who can access the key.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
README.md:566