Back to skill

Security audit

HF Daily Researcher V2

Security checks for vulnerabilities and agentic risk

Overview

This research-reporting skill is mostly coherent, but it reads and persists user profile and agent-memory information more broadly than its setup flow clearly asks permission for.

Review this skill before installing if your OpenClaw workspace contains sensitive USER.md, MEMORY.md, or conversation-memory content. Use it only if you are comfortable with research interests and profile details being inferred and stored in the skill config, and keep Feishu/cloud upload disabled unless you explicitly intend to publish the generated reports there.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
init.py:40
Finding

Initialization Collects Agent Memory and User Profile Data Without Explicit Consent

Content
View full analysis

Vulnerability Details

File Location: init.py:40-98
Vulnerability Type: Excessive access to identity, long-term memory, and recent conversation-memory files
Risk Level: Medium

Relevant Code:

python
def extract_user_info():
    """Extract user information from environment files."""
    info = {
        "name": None,
        "institution": None,
        "research_focus": [],
        "current_projects": []
    }

    # 1. Attempt extraction from USER.md
    user_md = _slurp(os.path.join(WORKSPACE_DIR, "USER.md"))
    if user_md:
        m = re.search(r'[Nn]ame[::\s*]+(?:\*\*)?(\S+?)(?:\*\*)?(?:\s|$)', user_md)
        if m:
            raw_name = m.group(1).strip().strip('*')
            info["name"] = re.split(r'[((]', raw_name)[0].strip()

        inst_patterns = [
            r'(?:公司|机构|institution|org)[::\s]+(\S+)',
            r'(?:就职于|在|at)\s+([\u4e00-\u9fa5A-Za-z]+)',
            r'Huawei|腾讯|字节|阿里|百度|Google|Meta|OpenAI|Microsoft|Amazon|Apple|DeepSeek'
        ]
        for pat in inst_patterns:
            m = re.search(pat, user_md)
            if m:
                info["institution"] = m.group(0) if m.lastindex is None else m.group(1)
                break

    # 2. Attempt extraction of research interests from MEMORY.md
    memory_md = _slurp(os.path.join(WORKSPACE_DIR, "MEMORY.md"))
    if memory_md:
        tech_signals = [
            ("credit assignment", "credit assignment"),
            ("agentic RL", "agentic RL"),
            ("agentic reinforcement learning", "agentic RL"),
            ("multi-scale", "multi-scale RL"),
            ("hierarchical RL", "hierarchical RL"),
            ("policy optimization", "policy optimization"),
            ("reward model", "reward modeling"),
            ("reinforcement learning", "reinforcement learning"),
        ]
        for keyword, label in tech_signals:
            if keyword.lower() in mem
...[truncated 3057 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove automatic reads of USER.md, MEMORY.md, and the memory directory from the default initialization path.
  2. Ask the user directly for the minimum required input: research topics and optional keywords.
  3. If profile import is retained, make it an explicit opt-in command such as --import-profile.
  4. Before import, list every file that will be read and every field that will be persisted.
  5. Allow users to approve identity, institution, research interests, and projects independently.
  6. Parse only a user-selected file rather than scanning recent conversation-memory files.
  7. Avoid persisting identity and institution unless they are demonstrably required.
  8. Add tests confirming that ordinary initialization performs no access outside the Skill directory.
  9. Document retention and deletion procedures for profile information written to config.json.

T09 · Insecure Skill Coding Practices

Note
Location
REPORT_STATUS.md:21
Finding

Deployment-Specific Feishu Folder Identifier Is Distributed in a Status Document

Content
View full analysis

Vulnerability Details

File Location: REPORT_STATUS.md:21-23
Vulnerability Type: Plaintext disclosure of cloud-resource metadata
Risk Level: Low

Relevant Code:

markdown
`config.json` 中的 `folder_token` 已设置为 `HF_Daily_Report` 文件夹(`Pt0LfFfDJlQil6d8zFycZZm4nkg`)。

**注意**:飞书 API 上传时需要用 `parent_node` 参数指定文件夹,而不是 `folder_token`。这个细节已更新到 skill 的上传逻辑中。

Technical Analysis

The release includes a concrete Feishu folder identifier in REPORT_STATUS.md. The active config.json does not contain this identifier: cloud upload is disabled, on-demand mode is enabled, and folder_token is null. In addition, report_manager.py does not implement a network upload operation.

The disclosed value is not demonstrated to be an API credential and does not independently grant access to the folder. It is nevertheless deployment-specific cloud metadata that is unnecessary in a distributable Skill package. Retaining it expands the information available to an attacker and may assist targeting if valid Feishu authorization is acquired through another channel.

Attack Path

  1. An attacker downloads or otherwise obtains the distributed Skill package.
  2. The attacker inspects REPORT_STATUS.md and extracts the Feishu folder identifier.
  3. The identifier reveals a specific cloud destination associated with an earlier deployment.
  4. If the attacker separately acquires valid Feishu credentials or access tokens, the folder identifier can assist targeted enumeration, upload, or deletion attempts.
  5. Without separate Feishu authorization, the reviewed evidence does not show that the identifier alone permits access.

Impact Assessment

This issue does not directly grant cloud privileges and does not prove unauthorized upload or data exfiltration. Its immediate impact is disclosure of internal cloud-resource metadata.

In combination with independently compromised Feishu credentials, the identifier could reduce the e ...[truncated 154 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove REPORT_STATUS.md and other deployment-status artifacts from distributable packages.
  2. Replace real folder identifiers in documentation with placeholders such as YOUR_FEISHU_FOLDER_ID.
  3. Store deployment-specific identifiers only in user-local configuration excluded from source control and release archives.
  4. Add automated secret and cloud-identifier scanning to the packaging workflow.
  5. Review the corresponding Feishu folder's access logs and permissions if the identifier was not intended to be public.
  6. Rotate or replace the folder identifier where operationally possible if its disclosure creates concern.
  7. Ensure future status documents do not claim that release configuration contains a token when the shipped config.json is intentionally empty.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (40)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The workflow states that reports are saved locally and uploaded to Feishu, but the description does not clearly warn that generated content may be transmitted to an external service. Because reports may include user-profile-derived research interests, internal analysis, and collected summaries, this creates a real confidentiality risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all user-facing status and operational notes exclusively in Chinese, with no indication that language selection is optional or that the skill is intentionally limited to a Chinese-speaking context. Under the language/locale policy, a forced locale without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill describes capabilities that read environment/user memory and write local files, but it does not declare any explicit tool scope or allowed-tools boundary. Missing permission declarations can cause the skill to run with broader-than-expected authority, making accidental overreach or misuse harder to audit and constrain.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Automatically extracting research interests from USER.md or MEMORY.md can process personal or sensitive user data without a strong consent boundary. Even if intended for convenience, it risks over-collection and unintended disclosure of profile data into prompts, reports, or downstream tools.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill states that reports may be uploaded to Feishu but does not warn users that generated reports can contain research focus, inferred interests, paper analyses, or other potentially sensitive content. Undisclosed outbound data handling creates a privacy and data-governance risk, especially in enterprise or confidential research settings.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Directing the workflow to save reports to Feishu without explicit consent gating creates a real risk of transmitting sensitive research summaries or user-derived interests to an external platform. In a research assistant context, those reports may include confidential topics, priorities, or strategic analysis, increasing the practical severity.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The description and operational instructions are written as Chinese-only and the sample invocation/reporting workflow assumes Chinese output, but the skill does not offer user language selection or state that it is intentionally limited to a Chinese-speaking context. That creates a natural-language policy concern under language/locale choice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill says initialization extracts research direction and keywords from USER.md / MEMORY.md, but it does not prominently warn users that personal or project context will be read and then used to drive searches and reports. This can cause unintentional collection and propagation of sensitive profile-derived data into downstream outputs.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The workflow instructs agents to output complete collected content into replies and then save reports locally and externally, while also sourcing inputs from USER.md/MEMORY.md. That creates a natural-language exfiltration path where sensitive personal or research context can be echoed into agent outputs, persisted, and potentially uploaded beyond the local environment.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill advertises a paper-tracking and research workflow, but the body also states that reports are saved locally and uploaded to Feishu. That extra data-transfer capability is security-relevant because it expands where potentially sensitive research content can go without being clearly disclosed in the top-level skill metadata.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documented Feishu API upload capability is broader than the manifest's stated purpose of paper tracking and deep research, creating capability creep. Even if intended for convenience, undisclosed external publishing increases the attack surface for exfiltration of collected papers, summaries, and user-derived research context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code file contains natural-language descriptions, docstrings, and user-facing output in Chinese, which effectively forces a specific language for users interacting with the skill. The stated policy requires flagging language or locale constraints when they are imposed without user opt-in or clear justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file is written entirely in Chinese and repeatedly mandates a specific output format in Chinese context, with no indication that the user may choose another language. This creates a natural-language policy concern because it effectively imposes a locale/language requirement without opt-in or documented regional justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire prompt mandates behavior and output format in Chinese, including headings and required response content, but does not give the user any option to select another language. This is a natural-language locale policy issue because it imposes a specific language by default without opt-in or clear justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

All role, workflow, and output instructions are presented exclusively in Chinese, and the skill does not offer the user any language or locale opt-in. Under the stated policy, forcing a specific language without user choice is a natural-language policy violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The prompt explicitly says '不要尝试用 curl 或 wget' because the sub-agent environment may not support them, then later states '必须用 curl 下载完整 HTML'. These instructions directly contradict each other and create intent ambiguity about whether shell-based fetching is allowed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill instructs the agent to use shell commands like grep against a local path under /tmp without clear safety constraints or user-facing disclosure about subprocess and local file interaction. In an agent environment, normalizing shell use can become dangerous if any part of the filename, path, or searched content is derived from untrusted input, increasing the risk of command injection or unintended access to local transient data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown skill file uses Chinese as the mandatory interaction language from the title onward, with no indication that the user may choose another language. The policy for natural-language violations applies to all file types and specifically covers forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file is entirely written as a Chinese-only instruction set and does not provide any opt-in, fallback, or user choice regarding output language. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The prompt is written entirely in Chinese and directly instructs the agent in Chinese, with no indication that the user may choose another language or that the skill is intended only for a Chinese-language context. This creates a locale/language policy issue because it imposes a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill hard-codes Chinese as the operating and output language for the sub-agent without offering user choice or inheriting the caller’s language preference. This can cause accessibility, usability, and policy-compliance issues in multilingual systems, and may lead downstream agents or users to misinterpret safety-relevant analysis if they cannot reliably read the output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire skill is written as a mandatory Chinese-language role and output format, with no indication that the user may choose another language. This is a natural-language locale policy concern because it imposes a specific language without opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is written to require Chinese-only output and does not offer user opt-in or fallback behavior. This is a genuine policy/quality weakness because it can override user language preference, reduce accessibility, and cause downstream agents or users to misunderstand results, though it is not a code-execution or data-exfiltration issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file is entirely written as a mandatory Chinese-language prompt, including role, instructions, and output template, with no indication that the user may choose another language. Under the policy for natural-language violations, forcing a specific language without opt-in is reportable unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The initialization logic reads USER.md, MEMORY.md, and recent conversation memory files from a shared workspace to infer the user's name, institution, and research interests. That is broader data collection than is necessary for basic skill initialization, and it silently repurposes unrelated personal/contextual files, creating a privacy and data-minimization issue if those files contain sensitive information.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.