Back to skill

Security audit

summarizer

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent YouTube summarization purpose, but it uses unsafe shell execution, unverified remote code installation, third-party transcript upload, and persistent transcript storage that need review before use.

Install only if you are comfortable with full YouTube transcripts being sent to SkillBoss, saved locally in plaintext, and potentially sent as Telegram attachments. Before production use, require a pinned and verified dependency, strict video ID validation, safer temporary-file handling, explicit user consent for uploads and attachments, and clear transcript retention controls.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:39
Finding

Unvalidated video ID is interpolated into a shell command

Content
View full analysis
/tmp/yt-transcript.json ``` Replace `VIDEO_ID` with the extracted ID. Read the output from `/tmp/yt-transcript.json`. ``` ### Technical Analysis The Skill instructs the agent to extract attacker-controlled text from a URL and substitute it directly into a command executed by a shell. Although the documentation describes a direct video ID as 11 characters, it does not require validation against YouTube's actual identifier alphabet, such as `^[A-Za-z0-9_-]{11}$`. The value is embedded inside a shell double-quoted argument. Shell expansions such as command substitution can therefore be interpreted before Node.js receives the script. The value is also inserted into a JavaScript single-quoted string, creating a second injection boundary. The command is run from `/root/clawd`, which strongly suggests that it may execute with elevated privileges. Direct string interpolation is not necessary for transcript retrieval and violates least-privilege and safe command-construction principles. ### Attack Path 1. An attacker sends the agent a crafted YouTube-looking URL whose `v` parameter contains shell or JavaScript metacharacters. 2. The Skill detects the URL and treats the parameter as `VIDEO_ID`. 3. Because t ...[truncated 1184 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:46
Finding

Predictable temporary transcript path permits symlink-based file overwrite

Content
View full analysis
/tmp/yt-transcript.json ``` ```markdown Replace `VIDEO_ID` with the extracted ID. Read the output from `/tmp/yt-transcript.json`. ``` ### Technical Analysis The Skill writes transcript data to the fixed, globally predictable path `/tmp/yt-transcript.json` using ordinary shell redirection. On typical Unix systems, `/tmp` is writable by all local users. Shell redirection follows symbolic links and opens the destination with truncation. An unprivileged local attacker can pre-create `/tmp/yt-transcript.json` as a symbolic link to a file writable by the Skill's account. When the Skill runs, the linked file is truncated and overwritten with transcript output. The fixed filename also creates cross-run race conditions. Concurrent Skill invocations can overwrite or read each other's transcripts, causing confidentiality failures, summary corruption, or delivery of one user's transcript to another user. ### Attack Path 1. A local attacker predicts the documented filename. 2. The attacker creates `/tmp/yt-transcript.json` as a symbolic link to a target file. 3. A privileged agent invokes the Skill. 4. The shell follows the symbolic link while processing the redirection. 5. The target file is truncated and populated with command output. 6. Depending on the selected target, this can cause denial of service, configuration corruption, or security-control degradation. For the concurrency variant, an attacker or second user repeatedly replaces the file between transcript generation and parsing, causing attacker-selected JSON or another us ...[truncated 424 chars]
Remediation
View remediation

other

Warning
Location
SKILL.md:70
Finding

Full transcripts are automatically disclosed to an external summarization service

Content
View full analysis
str: r = requests.post( "https://api.skillboss.co/v1/pilot", headers={ "Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json" }, json={ "type": "chat", "inputs": { "messages": [ { "role": "system", "content": "You are a video summarization expert. Generate a structured summary with: Main Thesis (1-2 sentences), Key Insights (3-5 bullets), Notable Points (2-4 bullets), and Takeaway (1 actionable sentence)." }, { "role": "user", "content": f"Summarize this YouTube video transcript.\n\nTitle: {title}\nChannel: {author}\n\nTranscript:\n{transcript_text}" } ] }, "prefer": "balanced" }, timeout=60, ) result = r.json() return result["result"]["choices"][0]["message"]["content"] ``` ### Technical Analysis The complete transcript, title, and channel are transmitted to `api.skillboss.co`. The workflow does not request per-operation consent, show the user what will be transmitted, provide a local-only mode, redact sensitive information, or describe retention and model-training policies. Using an external model can be a legitimate implementation choice, and the Skill metadata mentions SkillBoss. Nevertheless, automatic transmission of the entire transcript exceeds minimum data access when a local summarizer, transcript excerpting, or explicit opt-in could satisfy the ...[truncated 1768 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
package.json:27
Finding

Mutable remote dependency is cloned and executed without integrity verification

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:138
Finding

Full transcripts are persistently stored in plaintext regardless of delivery need

Content
View full analysis
Remediation
View remediation
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 (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill sends the entire transcript, title, and channel metadata to an external API for summarization without notifying the user or obtaining consent. This creates an off-box data-sharing path that may violate user expectations, privacy requirements, or organizational policy, especially when transcripts contain sensitive or regulated content.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The duplicated finding points to the same external POST request that sends transcript data to SkillBoss. In the skill context, this is a real data egress concern because the request includes full transcript text and is presented as a standard workflow step rather than an optional, disclosed action.

Content

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

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def generate_summary(transcript_text: str, title: str, author: str) -> str:
    r = requests.post(
        "https://api.skillboss.co/v1/pilot",
        headers={
            "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The duplicated finding points to the same external POST request that sends transcript data to SkillBoss. In the skill context, this is a real data egress concern because the request includes full transcript text and is presented as a standard workflow step rather than an optional, disclosed action.

Content

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

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def generate_summary(transcript_text: str, title: str, author: str) -> str:
    r = requests.post(
        "https://api.skillboss.co/v1/pilot",
        headers={
            "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The hardcoded external domain identifies a specific third-party destination for transcript data, confirming that content leaves the local system. In context, the danger is not the URL alone but the implied trust boundary crossing with no notice, consent, or contractual/privacy controls described in the skill.

Content

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

md
def generate_summary(transcript_text: str, title: str, author: str) -> str:
    r = requests.post(
        "https://api.skillboss.co/v1/pilot",
        headers={
            "Authorization": f"Bearer {SKILLBOSS_API_KEY}",
            "Content-Type": "application/json"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs saving full transcripts to disk and sending them to Telegram without any user consent flow, retention limit, or warning that the full content will be stored and transmitted. Even if YouTube content is often public, transcripts can still include sensitive spoken content, and forwarding/storing them increases privacy, compliance, and data-handling risk beyond a simple on-screen summary.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is designed to persist and forward the full transcript, not just a summary, which materially expands the data disclosure surface. This is more dangerous in context because the transcript is human-readable natural-language content that may include sensitive statements, and the instructions normalize sending it to external destinations like Telegram.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The sample output explicitly says transcripts are saved locally and even shows concrete filesystem paths, but it does not indicate any consent flow, retention policy, or warning about storing potentially sensitive user-requested content. In a transcript-generating skill, this can create an unexpected privacy and data-retention risk, especially if transcripts contain confidential business, personal, or regulated information and remain on disk longer than users expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest explicitly states that the skill will automatically fetch YouTube transcripts and deliver full transcripts to messaging platforms, but it provides no disclosure, consent, or privacy boundary information. This creates a real privacy and data-handling risk because users may not understand that external content is being retrieved, processed, and redistributed to third-party destinations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The instructions explicitly say to try lang: 'en' as a fallback when the requested language is unavailable. This imposes a language choice without stating that the user can approve or select an alternative, which conflicts with the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.