Back to skill

Security audit

get笔记 英文名版

Security checks for vulnerabilities and agentic risk

Overview

The skill is a mostly coherent Getnote integration, but it handles private notes and remote account changes with under-scoped authorization and confirmation safeguards.

Review this before installing in any shared agent, group chat, or workspace. Configure an owner identity, use the least-privileged Getnote API scopes available, and require clear confirmation before deleting notes, changing tags or knowledge-base membership, following live content, uploading images, or creating public share links.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:11
Finding
Optional Owner Validation Permits Unauthorized Access to Private Notes## Vulnerability Details **File Location**: `SKILL.md`, lines 11 and 43–45 **Vulnerability Type**: Missing mandatory requester authorization **Risk Level**: High **Complete vulnerable configuration and instruction snippets**: ```markdown metadata: {"openclaw": {"requires": {}, "optionalEnv": ["GETNOTE_API_KEY", "GETNOTE_CLIENT_ID", "GETNOTE_OWNER_ID"], "baseUrl": "https://openapi.biji.com", "homepage": "https://biji.com"}} ``` ```markdown ### 🔒 安全规则 - 笔记数据属于用户隐私,不在群聊中主动展示笔记内容 - 若配置了 `GETNOTE_OWNER_ID`,检查 sender_id 是否匹配;不匹配时回复「抱歉,笔记是私密的,我无法操作」 - API 返回 `error.reason: "not_member"` 或错误码 `10201` 时,引导开通会员:https://www.biji.com/checkout?product_alias=6AydVpYeKl ``` ### Technical Analysis The Skill treats `GETNOTE_OWNER_ID` as optional and requires sender identity validation only if that variable is configured. Consequently, when Getnote API credentials are present but the owner identifier is absent, the instructions do not require any authorization check before executing operations on private notes. Authentication to `openapi.biji.com` establishes the API credential holder's authority but does not establish that the person sending a chat request is the credential owner. In a shared Agent or group-chat deployment, this creates a confused-deputy condition: another participant can ask the Agent to use the owner's stored credentials. The instruction not to proactively display notes in group chats is not an effective authorization control. It does not prohibit responding to explicit requests to list, search, read, share, modify, tag, or delete notes. ### Attack Path 1. The account owner configures `GETNOTE_API_KEY` and `GETNOTE_CLIENT_ID` without configuring the optional `GETNOTE_OWNER_ID`. 2. The Agent is exposed to a group chat, shared workspace, or another environment containing an untrusted requester. 3. The requester issues a supported command such as `/note search`, `/note list`, a request to view a note, or an ins ...[truncated 1014 chars]
Remediation
## Remediation Suggestions 1. Move `GETNOTE_OWNER_ID` from optional configuration to mandatory configuration for every deployment that can receive requests from more than one identity. 2. Fail closed before every Getnote operation if the Agent cannot obtain both a trusted sender identity and the configured owner identity. 3. Compare a platform-authenticated, canonical sender identifier against `GETNOTE_OWNER_ID`; never rely on a display name or user-supplied identifier. 4. Deny all note operations in group contexts unless the authenticated sender exactly matches the configured owner. 5. Perform the authorization check centrally before routing to save, search, list, knowledge-base, tag, configuration, sharing, update, or delete functionality. 6. Require explicit owner confirmation immediately before high-impact operations such as public sharing, destructive deletion, or bulk modification. 7. Request the minimum API scopes needed for enabled features and separate read-only credentials from write or deletion capabilities where supported. 8. Add tests covering missing owner configuration, mismatched senders, group-chat requests, malformed sender identifiers, and destructive operations. 9. Avoid logging API credentials, private note content, temporary media URLs, or other sensitive response data during authorization failures.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (11)

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
All user-facing activation examples and operational instructions are presented only in Chinese, and the skill does not indicate that the user may interact in other languages or opt into Chinese-specific behavior. Under the policy, a skill should not impose a specific language or locale unless it is explicitly optional or clearly justified as region-specific.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Directing users to a commercial checkout URL from within a notes skill introduces an undeclared commercial action path that is not necessary for core note storage/search operations. If triggered automatically, it can manipulate users into off-platform purchasing flows and conditions them to follow links unrelated to the requested task.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The documented functionality extends beyond private note management into public sharing and membership-related behaviors, which broadens the skill’s effective scope beyond what users may reasonably expect from the manifest. This can lead to unintended disclosure of private notes through sharing-link creation and creates a mismatch between declared purpose and actual capabilities.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
Blogger subscriptions and live-content follow features materially expand the skill from personal note management into third-party content tracking and social/follow actions. This scope expansion increases the chance of unintended external interactions and user surprise, especially where follow/subscription side effects are not clearly disclosed in the manifest.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger phrases are overly broad and map common conversational words like '记/存/保存/看看/查笔记' to privileged note actions, increasing the risk of accidental invocation. In a privacy-sensitive skill, ambiguous routing can cause unintended storage, retrieval, or modification of personal notes without sufficiently clear user intent.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
This markdown file includes curl examples that send an API key and upload a local image file to remote services, but the surrounding documentation does not warn users that running these commands transmits local data and credentials off-system. For markdown files, safety-relevant behaviors affecting privacy or system data should be disclosed explicitly.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. 获取上传凭证
curl 'https://openapi.biji.com/open/api/v1/resource/image/upload_token?mime_type=jpg&count=1' \
  -H 'X-Client-ID: {client_id}' \
  -H 'Authorization: {api_key}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill documentation includes an API to generate a public share URL for a note, which expands the capability from private note management into external disclosure. In a personal notes skill, that is privacy-sensitive because notes may contain transcripts, links, attachments, or other personal knowledge-base content, and exposing them via a public URL can leak sensitive data if the agent invokes sharing without a clearly scoped user request and confirmation.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The documentation describes creating a public share link but does not include an explicit warning that this makes note content accessible outside the user’s private notebook. Given this skill handles personal notes and potentially sensitive original content, missing a privacy warning increases the risk of accidental disclosure through routine agent assistance.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This markdown file presents all instructions, warnings, and user-facing example messages exclusively in Chinese. The stated policy flags language or locale constraints when a skill forces a specific language without user opt-in, and this file does not offer any language selection or justification for being Chinese-only.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The documentation instructs semantic search over a user's private notes via a remote API but does not warn that the user's query and returned note snippets are transmitted to and processed by an external service. In a note-taking skill, this can expose sensitive personal or business information and prevents users from making an informed privacy decision before invoking the feature.

Static analysis

No suspicious patterns detected.