Back to skill

Security audit

Weflow Group Summarizer

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it says, but it can expose private WeChat data over the local network without authentication and handles raw chat/media content with weak safeguards.

Review before installing. Use this only if you intentionally want an agent to read WeChat group messages and images for summaries. Do not run the proxy on an untrusted network as shipped; bind it to localhost or add authentication, route limits, and firewall restrictions. Treat group messages and images as untrusted input, and pin dependencies in an isolated environment.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
weflow-proxy/main.go:11
Finding

Unauthenticated reverse proxy exposes private WeFlow data to the network

Content
View full analysis
0 { for _, ip := range addrs { fmt.Printf("WeFlow API address: http://%s:%s\n", ip, "5032") } } else { fmt.Println("warning: no LAN addresses detected") } if err := http.ListenAndServe(listenAddr, handler); err != nil { log.Fatal(err) } } ``` ```go rp := &httputil.ReverseProxy{ Rewrite: func(r *httputil.ProxyRequest) { ctx := context.WithValue(r.Out.Context(), incomingHostKey, r.In.Host) r.Out = r.Out.WithContext(ctx) r.SetURL(target) }, } ``` The deployment instructions additionally tell the user to permit the proxy through Windows Firewall and then access it through the machine's LAN address. ### Technical Analysis The proxy listens on `0.0.0.0:5032`, making it reachable through every IPv4 network interface. It forwards arbitrary incoming HTTP requests to the loopback-only WeFlow service at `127.0.0.1:5031`. There is no authentication, authorization, client allowlist, route allowlist, or transport encryption. Consequently, the proxy removes the access boundary provided by the upstream service's loopback binding. The documented API includes endpoints for sessions, contacts, messages, and media, all of which may contain private WeChat information. Because the proxy accepts plain HTTP, requests and returned chat data are also vulnerable to observation or modification by an attacker positioned on the network path. ### Attack Path 1. The user starts `weflow-proxy` and allows TCP port 5032 through the local firewall as instructed. 2. An attacker on a rea ...[truncated 887 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
scripts/fetch_messages.py:97
Finding

Untrusted group messages can inject instructions into the summarization agent

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/fetch_messages.py:42
Finding

Unvalidated media URLs permit server-side request forgery and unsafe downloads

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Python dependencies are installed without version or integrity constraints

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied behavior includes implementing and using an HTTP reverse proxy with media URL rewriting, which materially exceeds a simple summarization skill and is not clearly represented in the description. That mismatch is dangerous because users may invoke the skill expecting summarization while it also enables network exposure and content transformation of API responses.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied behavior includes implementing and using an HTTP reverse proxy with media URL rewriting, which materially exceeds a simple summarization skill and is not clearly represented in the description. That mismatch is dangerous because users may invoke the skill expecting summarization while it also enables network exposure and content transformation of API responses.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied behavior includes implementing and using an HTTP reverse proxy with media URL rewriting, which materially exceeds a simple summarization skill and is not clearly represented in the description. That mismatch is dangerous because users may invoke the skill expecting summarization while it also enables network exposure and content transformation of API responses.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The supplied behavior includes implementing and using an HTTP reverse proxy with media URL rewriting, which materially exceeds a simple summarization skill and is not clearly represented in the description. That mismatch is dangerous because users may invoke the skill expecting summarization while it also enables network exposure and content transformation of API responses.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs the agent to expose full recent group-chat contents and separately surface tracked members' messages in its response flow. This creates a substantial privacy and data-leak risk because sensitive group communications and targeted individuals' speech may be disclosed beyond the original chat environment or retained in logs.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill instructs the agent to read and write local files and access network services, but the manifest does not declare any explicit tool scope or permissions. That makes the skill's capabilities insufficiently constrained and increases the chance of unintended file access, configuration modification, or network interaction during execution.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The activation text is broad enough that the skill could trigger for general requests about monitoring groups or API setup, even when the user did not intend file modification, network exposure, or heartbeat processing. Overbroad triggering increases the risk of the agent invoking sensitive instructions in the wrong context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation describes APIs that export chat messages, contacts, and media files from WeChat and makes them directly retrievable over a local HTTP service, but it does not present any explicit privacy, consent, retention, or access-control warning. Even though the service binds to 127.0.0.1, local applications, browser-based localhost access, or malware on the same host could abuse it to exfiltrate sensitive conversations and contact data.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The docstring says the script converts a WeFlow group member Excel export to a wxid->nickname JSON mapping, which implies a pure conversion task. In reality, the update_yaml function can overwrite an existing YAML file and append new group entries, which contradicts the limited intent communicated by the documentation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and CLI description present the tool as converting a WeFlow member Excel export into a wxid-to-nickname JSON mapping. However, when the optional --yaml flag is used, the script also edits a weflow-groups.yaml file in place, changing or appending group configuration entries. That is a materially broader behavior than simple format conversion.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest frames the skill as monitoring WeChat groups, setting up WeFlow API access, and triggering group summarization. In addition to fetching message text, the code retrieves media URLs and writes image files to disk, which is a broader data-handling behavior than summarization itself and is not mentioned in the skill description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script downloads remote media and stores it locally without any explicit user-facing disclosure, consent control, or retention policy. In a group-monitoring context this can silently increase collection of sensitive content, creating privacy and data-handling risk if operators or users expect only transient summarization of messages.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Several printed strings shown to the user are hard-coded in Chinese, including the main summary banner and status messages. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The proxy is exposed on 0.0.0.0:5032, making the local WeFlow API reachable from other hosts on the network rather than only localhost. In the context of a WeChat group summarization skill, this materially expands the attack surface and can expose internal API functionality to unauthorized LAN clients if no authentication or access controls exist downstream.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Listening on all interfaces without explicit security messaging or opt-in can cause users to unknowingly expose the proxy to their local network. If the proxied API performs sensitive actions or exposes chat data, any reachable host on the LAN may be able to interact with it, depending on downstream protections.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The instructions tell the agent to copy and later modify a YAML configuration file, but they do not clearly warn the user that local files will be created or changed. Silent or under-disclosed file modification can surprise users and may overwrite important configuration data if paths are chosen incorrectly.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The heartbeat workflow instructs the agent to read local image files referenced in chat output without a clear warning or explicit consent step. Reading local files based on message-generated paths can expose sensitive filesystem content, especially if paths are unexpected, attacker-controlled, or point outside the intended media directory.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill documentation is presented only in Chinese, with no indication that language selection is optional or that the skill is intentionally limited to a Chinese-speaking audience. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency pyyaml is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and making it impossible to guarantee that a non-vulnerable release is used. In a skill that may process external messaging or workflow data, this increases supply-chain and patch-management risk even though the manifest alone does not prove active exploitation.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
pyyaml
openpyxl

Unverifiable Dependency: pyyaml has 8 known advisory(ies) (CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
92% confidence
Finding

pyyaml has multiple historical advisories, including deserialization-related issues, and the manifest does not pin a version, so there is no assurance that deployments avoid affected releases. In the context of a WeChat-group summarization skill that may ingest external content or configuration, unsafe or outdated YAML handling could become materially dangerous if untrusted YAML is ever parsed.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency openpyxl is unpinned, which permits uncontrolled version selection during installation and makes the environment non-reproducible. Because this skill may handle spreadsheet-related data paths, leaving the version unspecified can expose deployments to accidental installation of outdated or vulnerable releases.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
pyyaml
openpyxl

Unverifiable Dependency: openpyxl has 2 known advisory(ies) (CVE-2017-5992 (Improper Restriction of XML External Entity Reference in Openpyxl); CVE-2017-5992 (Openpyxl 2.4.1 resolves external entities by default, which allows remote attack)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

openpyxl has known historical advisories, including XXE-related issues, and without a pinned version the installed package may be vulnerable. This is more concerning if the skill ever imports user-supplied spreadsheets or exported reporting artifacts, because malformed workbook content could trigger parser-level attacks in affected versions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code performs a file write that can modify or overwrite the provided YAML file, but there is no confirmation prompt or explicit warning immediately before the write. While the script prints messages for add/update outcomes and its purpose implies editing the file, the actual overwrite operation itself lacks a direct user disclosure at the point of execution.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The code updates last_local_id and writes the modified configuration back to the provided YAML file. The manifest description does not mention local state mutation or config-file rewriting, so the implementation does more than a purely monitoring/summarization-oriented description suggests.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Beyond starting a proxy, the program discovers local network interfaces and prints all reachable LAN addresses for accessing the API. Exposing and advertising host network reachability is an operational convenience, but it is not an obvious requirement of monitoring WeChat groups or producing summaries.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.