Back to skill

Security audit

Taxragflow

Security checks for vulnerabilities and agentic risk

Overview

This tax Q&A skill does what it claims, but it sends potentially sensitive tax questions and a bearer API key to a configurable external service without HTTPS enforcement or clear user consent guidance.

Review this before installing in environments that handle confidential tax, payroll, customer, or enterprise finance data. Only configure a trusted HTTPS RAGFlow endpoint, use a least-privilege API key, avoid submitting personal or confidential details unless approved, and prefer pinned dependency versions or a lockfile.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Unpinned Runtime Dependencies Permit Unreviewed Package Versions

Content
View full analysis
=2.28.0 python-dotenv>=1.0.0 ``` The documented installation process in `README.md:7` executes: ```bash pip install -r requirements.txt ``` ### Technical Analysis Both dependencies use unrestricted lower-bound version constraints. A new installation can therefore retrieve any later release available from the configured package index without ensuring that it is the version reviewed during development or audit. No malicious or misspelled dependency was identified in the current package. However, the absence of exact version pins, a lock file, and package hashes makes installation results non-reproducible and leaves the project exposed to compromised future releases, package-index compromise, or unexpected security regressions. ### Attack Path 1. An attacker compromises a permitted future release of one of the declared packages or the package distribution channel. 2. A user follows the documented `pip install -r requirements.txt` procedure. 3. Because only a minimum version is specified, `pip` resolves and installs the compromised release. 4. Malicious installation hooks or imported runtime code execute with the privileges of the user running the installation or Skill. 5. The compromised dependency could access the process environment, including the RAGFlow API key, or alter outbound requests and responses. ### Impact Assessment Successful exploitation would run dependency-controlled code with the privileges of the user executing the installation or Skill. Within that context, it could read environment variables, access files available to the process, intercept tax queries and RAGFlow responses, or make unauthorized network requests. This finding does not establish that the currently named packages are malicious. ]]>
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
query_tax.py:18
Finding

Bearer API Key and Tax Queries Can Be Transmitted Over Plain HTTP

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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
Findings (19)

Tainted flow: 'url' from os.getenv (line 28, 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 · query_tax.py (reported line 45)May include surrounding context.

python
payload["conversation_id"] = conversation_id

    try:
        response = requests.post(
            url,
            headers=headers,
            json=payload,

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 18)May include surrounding context.

复制配置模板:

bash
cp .env.example .env

3. 测试运行

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · query_tax.py (reported line 73)May include surrounding context.

python
- RAGFLOW_CHAT_ID
notes: |
  使用前需要配置 RAGFlow 环境变量:
  1. 复制 .env.example 为 .env
  2. 填入你的 RAGFlow API 配置
  3. 运行 python query_tax.py 测试

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · skill.yaml (reported line 40)May include surrounding context.

yaml
- RAGFLOW_CHAT_ID
notes: |
  使用前需要配置 RAGFlow 环境变量:
  1. 复制 .env.example 为 .env
  2. 填入你的 RAGFlow API 配置
  3. 运行 python query_tax.py 测试

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README is entirely written in Chinese and presents the skill as a Chinese-language experience, but it does not state that the locale is intentionally limited or provide any user opt-in or alternative language option. This can violate language/locale policy when a skill implicitly forces a specific language without user choice.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README states that the skill will be automatically called whenever a user asks a tax-related question, but it does not define precise trigger phrases, limits, or exclusion conditions. This ambiguity can cause unintended activation for broad conversational queries that merely mention taxes.

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 send the user's tax question to an external/private knowledge-base service via query_tax.py, using configured API credentials, but does not warn that user input will be transmitted off-agent or may be logged by that service. In a tax context, user questions can easily contain sensitive corporate or personal financial data, so the lack of disclosure and handling guidance creates a real privacy and data-governance risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest requests both network and execution permissions, which are sensitive capabilities, but provides no user-facing disclosure or justification for why code execution is needed for a tax knowledge query skill. In this context, network access may be expected for a remote knowledge base, but exec.run is unusually broad and could enable command execution or abuse if the skill is compromised or behaves unexpectedly.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script transmits arbitrary user-supplied query text to an external RAGFlow service. That is the intended function of the tool, but it still creates a real data-exposure risk if users enter sensitive tax, personal, or confidential information without understanding it leaves the local environment.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This code performs external transmission of user-provided content to a remote HTTP API. Because the script appears to be for tax queries, the data sent may include sensitive personal or financial information, so the external transmission has real privacy and compliance implications even if it is functionally intended.

Content

Scanner excerpt · query_tax.py (reported line 45)May include surrounding context.

python
payload["conversation_id"] = conversation_id

    try:
        response = requests.post(
            url,
            headers=headers,
            json=payload,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The network request sends the user's query to a remote API with no user-facing notice in the execution path. In a tax-related context, users may include highly sensitive financial or personal data, making silent transmission more dangerous than in a generic low-sensitivity skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The description states the skill is a Chinese tax knowledge Q&A capability, and the examples and parameter descriptions are all presented only in Chinese. This indicates a language/locale constraint in the skill's natural-language interface without offering users a language choice or documenting why the restriction is required.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

All visible instructional content, including the title, description, trigger conditions, and examples, is presented only in Chinese. This can constitute a language policy violation when a skill forces a specific language without user opt-in or an explicit region-specific justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The natural-language strings in the docstring and CLI output are written only in Chinese, with no indication that the user can choose another language. This can violate language/locale policy when a skill forces a specific language without offering opt-in or alternatives.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

With no manifest available, the skill's intended purpose is unknown. This file implements access to external service configuration and an API key via environment variables, which is a meaningful capability beyond simple local computation and is not justified by any stated purpose in the provided context.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is specified with a lower bound only, which makes builds non-reproducible and can pull in different package versions over time. This increases supply-chain risk and makes it impossible to verify whether the installed version includes known vulnerable releases or breaking changes.

Content

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

text
requests>=2.28.0
python-dotenv>=1.0.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

The manifest references requests without pinning an exact version, and the package has multiple known advisories across its release history. Because the resolved version is unknown, the skill may install an affected release, making the dependency risk unverifiable and increasing exposure to known issues such as credential leakage or other library-specific flaws.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is not pinned to an exact version, so installations may resolve to different versions in different environments or at different times. This weakens reproducibility and can accidentally introduce vulnerable or untested releases into the skill.

Content

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

text
requests>=2.28.0
python-dotenv>=1.0.0

Unverifiable Dependency: python-dotenv has 2 known advisory(ies) (CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via ); CVE-2026-28684 (python-dotenv reads key-value pairs from a .env file and can set them as environ)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

python-dotenv is unpinned, and advisories exist for some versions of the package. Without an exact version, there is no reliable way to determine whether deployments will consume a vulnerable release, creating avoidable supply-chain uncertainty.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.