T01 · Skill Instruction Hijacking
- Location
SKILL.md:138- Finding
Mandatory VIP Promotional Content Hijacks Generated Output
- Content
View full analysis
`, JS dans `- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real dashboard builder, but its deployment guidance can expose live services publicly and persist processes with root-level infrastructure access.
Review this skill before installing or using it. Treat the deployment commands as administrator actions: replace the hardcoded VPS details, avoid root SSH, do not expose the API publicly without authentication, restrict CORS to approved origins, pin dependencies, and only enable Telegram uploads or VIP payment links after explicit user approval.
SKILL.md:138Mandatory VIP Promotional Content Hijacks Generated Output
DEPLOYMENT.md:125Container Startup Modification Creates Cross-Session Persistence
DEPLOYMENT.md:30Root-Level Deployment and Public Port Mapping Violate Least Privilege
DEPLOYMENT.md:197Wildcard CORS Permits Unrestricted Cross-Origin API Reads
SKILL.md:71Unpinned CDN and Python Dependencies Create Supply-Chain Risk
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
'cd /data/.openclaw/workspace && python3 api/dashboard_api.py 2>/workspace/logs/api.log &'
curl http://72.62.30.28:8766/health
The deployment guide goes beyond generating dashboard files and instructs users to modify container startup behavior, expose services, and manage infrastructure components. In a web-dashboard skill context, these broad administration steps increase attack surface and enable persistent externally reachable services without any hardening guidance.
These instructions explicitly open ports and publish direct infrastructure endpoints, including a public IP and service ports, without warning about exposure risks. That can lead users to unintentionally expose internal dashboards and APIs to the internet, increasing the chance of reconnaissance, abuse, and data leakage.
The Cloudflare tunnel setup makes both dashboard and API publicly reachable, including guidance for a permanent named tunnel, but provides no warning about public accessibility, authentication, or data sensitivity. In this skill's context of live dashboards and performance pages, that creates a direct path to exposing portfolio or signal data to the public internet.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# 1. Créer le tunnel (une seule fois)
cloudflared tunnel create wesley-dashboard
# 2. Configurer ~/.cloudflared/config.yml
tunnel: <ID-DU-TUNNEL>
The documented CORS fix enables CORS(app, origins=['*']), which allows any website to make browser requests to the dashboard API. If the API serves sensitive trading or account data, this broad cross-origin access can expose data to untrusted origins and make later authenticated endpoints unsafe by default.
The guide encourages broad sharing of the public dashboard URL across social platforms without discussing that the linked service may expose live data and infrastructure-backed functionality. This normalizes public distribution of an internet-facing service that may not be hardened or intended for unrestricted access.
The file's instructional natural language consistently forces a specific language/locale, with no indication that users may opt into another language or that the skill is intentionally limited to a French-speaking audience. Under the stated policy, fixed language behavior without opt-in is a natural-language policy concern.
The description is explicitly framed as a French-language skill ("Skill de création...") and all operational instructions are written in French, but there is no indication that language is user-selectable or that the locale restriction is required for a region-specific use case. Under the policy, forcing a specific language without opt-in is a natural-language policy concern.
The activation criteria are extremely broad and instruct the agent to 'always use this skill' for many common web-related requests involving Wesley. Over-broad routing can cause the skill to activate in contexts where its extra permissions, network behavior, or deployment guidance are unnecessary, increasing exposure to unintended external calls and privileged actions.
The skill requests TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID despite its primary stated function being dashboard and static web page generation. Introducing bot credentials expands the trust boundary and enables external data transmission or message/media access unrelated to the minimum functionality, increasing the chance of credential misuse or unintended exfiltration.
The skill describes Telegram photo uploads and use of bot credentials, but does not clearly warn the user that images and related metadata may be transmitted to an external third-party service. This undermines informed consent and can lead to privacy leakage, especially if personal or sensitive media is uploaded automatically.
The deployment section includes direct SCP to a public IP, Docker exec on a remote container, and a Cloudflare tunnel URL, which goes beyond code generation into infrastructure access and remote command execution. If followed automatically or by an over-permissioned agent, this could modify production systems, expose services publicly, or leak operational details.
All operational guidance in the file is written in French, and there is no indication that this locale is optional or required for a region-specific purpose. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy concern.
This markdown file includes a UI control and JavaScript that captures the full page and automatically downloads a PNG to the user's device. While the code is user-initiated via a button, the surrounding documentation does not explicitly warn that clicking it will create and save a local file containing the rendered page content.