Back to skill

Security audit

mar-computer-vision-expert

Security checks for vulnerabilities and agentic risk

Overview

This computer-vision skill is mostly coherent, but it steers VLM image analysis through a third-party API without enough privacy controls or consent guidance for sensitive images.

Review this skill carefully before installing. Use it only when you are comfortable sending selected images, prompts, and derived visual content to SkillBoss/HeyBoss infrastructure. Avoid confidential, regulated, biometric, customer, credential, screen-capture, or proprietary images unless your organization has approved that provider and retention model; prefer local vision models or redaction for sensitive work.

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
Findings (1)

other

Warning
Location
SKILL.md:58
Finding

Uncontrolled Transmission of Potentially Sensitive Images to an External Service

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 58–93
Vulnerability Type: External disclosure of potentially sensitive image data
Risk Level: Medium

python
import requests, os, base64

SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
API_BASE = "https://api.heybossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(
        f"{API_BASE}/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,
        timeout=60,
    )
    return r.json()

# Visual Question Answering (VQA) — encode image and send via chat
with open("image.jpg", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode()

result = pilot({
    "type": "chat",
    "inputs": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}},
                    {"type": "text", "text": "Describe the objects in this image and their positions."}
                ]
            }
        ]
    },
    "prefer": "quality"
})
answer = result["result"]["choices"][0]["message"]["content"]

Technical Analysis

The documented integration reads the complete contents of a local image, Base64-encodes the bytes, and sends them to the third-party endpoint https://api.heybossai.com/v1/pilot. Base64 is only a transport encoding and provides no confidentiality. Although HTTPS protects data in transit, the remote service receives the full image and accompanying prompt in plaintext at the application layer.

External VLM processing is consistent with the skill's declared visual-question-answering functionality, and the destination is explicitly documented rather than hidden. Nevertheless, the example provides no controls for user consent, data classification, redaction, metadata removal, file- ...[truncated 2373 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require explicit user confirmation before transmitting any local image to an external provider, clearly naming the destination and the data that will be sent.
  2. Default to local vision models when images are confidential or when external processing has not been approved.
  3. Add a data-classification gate that blocks images containing regulated, biometric, medical, credential, customer, or proprietary information unless an approved exception exists.
  4. Minimize submitted data by cropping to the required region, reducing resolution, redacting sensitive areas, and stripping EXIF and other metadata before upload.
  5. Document the provider's retention, training-use, subprocessors, residency, deletion, and privacy policies.
  6. Keep the API base URL fixed or enforce a strict HTTPS hostname allowlist. Disable redirects or verify every redirect destination before forwarding authorization headers.
  7. Use a narrowly scoped, revocable API credential dedicated to this skill. Never log the bearer token or complete request body.
  8. Add request and response hardening, including file-type and size limits, r.raise_for_status(), response-size limits, schema validation, and safe error handling.
  9. Clearly state that Base64 is not encryption and must not be treated as a security or anonymization measure.
  10. Add audit logging that records user authorization and destination without recording image contents, prompts containing sensitive data, or credentials.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (6)

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The skill advertises that all VLM calls are automatically routed through an external endpoint, which means image and text inputs may leave the local environment by design. In this context, automatic routing increases risk because users may not know which downstream model/provider receives their data or what privacy guarantees apply.

Content

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

md
- **Unified Logic**: One model for detection, segmentation, and tracking with 2x accuracy over SAM 2.

### 3. Vision Language Models (VLMs)
- **Visual Grounding**: Leveraging VLMs (e.g., Florence-2, PaliGemma 2, Qwen2-VL) via SkillBoss API Hub (`type: chat` with vision inputs) for semantic scene understanding. All VLM calls are automatically routed to the best available model through `https://api.heybossai.com/v1/pilot`.
- **Visual Question Answering (VQA)**: Extracting structured data from visual inputs through conversational reasoning, powered by SkillBoss API Hub's unified `chat` capability.

### 4. Geometry & Reconstruction

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly directs users to route vision-language tasks through a third-party API and does not warn that images and derived scene content may be transmitted off-device. In a computer-vision skill, users are especially likely to process sensitive photos, industrial imagery, IDs, screens, or surveillance captures, so omission of privacy and data-handling notice creates a real exfiltration and compliance risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Hardcoding the external API base URL in sample integration code normalizes outbound transmission of vision inputs to a remote service. By itself this is not malicious, but in a vision skill it materially increases exposure because the transferred payloads can contain sensitive visual information, metadata, or extracted structured content.

Content

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

md
import requests, os, base64

SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
API_BASE = "https://api.heybossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The documented code performs an outbound HTTP POST to a third-party endpoint with user-supplied content and an authorization token. While external API use is expected for hosted VLM services, this is still a genuine security-relevant behavior because it enables transmission of potentially sensitive images and prompts to infrastructure outside the user's trust boundary.

Content

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

md
API_BASE = "https://api.heybossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(
        f"{API_BASE}/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example code reads a local image file, base64-encodes it, and uploads it to a remote API without any surrounding warning or safeguards. That is dangerous because users may copy-paste the sample into workflows involving confidential images, unknowingly causing external disclosure of raw visual data and any sensitive information visible in the image.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
76% confidence
Finding

Publishing the external endpoint itself is not inherently unsafe, but in combination with the surrounding guidance it reinforces a workflow that transmits user images and analysis requests to a third party without corresponding risk notice. The line is lower severity than the actual POST example, yet still contributes to undisclosed external data flow in the documented skill behavior.

Content

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

text

**Environment variable**: `SKILLBOSS_API_KEY`
**Endpoint**: `https://api.heybossai.com/v1/pilot`

## Anti-Patterns