T09 · Insecure Skill Coding Practices
- Location
SKILL.md:145- Finding
Full Desktop Screenshot Transmitted to a Hard-Coded Endpoint over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This desktop automation skill is coherent, but it recommends sending full desktop screenshots to a hard-coded plaintext HTTP vision endpoint before performing GUI actions.
Review before installing. Use this only in an environment where desktop screenshots and automated clicks are acceptable. Replace the hard-coded HTTP vision endpoint with a user-configured trusted HTTPS or local model, crop or redact screenshots, confirm actions before clicking, delete temporary screenshots, and install dependencies in an isolated pinned environment.
SKILL.md:145Full Desktop Screenshot Transmitted to a Hard-Coded Endpoint over Plaintext HTTP
SKILL.md:21Unpinned Third-Party Dependencies Installed from a Mutable Package Index
The example code captures the full desktop and transmits it to a remote HTTP API, which constitutes direct exfiltration of potentially sensitive on-screen information. This is especially risky because the stated purpose is desktop automation, not off-host data sharing, and users may run the snippet without understanding that their screen contents leave the machine.
The skill demonstrates transmitting screenshots to a vision endpoint without warning that desktop contents may include highly sensitive personal or corporate data. Omitting this privacy notice makes unsafe use more likely and increases the chance of unintentional disclosure.
The file consistently uses Chinese for the description, headings, warnings, and example prompts, which effectively forces a single language for use of the skill. There is no indication that the skill is region-specific or that users may choose another language, so this creates a natural-language locale policy concern.
The documentation broadens a local desktop automation skill into a workflow that can send screenshots to a remote vision service. Desktop screenshots routinely contain sensitive data such as emails, credentials, tokens, documents, and chat content, so this scope expansion materially changes the trust boundary and data exposure profile.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
pip3 install pyautogui pygetwindow pymsgbox opencv-python-headless pillow pytesseract
sudo apt-get install -y xdotool scrot tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-chi-tra
## 核心功能
This duplicate finding points to the same behavior: a network request to a remote service as part of screenshot analysis. Because the skill controls the user's real desktop, any outbound transfer of screen contents is particularly dangerous and should be treated as sensitive data exfiltration.
用 JSON 格式:{"action": "click", "x": 450, "y": 320, "description": "打卡按钮"}
"""
response = requests.post(
"http://10.6.207.56:8000/v1/chat/completions",
headers={"Authorization": "Bearer VLLM_API_KEY"},
json={
This duplicate finding points to the same behavior: a network request to a remote service as part of screenshot analysis. Because the skill controls the user's real desktop, any outbound transfer of screen contents is particularly dangerous and should be treated as sensitive data exfiltration.
用 JSON 格式:{"action": "click", "x": 450, "y": 320, "description": "打卡按钮"}
"""
response = requests.post(
"http://10.6.207.56:8000/v1/chat/completions",
headers={"Authorization": "Bearer VLLM_API_KEY"},
json={
The example posts data to an internal-network IP address, which introduces additional risk because internal services are often assumed to be more trusted and less monitored. Even though this is not classic attacker-controlled SSRF, documenting direct access to an internal endpoint can facilitate unintended data leakage into a private network service and bypass normal external review controls.
用 JSON 格式:{"action": "click", "x": 450, "y": 320, "description": "打卡按钮"}
"""
response = requests.post(
"http://10.6.207.56:8000/v1/chat/completions",
headers={"Authorization": "Bearer VLLM_API_KEY"},
json={