Back to skill

Security audit

Novelty Validator

Security checks for vulnerabilities and agentic risk

Overview

The skill has a plausible novelty-checking purpose, but it combines sensitive meeting data, participant identity lookup, recording controls, default local retention, and third-party API transmission without enough scoping or consent.

Install only if you are comfortable granting the agent access to authorized meeting transcripts and related research ideas, and avoid using remote embeddings for confidential or unpublished work unless your organization has approved that provider and endpoint. Do not use participant attribution, contact lookup, or meeting recording controls unless every affected participant has authorized that use, and disable or clear the default local method-tag retention for sensitive projects.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
references/vector_recall_impl.py:55
Finding

Confidential Research Content Is Transmitted to an External Embedding Service Without an Explicit Consent Gate

Content
View full analysis

Vulnerability Details

File Location: references/vector_recall_impl.py, lines 55–65
Vulnerability Type: Sensitive-data disclosure to a third-party service
Risk Level: Medium

Vulnerable Code

python
def _embed_one(self, text):
    text = (text or "").strip()
    if not text:
        return None
    if text in self._cache:
        return self._cache[text]
    body = json.dumps({"model": self.model, "input": [text]}).encode("utf-8")
    req = urllib.request.Request(
        self.url, data=body,
        headers={"Authorization": "Bearer " + self.key, "Content-Type": "application/json"},
        method="POST",
    )

Technical Analysis

The _embed_one() method serializes its entire text argument and sends it to the configured SiliconFlow embedding endpoint. In the documented workflow, this text can contain an extracted claim from a private meeting or a candidate document's title and abstract.

Research claims may contain unpublished intellectual property, confidential project details, participant information, or other sensitive meeting content. Although the skill documentation mentions the external embedding tier, the audited implementation contains no explicit consent check, redaction stage, data-classification control, or local-only default before transmission. The documented meeting-access authorization only governs access to Tencent Meeting data and does not independently establish consent to disclose that data to another processor.

Attack Path

  1. A user authorizes access to a private Tencent Meeting transcript or provides a confidential research idea directly.
  2. The skill extracts the discussion into a structured research claim.
  3. The claim is passed to VectorRefiner.refine().
  4. refine() calls _embed_one() for the claim and each candidate title and abstract.
  5. _embed_one() sends the complete text to the external embedding service.
  6. Confidential content ...[truncated 683 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit, informed opt-in before enabling remote embeddings for meeting-derived or user-confidential content.
  2. Clearly disclose which fields are transmitted, the service provider, processing purpose, retention policy, and applicable data jurisdiction.
  3. Default to the local Tier C implementation or a local embedding model when consent is absent.
  4. Add a preprocessing stage that removes participant names, email addresses, identifiers, and unrelated confidential context.
  5. Provide a strict local-only mode that prevents all outbound transmission.
  6. Add an implementation-level policy parameter, such as allow_remote_processing=False, rather than relying only on documentation.
  7. Log only transmission metadata needed for diagnostics; do not log claims, transcripts, abstracts, authorization headers, or raw API responses.

T09 · Insecure Skill Coding Practices

Warning
Location
references/vector_recall_impl.py:44
Finding

Configurable Embedding Endpoint Can Exfiltrate the API Key and Processed Content

Content
View full analysis

Vulnerability Details

File Location: references/vector_recall_impl.py, lines 44–49 and 57–64
Vulnerability Type: Unvalidated credential-bearing outbound endpoint
Risk Level: Medium

Vulnerable Code

python
class VectorRefiner:
    def __init__(self, model=None, url=None, key=None):
        self.key = key or _load_key()
        self.model = model or os.environ.get("SILICONFLOW_EMBED_MODEL") or "BAAI/bge-m3"
        self.url = url or os.environ.get("SILICONFLOW_EMBED_URL") or "https://api.siliconflow.cn/v1/embeddings"
        self.available = bool(self.key)
        self._cache = {}
python
body = json.dumps({"model": self.model, "input": [text]}).encode("utf-8")
req = urllib.request.Request(
    self.url, data=body,
    headers={"Authorization": "Bearer " + self.key, "Content-Type": "application/json"},
    method="POST",
)
for attempt in range(3):
    try:
        with urllib.request.urlopen(req, timeout=30) as r:
            d = json.loads(r.read().decode())

Technical Analysis

The destination URL can be supplied through the constructor or the SILICONFLOW_EMBED_URL environment variable. The code then unconditionally attaches the SiliconFlow bearer credential and the processed text to that destination.

No validation requires HTTPS, verifies the expected hostname and path, restricts ports, or prevents cross-origin redirects. Consequently, any actor capable of influencing the process environment or the constructor arguments can redirect credential-bearing requests to an arbitrary server.

This is a credential-forwarding flaw rather than a remote-code-execution issue. Exploitation requires prior control over runtime configuration or a calling component that passes attacker-controlled endpoint values.

Attack Path

  1. An attacker or compromised launcher gains the ability to set SILICONFLOW_EMBED_URL, or an unsafe caller passes an attacker-controlled url ar ...[truncated 1097 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove arbitrary endpoint configurability unless it is operationally required.
  2. Enforce HTTPS and validate the normalized destination against an exact allowlist such as api.siliconflow.cn and /v1/embeddings.
  3. Reject embedded credentials, unexpected ports, IP-literal hosts, nonstandard schemes, and URLs containing user-information components.
  4. Disable automatic redirects or validate every redirect destination before forwarding the authorization header.
  5. Attach the bearer credential only after validating the final request origin.
  6. Separate credentials by endpoint and scope them to the minimum required API permissions and quotas.
  7. Prefer a trusted configuration file with restrictive permissions over an unrestricted environment override in sensitive deployments.
  8. Rotate the API key if endpoint manipulation or credential disclosure is suspected.
  9. Add tests confirming rejection of plaintext HTTP, alternate hosts, cross-origin redirects, and malformed URLs.
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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (15)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill advertises participant tracing and identity lookup around meeting data without a clear privacy warning or strong minimization language. Because meeting transcripts and attendee identity data are highly sensitive, combining them without explicit notice and consent materially raises privacy, confidentiality, and misuse risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill includes creating meetings and controlling recording even though its stated function is transcript-based novelty checking. Those capabilities materially exceed the minimum needed purpose and could be abused to initiate recording or manage meetings, exposing sensitive live discussions and creating a broader surveillance/control surface than necessary.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill describes network access, gateway authentication, Tencent Meeting CLI calls, and use of environment/configured secrets, but it declares no explicit tool scope or permissions boundary. In practice this creates an overprivileged skill surface where an agent may use sensitive capabilities without a clear least-privilege contract, increasing the chance of unintended data access or exfiltration.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill claims it only stores method-name tags locally, but the surrounding documentation frames this as automatic post-use retention for self-iteration, creating ambiguity about what is actually persisted. When retention behavior is described inconsistently, users cannot meaningfully assess privacy impact, and implementers may overcollect richer usage traces than intended.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Automatic local retention is enabled by default, while the warning is not sufficiently prominent given that the skill handles sensitive meeting-derived ideas and research directions. Even if only tags are stored, default-on persistence for brainstorming and academic meeting contexts can leak strategic information about methods under discussion and erode user expectations of confidentiality.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Participant identity lookup and attribution are not necessary for novelty validation, yet the skill instructs the agent to trace attendees and identify idea proposers. This expands collection and processing of personal data beyond the stated purpose, creating avoidable privacy risk and making it easier to expose meeting participant identities in outputs or logs.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The instructions to trace participants and report who proposed an idea create a natural-language data exposure path: the model may surface sensitive identities or attribute unannounced research ideas to specific individuals. In collaborative academic settings, this can disclose personal information and sensitive authorship or priority details beyond the scope of the task.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructions are written entirely in Chinese and direct the extraction workflow in Chinese without indicating that users may choose another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file is written as a Chinese-first skill specification, with the operational guidance and user-facing instruction templates presented only in Chinese. There is no indication that users may choose another language or locale, which can violate a language/locale policy when a skill is expected to be language-neutral unless explicitly scoped.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The workflow specifies 'CN 主引擎' as the primary engine and the document is operationally written in Chinese, but it does not state that users may choose another language or locale. Under the policy rule, forcing a specific language or locale without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

The description states the workflow operates after keyword retrieval in "CN api_path", which reads as a fixed language/locale assumption for the skill's operation. The file does not offer an opt-in choice of language or explain a justified region-specific constraint, so this is a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

The skill instructs sending the user's claim and candidate title+desc content to an external embedding API (api.siliconflow.cn). In the context of meeting transcripts, brainstorming notes, or research ideas, this can expose confidential or unpublished information to a third party, creating data leakage and compliance risk even if the API key itself is handled carefully.

Content

Scanner excerpt · references/vector_recall.md (reported line 16)May include surrounding context.

md
| **B · 网关语义端点** | **v1.7 复测稳定,已恢复为主引擎之一** | 复用 global-biblio-base `/search/global` 的语义排序信号(`endpoint:/search/global`+`rule` 正确格式) | 中(跨语言语义信号可用) |
| **C · 本地词重叠(离线兜底)** | 始终可用,无需密钥 | 对 claim 的「方法/问题」关键 token 与候选标题+摘要做归一化命中率:`sim = 命中token数 / claim总token数` | 基础,可捕获术语级邻近 |

> **Tier A 真机实现**:见 `references/vector_recall_impl.py`——读 `SILICONFLOW_API_KEY`(env 优先 → 本技能 `config.json` 兜底),调 `https://api.siliconflow.cn/v1/embeddings`(模型 BAAI/bge-m3),对 claim 与候选 `title+desc` 做余弦,输出降序重排 + `near_miss` 标记。仅标准库(urllib/json/math),无第三方依赖,便于嵌入自动化。
>
> **发布安全**:打包发布时 `config.json`(含密钥)**不进发布包**,避免 key 泄露;使用者安装后自行 `export SILICONFLOW_API_KEY=...` 或在本机 `config.json` 填入自有 key 即可启用 A 档。
>

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The hardcoded default endpoint points to an external embedding service, and the module is designed to transmit user-derived text there whenever a key is present. Given the skill's purpose—checking novelty of meeting or research ideas—this can leak sensitive, unpublished concepts and summaries to a third party if used without informed consent and governance.

Content

Scanner excerpt · references/vector_recall_impl.py (reported line 48)May include surrounding context.

python
def __init__(self, model=None, url=None, key=None):
        self.key = key or _load_key()
        self.model = model or os.environ.get("SILICONFLOW_EMBED_MODEL") or "BAAI/bge-m3"
        self.url = url or os.environ.get("SILICONFLOW_EMBED_URL") or "https://api.siliconflow.cn/v1/embeddings"
        self.available = bool(self.key)
        self._cache = {}

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code sends claim_text and candidate title/summary text to a third-party embedding API, which can expose sensitive meeting, research, or collaboration content outside the local environment. In a novelty-check skill, these inputs may contain unpublished ideas or confidential academic discussions, making silent external transmission a meaningful privacy and IP-leakage risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The natural-language instructions and usage documentation are entirely in Chinese, which effectively imposes a specific language on operators without any opt-in or stated regional constraint. Under the language/locale policy, this is a natural-language policy concern unless the locale restriction is explicitly justified or alternatives are offered.

Content

No source excerpt is available for this finding.