Back to skill

Security audit

media

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed SkillBoss media-integration template, but it encourages sending and sometimes publicly hosting potentially sensitive media without enough privacy safeguards.

Review carefully before installing. Use this skill only for media you are allowed to send to SkillBoss, avoid secrets and regulated or confidential content unless approved, prefer private short-lived signed URLs over public links, and delete or revoke hosted media after processing.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:571
Finding

Public Hosting Recommendation May Expose Sensitive Media

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:571-575
Vulnerability Type: Insecure handling of sensitive media
Risk Level: Medium

markdown
### 10.4 Key limits and engineering tips
- Supports common formats: WAV/MP3/AIFF/AAC/OGG/FLAC.
- If the audio file is large, upload it to a publicly accessible URL first and pass the URL instead of Base64.
- For very long audio, consider splitting into segments.

Technical Analysis

The skill recommends placing large audio files at a publicly accessible URL before submitting that URL to the SkillBoss API Hub. Audio processed by this skill may include meeting recordings, speech, personal information, confidential business discussions, or other sensitive content.

Public accessibility is not required to implement remote media processing. A private object protected by a short-lived signed URL or an authenticated upload mechanism would provide the service with temporary access without exposing the object to the general public.

The recommendation contains no requirement for authentication, expiration, unguessable object names, access logging, encryption controls, or deletion after processing. It also does not warn that public objects may be discovered through leaked URLs, server logs, browser history, analytics, referrer headers, storage-bucket listings, or accidental indexing.

Attack Path

  1. A user follows the skill's recommendation when processing a large, sensitive recording.
  2. The user uploads the recording to storage configured for unrestricted public access.
  3. The public URL is passed to the SkillBoss API Hub and may also appear in local logs, request telemetry, shell history, or service-side records.
  4. An unauthorized party obtains or discovers the URL through a leak, exposed bucket listing, predictable object name, indexing, or shared logs.
  5. The unauthorized party downloads, retains, or redistributes the recording without possessing application ...[truncated 846 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the recommendation to make media publicly accessible.
  2. Prefer direct authenticated uploads to the media-processing service where supported.
  3. When URL-based retrieval is necessary, require private object storage and a short-lived, capability-limited signed URL.
  4. Configure signed URLs with the minimum practical lifetime, read-only access, and access restricted to one object.
  5. Use cryptographically random object names and disable bucket listing and public anonymous access.
  6. Delete uploaded media and revoke its signed URL immediately after processing.
  7. Warn users that prompts and media leave the local environment and are processed by a third party.
  8. Require explicit confirmation before transmitting recordings likely to contain confidential, personal, or regulated information.
  9. Document applicable retention, deletion, logging, and subprocessor policies.
  10. Add safeguards against URL disclosure in application logs, analytics, exception messages, and shell history.

A safer replacement would be:

markdown
- For large audio files, keep the object private and provide a short-lived,
  read-only signed URL if the service supports URL retrieval. Do not expose
  confidential media through an unrestricted public URL. Delete the object
  or revoke access immediately after processing.
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 (12)

External Transmission

Medium
Category
Data Exfiltration
Confidence
85% confidence
Finding

The skill declares that all multimodal operations are routed through an external SkillBoss API Hub, meaning user-supplied media and prompts are intended to leave the local environment. This is a genuine security concern because the skill enables broad outbound transmission of potentially sensitive content to a non-local service.

Content

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

md
## 1. Goals and scope

This Skill consolidates six multimodal media capabilities into reusable workflows and implementation templates, all routed through SkillBoss API Hub (`https://api.skillbossai.com/v1/pilot`):

- Image generation (text-to-image, image editing, multi-turn iteration)
- Image understanding (caption/VQA/classification/comparison, multi-image prompts)

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The shared helper function performs authenticated POST requests to an external API for arbitrary request bodies, making outbound transfer a core behavior of the skill. Because the body can contain text, images, audio, or video, the function can transmit sensitive user data off-platform with minimal guardrails.

Content

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

js
const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This image-generation example uses the same external API helper and then retrieves generated content from returned URLs, creating both outbound data sharing and follow-on network access. In practice, prompts and any embedded metadata may be exposed to the third-party service, and fetched URLs introduce additional trust on remote content.

Content

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

md
import * as fs from "node:fs";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The REST template shows direct authenticated submission of user-controlled JSON to the external SkillBoss endpoint, which is a concrete example of third-party data transmission. This is risky in environments where users may unknowingly send proprietary or personal data, and where API keys may be reused broadly.

Content

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

REST (curl) minimal template

bash
curl -s -X POST "https://api.skillbossai.com/v1/pilot" \
  -H "Authorization: Bearer $SKILLBOSS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The REST template shows direct authenticated submission of user-controlled JSON to the external SkillBoss endpoint, which is a concrete example of third-party data transmission. This is risky in environments where users may unknowingly send proprietary or personal data, and where API keys may be reused broadly.

Content

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

REST (curl) minimal template

bash
curl -s -X POST "https://api.skillbossai.com/v1/pilot" \
  -H "Authorization: Bearer $SKILLBOSS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The image-editing workflow reads a local file, base64-encodes it, and sends the full image contents to an external API. This is more dangerous than prompt-only transmission because it encourages direct exfiltration of local files, which may contain confidential visual information, embedded metadata, or regulated personal data.

Content

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

md
import * as fs from "node:fs";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The inline image-understanding example reads a local image and embeds it into a chat request sent to the external endpoint, directly transmitting local file contents for remote analysis. Because the workflow is framed as general-purpose understanding, users may use it on highly sensitive images without realizing the privacy and compliance implications.

Content

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

md
import * as fs from "node:fs";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

6.3 Image URL reference minimal template

js
const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The video-generation template submits user prompts to an external API and then downloads the resulting video from a returned URL. This creates third-party transmission plus remote-content retrieval risk, especially if prompts contain sensitive project details or if returned URLs are blindly trusted.

Content

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

md
import * as fs from "node:fs";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The video-understanding example sends a remote video reference and user instructions to an external chat endpoint, which may still disclose sensitive viewing targets, internal links, or analysis objectives. Even when the media is URL-based, the skill normalizes external processing of potentially sensitive content without guardrails.

Content

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

8.2 Video URL minimal template

js
const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The TTS example transmits arbitrary text to an external service and then downloads the resulting audio, which can expose confidential text content or proprietary scripts. While less severe than local-file uploads, it still creates a real external data-sharing channel governed by third-party handling.

Content

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

md
import * as fs from "node:fs";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The audio transcription example reads a local audio file, base64-encodes it, and uploads it to the external API for transcription. This is a significant data-exposure risk because audio often contains personal data, confidential meetings, credentials spoken aloud, or legally protected communications.

Content

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

md
import { Buffer } from "node:buffer";

const SKILLBOSS_API_KEY = process.env.SKILLBOSS_API_KEY;
const API_BASE = "https://api.skillbossai.com/v1";

async function pilot(body) {
  const r = await fetch(`${API_BASE}/pilot`, {

Static analysis

No suspicious patterns detected.