T06 · System Persistence
- Location
SKILL.md:1066- Finding
Default recurring report delivery creates cross-session persistence without prior opt-in
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a market-reporting tool, but it defaults to recurring external report pushes, handles a Tushare token unsafely, and can generate current-looking financial reports from hard-coded claims.
Review this before installing. Use it only if you explicitly want recurring financial reports and can disable or approve each push destination. Do not store a valuable Tushare token for this version unless the endpoint is changed to HTTPS and the credential flow is clearly documented. Treat generated reports as unverified because parts of the renderer are hard-coded and may look current even when data is missing.
SKILL.md:1066Default recurring report delivery creates cross-session persistence without prior opt-in
SKILL.md:95Stored Tushare API token is transmitted over unencrypted HTTP
SKILL.md:172Setup instructions inject an undisclosed referral registration link
render_report.py:89Dynamically dated financial reports contain hard-coded and potentially stale market claims
README.md:211Runtime dependencies are installed without exact version or integrity pinning
This mismatch is more serious because the finding indicates hardcoded narratives and fabricated-looking fallback content despite claims that missing data is left blank. In a finance-reporting skill, undeclared synthesis of pseudo-factual market content can mislead users, propagate false information, and mask the absence of real data sources.
This mismatch is more serious because the finding indicates hardcoded narratives and fabricated-looking fallback content despite claims that missing data is left blank. In a finance-reporting skill, undeclared synthesis of pseudo-factual market content can mislead users, propagate false information, and mask the absence of real data sources.
Automatic scheduling, file creation, and message pushing are enabled by default without prominent upfront consent for ongoing side effects. This can lead to silent persistence and repeated outbound data transmission, which is especially risky in a skill that reads previous files and writes reports autonomously.
The documentation claims the token is not uploaded to any cloud, but the code necessarily transmits it over the network to the Tushare API for authentication. This is a misleading security assurance around credential handling, and users may provide secrets under false assumptions about where they travel.
The renderer hardcodes market narratives, fallback figures, and interpretive statements even when data may be missing, contradicting the skill contract that missing fields should be left blank and not fabricated. In a finance context, this can mislead users into acting on invented or stale content presented as current analysis, creating integrity and trust risks.
This section provides action-oriented trading guidance such as sectors to watch, low-level follow-up opportunities, and conditions for participation, which exceeds the stated scope and moves into recommendation behavior. In a market-review skill, such advice can drive user financial decisions without suitability controls, disclosures, or authorization, making the context more dangerous.
The README frames the skill as optimized for WeChat mobile reading and the report format examples are centered on Chinese-market conventions and Chinese-language presentation. There is no explicit opt-in or user-selectable language/locale behavior, which can violate language/locale policy when a skill effectively forces a specific presentation style by default.
The README states that daily auto-push is enabled immediately after installation and that reports are sent to linked messaging channels such as WeChat or WhatsApp. That creates default data transmission to third-party destinations without explicit opt-in, consent, or a clear privacy warning about what content will be sent and where it will be stored, which is a legitimate privacy and safety issue.
The skill documents and embeds capabilities for local file reads/writes, network access, and shell/Python execution but does not declare an explicit tool scope or permission boundary. In an agent environment, this increases the chance of over-broad execution, accidental misuse, or abuse through prompt-triggered invocation because the runtime has more power than the manifest advertises.
The trigger phrases are broad and overlap with normal conversation about markets, creating a meaningful risk of accidental invocation. Because this skill can perform network access, file creation, automation, and outbound delivery, unintended triggering is more dangerous than it would be for a read-only helper.
The skill is presented as a reporting tool, but it also performs default auto-push to external messaging endpoints. That is a broader action surface than passive report generation and can exfiltrate generated or propagated content to third-party channels without a fresh per-use confirmation.
Default scheduled automation plus message delivery extends the skill from on-demand analysis into persistent autonomous operation. In an agent setting, this increases blast radius by creating recurring file writes, repeated network access, and repeated outbound delivery without requiring contemporaneous user intent.
The automation reads previously generated report files and reuses their contents in later outputs that may be pushed to external messaging endpoints. This creates a natural-language propagation channel where tainted, incorrect, or unexpectedly sensitive content can persist across runs and be redistributed automatically.
The file defines user-facing control phrases and first-run setup text only in Chinese, and multiple report templates are written as fixed Chinese output formats. This creates a language policy issue because the skill effectively assumes a specific language rather than offering the user a language or locale choice.
The manifest and earlier sections describe a strict fallback chain of Tushare Pro, then AKShare, then search-engine retrieval, with missing data left blank. Later sections introduce direct Sina Finance scraping, BaoStock fallback, JSON intermediate files, template/render scripts, and hardcoded fallback behavior, which materially expands operational behavior beyond the advertised 3-tier architecture.
The module docstring states this is a "盘后复盘数据获取脚本" and the implementation only fetches end-of-day style market data such as closing indexes,涨停池,北向资金,市场情绪, and sector flows. There is no code for pre-market briefing, intraday snapshot generation, or the declared third-tier search-engine fallback; this materially under-implements the broader manifest description.
The module docstring and all user-facing messages are explicitly in Chinese, indicating a fixed language/locale behavior. There is no indication that the user can opt into another language or that the Chinese-only constraint is documented as a justified region-specific requirement.
The section header and log messages say "降级搜索" when sector flow fetching fails, implying a real fallback to search. In practice, the code just catches the exception, sets sector_ok = False, and proceeds without any search request, so the inline documentation actively misstates behavior.
This code file contains natural-language strings exclusively in Chinese, including the top-level description and runtime messages, with no indication that the skill is China-region-specific or that users can opt into the language. Under the policy rule, forcing a specific language without user choice is a natural-language policy violation.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
# 先删除旧文件(如果有)
if JSON_OUT.exists():
JSON_OUT.unlink()
result = subprocess.run(
[sys.executable, str(FETCH_SCRIPT)],
capture_output=True,
text=True,
The script writes fetch_data.json to disk via JSON_OUT.write_text(), which is a file-modifying operation. Although the script prints after the write succeeds, there is no prior warning, confirmation prompt, or comment/docstring near the write indicating this side effect to the user.
The entire report template is written in Chinese and does not mention any option to select another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is clearly justified.