Back to skill

Security audit

抖音违禁词检测

Security checks for vulnerabilities and agentic risk

Overview

The text checker fits its purpose, but its automatic payment setup and recharge instructions lack clear approval controls, and its privacy claims contradict saved output files.

Before installing, require approval before payment-tool installation and each recharge, verify the recipient and amount, and use a reviewed, pinned payment package. Submitted text goes to RedFox, and revised copies remain on disk despite the privacy claim. Supply the intended account key explicitly and avoid confidential content unless you accept that processing and storage.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
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
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (15)

Tainted flow: 'headers' from os.getenv (line 243, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/check_sensitive_words.py (reported line 253)May include surrounding context.

python
last_error = None
        for attempt in range(3):  # 最多3次(1次原始 + 2次重试)
            try:
                response = requests.post(
                    API_URL,
                    json=payload,
                    headers=headers,

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The core detection and highlighting behavior matches the description, but two expressly promised capabilities are absent from this code chunk. Payment-related instructions printed by the script are not executable payment integration and do not establish that automatic recharge or query resumption occurs. File access, webpage retrieval, API authentication, and remote checking are supporting implementation details rather than unrelated capabilities.

Content

No source excerpt is available for this finding.

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · SKILL.md (reported line 92)May include surrounding context.

新注册用户将获赠免费积分,可立即开始使用 API 服务 4. 注册登录后,在个人中心获取 API Key,格式为 ak_xxxxxxxx

配置 API Key

将 API Key 配置为环境变量 REDFOX_API_KEY:

方式一:临时设置(当前终端会话有效)

bash
export REDFOX_API_KEY=ak_xxxxxxxx

方式二:永久设置(推荐)

bash
# Bash 用户
echo 'export REDFOX_API_KEY=ak_xxxxxxxx' >> ~/.bashrc
source ~/.bashrc

# Zsh 用户
echo 'export REDFOX_API_KEY=ak_xxxxxxxx' >> ~/.zshrc
source ~/.zshrc
变量名必填说明
REDFOX_API_KEY是RedFox API 访问密钥,格式 ak_xxxxxxxx,脚本自动通过 X-API-KEY 请求头附加

💳 积分不足充值(支付宝接管)

当脚本以退出码 3 结束、并在 stdout 打印 ===PAYMENT_REQUIRED_JSON_START=== 区块时,表示当前 API Key 积分不足(接口 code=3210,兼容 3201)。响应体 data 内�

A routine content-checking request is escalated into an automatic paid recharge without an explicit purchase-approval gate.

High
Category
Prompt Injection
Confidence
93% confidence
Finding

The visible instructions turn an insufficient-credit API response into payment initiation and submission without requiring explicit approval of the purchase, amount, and recipient. A request to check text is not authorization to buy credits, and reliance on response-provided payment details introduces a trust boundary that could enable unwanted charges or payment misdirection. The referenced payment workflow was not supplied, so downstream safeguards or wallet confirmation requirements cannot be verified.

Content

No source excerpt is available for this finding.

Tool output redirects the agent from text checking into an unapproved payment workflow.

High
Category
Prompt Injection
Confidence
97% confidence
Finding

On an insufficient-credit response, the script emits imperative instructions directing the agent to invoke payment tools using a server-supplied payment URL, amount, and merchant description without a transaction-specific approval step. Automatic recharge is advertised in the metadata, which makes this less suggestive of concealed malicious intent, but it does not establish informed approval of a particular recipient or amount; the script itself does not execute payment.

Content

No source excerpt is available for this finding.

The API-backed checking workflow lacks a privacy warning about sending submitted content to an external service.

Medium
Category
Output Handling
Confidence
86% confidence
Finding

The README describes an API-backed checker accepting pasted text, documents, images, and web-page content without explicitly warning that submitted text may be transmitted to an external provider. Users could consequently disclose unpublished marketing material, confidential documents, or personal information without understanding the data flow; the API-key security guidance does not address this content-privacy risk. This is a disclosure and consent gap, not evidence of malicious exfiltration, and the actual transmission behavior cannot be verified from this README alone.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, network.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

The privacy assurance that copy is not stored locally contradicts mandatory local-file creation.

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The privacy answer says copy is not stored locally, but the mandatory workflow writes the optimized copy to a local text file. Users checking confidential or unpublished material could therefore leave persistent copies in a shared or backed-up working directory despite the privacy assurance; HTTPS does not address that retention risk.

Content

No source excerpt is available for this finding.

The workflow automatically installs a missing payment CLI without warning the user about local system changes.

Medium
Category
Output Handling
Confidence
97% confidence
Finding

The workflow directs the agent to install missing payment software automatically, without first disclosing the local changes or obtaining explicit approval. A text-checking request does not itself authorize installing software, and the payment-related context makes undisclosed executable installation more sensitive; this does not establish that payment itself occurs without user approval.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx -y @alipay/agent-payment'.

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The command uses @latest, allowing npx -y to download and execute a changing package version without an interactive installation prompt. A compromised package release could execute code with the agent's local privileges, access available credentials, or tamper with payment handling; this is a CLI supply-chain issue rather than an MCP-server-specific issue.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx -y @alipay/agent-payment'.

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

The workflow does not warn users that their submitted or extracted text is sent to an external detection API.

Medium
Category
Output Handling
Confidence
94% confidence
Finding

The workflow directs the agent to submit user-provided or extracted text to an external detection API without first disclosing that transfer or obtaining informed authorization. Uploaded documents, image text, and webpage content may contain confidential or personal information, so a routine compliance check can unintentionally disclose sensitive material to a third party. External processing is consistent with the skill's purpose, but the API-key configuration and results disclaimer do not adequately inform users about where their content goes.

Content

No source excerpt is available for this finding.

The skill searches personal shell startup files for credentials beyond the user-selected content.

Medium
Category
Excessive Agency
Confidence
89% confidence
Finding

When no environment credential is supplied, the script silently searches personal shell startup files and uses any matching credential for remote requests. Although limited to a service-specific variable and apparently intended as a convenience, this crosses the user's explicit credential-provisioning boundary and can consume credits or use an account the user did not authorize for this invocation.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/check_sensitive_words.py (reported line 253)May include surrounding context.

python
last_error = None
        for attempt in range(3):  # 最多3次(1次原始 + 2次重试)
            try:
                response = requests.post(
                    API_URL,
                    json=payload,
                    headers=headers,

Tainted flow: 'payload' from requests.get (line 237, network input) → requests.post (network output)

Medium
Category
Data Flow
Confidence
65% confidence
Finding

Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Content

Scanner excerpt · scripts/check_sensitive_words.py (reported line 253)May include surrounding context.

python
last_error = None
        for attempt in range(3):  # 最多3次(1次原始 + 2次重试)
            try:
                response = requests.post(
                    API_URL,
                    json=payload,
                    headers=headers,