Back to skill

Security audit

ZeeLin Auto-PPT

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its PPT-generation purpose, but its cleanup scripts can broadly process Desktop PDFs and its file handling needs review before installation.

Review before installing. Use this only with non-confidential NotebookLM content, avoid enabling YouTube source collection for sensitive topics, and do not run --all-desktop unless you have checked every PDF on your Desktop. Prefer explicit PDF filenames for merging/post-processing and choose simple output filenames without path characters.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/create_ppt.sh:11
Finding

Unrestricted output filename permits path traversal and arbitrary file overwrite

Content
View full analysis
/dev/null ``` ### Technical Analysis The second positional argument is accepted as an output filename and concatenated directly with `$HOME/Desktop/`. The script does not: - Reduce the supplied value to a filename with `basename`. - Reject `..` path components. - Reject directory separators. - Canonicalize and validate the resulting destination. - Verify that the resolved destination remains inside the Desktop directory. - Prevent replacement of an existing file. Consequently, an input such as `../../some/writable/file.pdf` produces a destination containing traversal components. If the `openclaw browser download` implementation resolves these components normally, the downloaded file can be written outside the intended Desktop directory. This issue does not provide additional operating-system privileges. File access remains limited to locations writable by the account running the Skill. ### Attack Path 1. An attacker influences the output filename passed as the script's second argument. 2. The attacker supplies a traversal value such as `../../target.pdf`. 3. The script constructs `$HOME/Desktop/../../target.pdf` without validation. 4. The browser CLI resolves the traversal components when writing the download. 5. An existing file at the resolved location may be overwritten, or a new file may be created there, subject to the invoking user's permissions. ### Impact Assessment Successful exploitation can write or overwrite files outside `~/Desktop`. The scope includes files writable by the user executing the Skill ...[truncated 208 chars]
Remediation
View remediation
&2 exit 1 fi DESKTOP_PATH="$(cd "$HOME/Desktop" && pwd -P)" OUTPUT_PATH="$DESKTOP_PATH/$OUTPUT_NAME" if [ -e "$OUTPUT_PATH" ]; then echo "ERROR: Output file already exists: $OUTPUT_PATH" >&2 exit 1 fi ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/create_ppt.sh:22
Finding

Predictable shared temporary file permits symlink-based file modification

Content
View full analysis
"$YT_LINKS_FILE" return 0 fi ``` The same path is also overwritten by later shell redirections and Python `Path.write_text()` operations. ### Technical Analysis The script uses a fixed directory and filename under a potentially shared temporary directory. It does not: - Create a unique per-execution directory. - Set restrictive permissions. - Verify ownership of an existing directory. - Reject symbolic links. - Open the file with exclusive-creation or no-follow semantics. - Remove temporary data after execution. On a multi-user system, another local process can pre-create `/tmp/auto-ppt/youtube-links.txt` as a symbolic link to a file writable by the victim account. When the Skill performs shell redirection or writes normalized URLs to the path, it follows the link and modifies the target. The exploit requires local access sufficient to create entries in the shared temporary location before the Skill runs. It does not bypass the victim user's normal filesystem permissions. ### Attack Path 1. A local attacker predicts the fixed path `/tmp/auto-ppt/youtube-links.txt`. 2. The attacker creates `/tmp/auto-ppt` or waits for it to exist. 3. The attacker places a symbolic link named `youtube-links.txt` pointing to a target file writable by the Skill's user. 4. The victim invokes `create_ppt.sh`. 5. The script truncates or rewrites the predictable path. 6. The operating system follows the symbolic link, modifying the attacker's selected target. A second local process can also overwrite the temporary URL list during execution, causing cross- ...[truncated 394 chars]
Remediation
View remediation
"$YT_LINKS_FILE" ``` Additional hardening should include: 1. Fail if `mktemp` cannot create the directory securely. 2. Avoid reusing a caller-controlled temporary directory without ownership and permission checks. 3. Verify that files are regular files and not symbolic links before modifying them. 4. Where available, create files using exclusive and no-follow semantics. 5. Keep temporary files readable and writable only by the executing user. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/postprocess_ppt_outputs.py:111
Finding

All-Desktop processing can incorporate unrelated confidential PDFs into generated outputs

Content
View full analysis
List[Path]: if all_desktop: pdfs = sorted(DESKTOP.glob("*.pdf"), key=lambda p: p.name.lower()) ``` The Skill documentation recommends invoking this broad mode: ```bash python3 /Users/youke/.openclaw/workspace/skills/auto-ppt/scripts/postprocess_ppt_outputs.py --all-desktop --output-name final_deck ``` ### Technical Analysis When `--all-desktop` is enabled, the script selects every PDF directly under the user's Desktop. It does not limit selection to files generated by the current Skill execution, files matching a run-specific prefix, or files explicitly approved by the user. The selected documents are then: - Read in full. - Merged into a new PDF. - Subjected to text extraction. - Copied into a cleaned PDF. - Converted into text-based PPTX slides. No network exfiltration was identified in this post-processing script. However, the access scope exceeds the files necessary for the declared operation and can silently aggregate unrelated personal or confidential PDFs into outputs that the user may subsequently distribute. The generated output PDFs can themselves be selected during later `--all-desktop` executions, further increasing the risk of unintended inclusion or duplicated content. ### Attack Path 1. The user's Desktop contains Skill-generated PDFs and unrelated confidential PDFs. 2. The user or Agent follows the documented recommendation and runs the script with `--all-desktop`. 3. The script selects every Desktop PDF without prompting for confirmation. 4. Unrelated pages are copied into the merged and cleaned PDF outputs. 5. Text extracted from those pages is used to create PPTX slides. 6. The user shares the resulting presentati ...[truncated 559 chars]
Remediation
View remediation
List[Path]: if all_desktop: raise SystemExit( "Broad Desktop processing is disabled. " "Provide explicit PDF paths or a run manifest." ) pdfs = [] for raw in paths: p = Path(raw).expanduser().resolve() if p.is_file() and p.suffix.lower() == ".pdf": pdfs.append(p) if not pdfs: raise SystemExit("No explicitly approved input PDFs found.") return pdfs ``` ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The description presents a simple NotebookLM-based PPT generation workflow, but the instructions also direct external YouTube searching, source ingestion, environment-variable-controlled behavior, and broad script execution. This mismatch prevents informed consent and can lead users to authorize data collection, web access, or automation they did not reasonably expect.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description presents a simple NotebookLM-based PPT generation workflow, but the instructions also direct external YouTube searching, source ingestion, environment-variable-controlled behavior, and broad script execution. This mismatch prevents informed consent and can lead users to authorize data collection, web access, or automation they did not reasonably expect.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The description presents a simple NotebookLM-based PPT generation workflow, but the instructions also direct external YouTube searching, source ingestion, environment-variable-controlled behavior, and broad script execution. This mismatch prevents informed consent and can lead users to authorize data collection, web access, or automation they did not reasonably expect.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill instructs the agent to use exec, write temporary files, read local references, access Desktop files, and interact with external web services, but it declares no explicit tool scope or permissions. This weakens least-privilege controls and can let a broadly-capable runtime perform sensitive local file and network actions without transparent restriction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The style prompt states 'All Chinese text must be perfectly rendered, clear and readable,' which imposes a specific language/locale expectation in the skill instructions. The file does not offer users an explicit language choice or opt-in around this constraint, so it can conflict with language/locale policy requirements.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow instructs the agent to search YouTube and paste links into NotebookLM as sources without warning that the user’s topic, research focus, and selected source material may be transmitted to external services. This creates a privacy and data-governance risk, especially if the topic is sensitive, proprietary, or tied to confidential work.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow expands beyond simple PPT generation into web searching, importing third-party content into NotebookLM, and executing local shell/Python scripts. This is dangerous because it increases the skill’s authority and data flow surface without explicit consent boundaries, enabling unintended disclosure to external services and local command execution side effects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file recommends running local merge and postprocessing commands that create or modify files, but it does not require a user-facing warning or confirmation before doing so. That is risky because local script execution can overwrite files, generate unexpected outputs, or trigger broader side effects on the user’s system.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documented purpose is creating a presentation from supplied content, but the script also supports autonomous YouTube searching and then injects those external URLs into NotebookLM as sources. That expands data ingestion beyond the user's provided material, creating an integrity and privacy risk because third-party content can influence the generated output without clear disclosure or consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script sends arbitrary user-provided content to NotebookLM, a third-party web service, without an explicit privacy warning or confirmation step. If users paste sensitive internal, personal, or regulated data, the skill can cause unintended disclosure outside the local environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The default custom prompt states that "All Chinese text must be perfectly rendered," which bakes a specific language requirement into the skill's behavior. There is no accompanying user choice or clear justification that this script is only for Chinese-language presentations, so this appears to impose a locale/language preference by default.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This function performs a general YouTube search using user-supplied query text, extracts URLs from the results page, and feeds them into NotebookLM. In the context of a PPT-generation skill, this is a capability expansion that can silently pull in untrusted external content, increasing risks of unexpected data disclosure, output manipulation, and misleading provenance.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script’s --all-desktop mode and fallback-to-Desktop path resolution cause it to process any PDF on the user’s Desktop, not just NotebookLM/Auto-PPT outputs. In this skill context, that broad file scope can unintentionally ingest unrelated, potentially sensitive documents and merge their contents into derived outputs placed back on the Desktop, creating a confidentiality and data-mixing risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code generates a new PPTX by extracting text from PDFs and synthesizing slide titles and bullets, which expands the skill from simple PDF export/post-processing into content transformation. In this context, if arbitrary Desktop PDFs are included, the synthesized deck can repackage sensitive information from unrelated files into a convenient, shareable presentation, increasing the likelihood of accidental disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

When the optional YouTube query feature is used, the script sends user-supplied query terms to YouTube without clearly warning the user. This can expose research topics, business interests, or sensitive themes to a third party even though the core skill is framed as slide generation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The script derives an output filename and path under ~/Desktop, then later downloads the generated PDF to that location. While the destination is printed, there is no confirmation prompt and the header comments do not explicitly warn that running the script will create or overwrite a local file on disk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.