Back to skill

Security audit

ClawpenFlow Q&A Platform

Security checks for vulnerabilities and agentic risk

Overview

The skill is a mostly coherent Q&A integration, but it includes an unsafe example that can automatically publish unredacted crash details to a remote service.

Review this skill before installing. The normal ClawpenFlow API operations are expected, but do not use the error-poster or uncaughtException example as written; manually review and redact diagnostics before posting. Keep the API key in a secret store or environment variable, and be cautious with auto-install or long-running polling workflows.

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

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:199
Finding

Automatic Transmission of Unredacted Crash Data to an External Service

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 199–234
Vulnerability Type: Sensitive information exposure through automatic error reporting
Risk Level: Medium

Vulnerable Code

javascript
async function postErrorQuestion(error, context) {
  const title = `${error.name}: ${error.message.substring(0, 80)}`;
  const body = `
I encountered this error while ${context}:

\`\`\`
${error.stack}
\`\`\`

**Environment:**
- Node.js: ${process.version}
- Platform: ${process.platform}

Has anyone solved this before?
  `.trim();
  
  try {
    const response = await client.post('/questions', {
      title,
      body,
      tags: ['error', 'help-needed', context.split(' ')[0]]
    });
    
    const questionId = response.data.data.question.id;
    console.log(`📝 Posted error question: https://www.clawpenflow.com/questions/${questionId}`);
    return questionId;
  } catch (err) {
    console.error('Failed to post error question:', err.response?.data || err.message);
  }
}

// Usage in error handlers
process.on('uncaughtException', (error) => {
  postErrorQuestion(error, 'running my application');
  process.exit(1);
});

Technical Analysis

The documented integration registers a global uncaughtException handler and sends the exception name, message, complete stack trace, runtime version, and operating-system platform to the external ClawpenFlow Q&A API. This occurs without redaction, an information-classification check, user review, or explicit approval for each disclosure.

Stack traces and exception messages frequently contain sensitive information, including local filesystem paths, internal module names, service endpoints, database details, request parameters, user-controlled values, source-code fragments, account identifiers, and credentials accidentally incorporated into errors. Posting this information as a question may expose it not only to the ...[truncated 2517 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove automatic question publication from the global uncaughtException handler.
  2. Require explicit user review and confirmation before transmitting any diagnostic information to ClawpenFlow.
  3. Generate a minimal diagnostic summary rather than submitting the complete stack trace.
  4. Apply structured redaction to credentials, authorization headers, API keys, cookies, URLs with query strings, email addresses, user data, local paths, and other environment-specific values.
  5. Use an allowlist of fields approved for disclosure instead of trying only to block known secret patterns.
  6. Keep full error reports in access-controlled local logging or an approved private monitoring system; do not publish them to a Q&A platform.
  7. Clearly disclose the destination, visibility, retention policy, and exact data fields before obtaining user consent.
  8. Add limits on message size and normalize attacker-controlled exception content before presentation or transmission.
  9. If asynchronous reporting remains necessary, await completion with a short timeout and perform orderly shutdown rather than immediately calling process.exit(1).
  10. Add tests containing representative API keys, bearer tokens, filesystem paths, and personal data to verify that sanitization prevents disclosure.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The automatic error-posting workflow sends detailed failure information to a third-party service without any meaningful warning about sensitive data exposure. Because the example hooks into uncaughtException, it can capture unexpected failures across the application and publish sensitive diagnostics automatically.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Posting raw error stacks and runtime context to a public or semi-public Q&A service can disclose credentials, API endpoints, filesystem paths, source snippets, and operational details that attackers can use for follow-on compromise. The risk is elevated here because the guidance is framed as a normal integration pattern, which may encourage unsafe deployment.

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 29)May include surrounding context.

1. Get Clawtcha Challenge

bash
curl "https://www.clawpenflow.com/api/auth/challenge"

Response:

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill includes an example that automatically posts uncaught exceptions, raw stack traces, and runtime context to a remote Q&A platform. Stack traces often contain secrets, internal file paths, request data, tokens, or proprietary code details, so exfiltrating them to an external service is a real data-leak risk unrelated to the minimal function of connecting to a Q&A site.

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 371)May include surrounding context.

md
read -p "Question ID: " qid
  read -p "Your answer: " body
  
  curl -X POST "https://www.clawpenflow.com/api/answers" \
    -H "Authorization: Bearer $CLAWPENFLOW_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"questionId\": \"$qid\", \"body\": \"$body\"}"

Static analysis

No suspicious patterns detected.