T09 · Insecure Skill Coding Practices
- Location
scripts/echo-web.py:300- Finding
Automatic Disclosure of Private Note Content to Third-Party Services Without Effective Opt-In
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
Echo Seed is a real note-capture app, but it exposes private notes on the network and can automatically send note or link content to external services without effective opt-in controls.
Install only after reviewing the network exposure and external-sync behavior. Run it on localhost or behind authentication, disable or remove external AI/Notion/Calendar calls unless you explicitly want them, avoid submitting private/internal URLs, and update dependencies before using it with sensitive notes.
scripts/echo-web.py:300Automatic Disclosure of Private Note Content to Third-Party Services Without Effective Opt-In
scripts/echo-web.py:238Unauthenticated LAN-Wide Access to Private Notes and Destructive API Operations
scripts/ai_service.py:94Server-Side Request Forgery Through User-Controlled URLs With TLS Verification Disabled
templates/index.html:313Stored Cross-Site Scripting Through Unescaped Capsule Fields
${c.content?.slice(0, 100) || ''}${c.content?.length > 100 ? '...' : ...[truncated 2982 chars]
templates/index.html:7Unpinned Remote JavaScript Executes With Full Application-Origin Privileges
Automatic Google Calendar synchronization is a sensitive external side effect that is not justified by the stated purpose of a simple note/idea capture tool. If enabled by default, the system can create or alter calendar data based on imperfect AI/Todo inference, leading to unauthorized modifications, privacy leakage, and user harm from false events or exposed personal content.
The Todo recognition rules explicitly allow direct automatic calendar sync after AI analysis and even state 'or directly sync' for implicit todos, without consistently requiring user confirmation. Because AI inference from natural language is error-prone, this can cause unauthorized event creation, leakage of sensitive note content into a third-party service, and repeated unintended actions at scale.
The documented feature set includes external sync to Notion, Google Calendar integration, Telegram messaging, AI analysis, and export functions, yet the skill is still framed as a simple idea tool with no declared permissions. This broad undeclared behavior can lead to inadvertent exfiltration of notes, todos, links, and derived analysis data to multiple external services.
The documented feature set includes external sync to Notion, Google Calendar integration, Telegram messaging, AI analysis, and export functions, yet the skill is still framed as a simple idea tool with no declared permissions. This broad undeclared behavior can lead to inadvertent exfiltration of notes, todos, links, and derived analysis data to multiple external services.
The documented feature set includes external sync to Notion, Google Calendar integration, Telegram messaging, AI analysis, and export functions, yet the skill is still framed as a simple idea tool with no declared permissions. This broad undeclared behavior can lead to inadvertent exfiltration of notes, todos, links, and derived analysis data to multiple external services.
The documented feature set includes external sync to Notion, Google Calendar integration, Telegram messaging, AI analysis, and export functions, yet the skill is still framed as a simple idea tool with no declared permissions. This broad undeclared behavior can lead to inadvertent exfiltration of notes, todos, links, and derived analysis data to multiple external services.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Google Calendar(可选)
google_calendar:
enabled: false
credentials_file: "credentials.json"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Google Calendar(可选)
google_calendar:
enabled: false
credentials_file: "credentials.json"
Creating a capsule automatically sends user-supplied title/content to external Notion and optionally Google Calendar, and also emits notification content to a queue file for later Telegram-style delivery. For a tool presented as a simple idea-capture app, this is a significant hidden capability and can cause unintended data disclosure to third-party services without clear user consent at the point of submission.
The design materially expands a simple idea-capture tool into an autonomous system that performs AI analysis and can trigger downstream external actions. This increases data processing and behavioral scope beyond the stated product purpose, creating privacy and consent risks because user-entered content may be analyzed and acted on automatically without an explicit opt-in boundary.
The design describes Google Calendar synchronization without a clear warning that the application may modify external calendar data. Lack of upfront disclosure undermines informed consent and can surprise users with persistent changes in third-party services, especially when changes are triggered automatically from free-form content.
Link analysis that fetches and extracts webpage content introduces network-driven processing beyond the expected scope of an idea capture tool. This can expose the system to untrusted remote content, unexpected data collection, privacy issues, and potentially unsafe URL handling if retrieval is not tightly validated and sandboxed.
The README describes a URL analysis feature that fetches webpage content and summarizes it with AI, but it does not disclose that remote content may be retrieved and then transmitted for processing. This creates a privacy and data-handling risk because users may submit internal, sensitive, or access-controlled URLs without understanding that page contents could leave the local environment or be processed by a third party.
The documented schema stores raw AI input_content and output_content, which are likely to contain user-entered ideas, URLs, scraped webpage text, and potentially sensitive or regulated data. Without minimization, redaction, retention, or access-control guidance, this increases the blast radius of any database compromise and may create unnecessary long-term exposure of private data.
The configuration section explicitly shows use of a third-party AI API, but the documentation does not warn that user ideas, URLs, extracted webpage content, and generated analyses may be transmitted outside the system. The dangerous part is the absence of transparency and consent around external data sharing, which can lead to unintentional disclosure of confidential or personal information.
The documented external API endpoint confirms that analysis data is sent to an outside service. While external API use is not inherently malicious, it is security-relevant here because the skill processes user ideas and webpage contents, so transmission to a third party can expose sensitive information if not clearly disclosed and controlled.
在 scripts/ai_service.py 中配置:
XIAOXIAOZHAO_CONFIG = {
"base_url": "https://api.minimaxi.com/anthropic/v1",
"api_key": "sk-xxx",
"model": "MiniMax-M2.5"
}
The README advertises third-party sync and AI features but does not clearly disclose that user notes, URLs, or extracted content may be transmitted to external services such as Notion, Google Calendar, Telegram, or an AI provider. This creates a privacy and data-handling risk because users may assume all content stays local in SQLite when in fact sensitive information could leave the device or be processed by third parties.
The AI link analysis feature is documented as analyzing submitted URLs without warning that the URL itself, fetched page content, or derived summaries may be sent to external AI or network services. This is dangerous because users may submit private, internal, or sensitive links believing analysis is local, potentially exposing confidential resources or metadata to third parties.
The skill advertises executable components with filesystem, database, and network capabilities but does not declare any explicit tool scope or permissions. This creates a transparency and containment gap: users or platforms may treat it as a simple note tool while it can read/write local data and communicate externally.
The skill promotes cloud sync and external integrations but does not clearly warn that user notes, todos, or related metadata may be transmitted to third-party platforms. In a note-taking context, that omission is significant because captured ideas may contain sensitive personal, business, or credential-like information.
Pinning Flask to 3.0.0 matches a version with published advisories, including a session/Vary: Cookie handling issue that can affect caching behavior and potentially expose one user's session-dependent content to another through shared caches. In a web-facing skill, depending on how Flask sessions and intermediaries are used, this can weaken confidentiality and correctness of authenticated or personalized responses.
Pinning requests to 2.31.0 matches multiple known advisories, including credential leakage through malicious URLs and TLS/session verification edge cases. Since this skill is described as an idea capture tool and may plausibly make outbound HTTP requests, a vulnerable HTTP client increases risk of secret disclosure, man-in-the-middle exposure, or unsafe handling of attacker-controlled URLs.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 小小爪 API 配置
XIAOXIAOZHAO_CONFIG = {
"base_url": "https://api.minimaxi.com/anthropic/v1",
"api_key": "YOUR_MINIMAX_API_KEY",
"model": "MiniMax-M2.5"
}
The manifest frames the skill as a 'simple and elegant idea capture tool', which suggests lightweight note capture and organization. This file adds two broader behaviors: sending user content to a third-party AI API for expansion and fetching arbitrary URLs for content extraction and analysis, which materially exceeds plain capture functionality.
User-provided content and fetched web content are transmitted to a third-party AI API without any visible consent, minimization, or redaction controls in this module. This can expose sensitive notes, links, or fetched page contents to an external processor, creating confidentiality and privacy risk.