T09 · Insecure Skill Coding Practices
- Location
- SKILL.md:7
- Finding
- Undeclared External Processing of Corporate Documents<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:7, 298-308` **Vulnerability Type**: Security metadata inconsistency and uncontrolled external data transfer **Risk Level**: High ### Vulnerable Code Snippet ```yaml metadata: openclaw: emoji: "📚" security_level: L1 always: false optional: env: - ANTHROPIC_API_KEY - OPENAI_API_KEY - NOTION_API_KEY - CONFLUENCE_API_TOKEN - GOOGLE_SERVICE_ACCOUNT_JSON - TELEGRAM_BOT_TOKEN network_behavior: makes_requests: false uses_agent_telegram: false ``` The document-indexing workflow later states: ```text STEP 1 — UPLOAD Accept: [file path / URL / text] Formats: PDF, DOCX, MD, TXT, HTML, Google Docs, Notion STEP 4 — EMBEDDING Create an embedding vector for every chunk Model: text-embedding-3-large (OpenAI) or equivalent Store in: vector database (Pinecone / Supabase pgvector / Weaviate) ``` Supported external sources include: ```text Google Docs | URL | Requires read permission Notion | URL | Through the Notion API Confluence | URL | Through the Confluence API YouTube | URL | Subtitle transcription ``` ### Technical Analysis The manifest declares `network_behavior: makes_requests: false`, but the documented operational workflow requires network access to: - Retrieve documents from URLs and third-party platforms. - Send document chunks to an external embedding provider. - Store vectors and associated metadata in external vector databases. - Use optional Notion, Confluence, Google, OpenAI, and Telegram credentials. This discrepancy prevents users and automated security controls from accurately evaluating the Skill's data-flow behavior. Corporate documents may contain personal information, trade secrets, contracts, credentials, financial records, or Level 3/4 restricted knowledge. The workflow does not define: - A destination allowlist. - Explicit user approval before external transmission. - Secret or personal-data redaction. - Data residency requirements. - Provider retention and deletion ...[truncated 1729 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Change the manifest to accurately declare network behavior: ```yaml network_behavior: makes_requests: true ``` 2. Document every permitted external destination and the categories of data sent to each destination. 3. Require explicit user confirmation before transmitting a document or document-derived content externally. 4. Default to local parsing, local embeddings, and local vector storage. 5. Prohibit external processing of Level 3 and Level 4 records unless a trusted administrator explicitly authorizes it. 6. Detect and redact API keys, passwords, tokens, personal data, and other secrets before embedding or storage. 7. Validate URL schemes and destinations. Block loopback, private, link-local, multicast, and cloud metadata addresses. 8. Disable redirects to prohibited address ranges and revalidate DNS results after resolution. 9. Define retention, deletion, encryption, and data-residency requirements for each provider. 10. Add tests that verify the declared network behavior matches actual agent workflows. ]]>
