Back to skill

Security audit

Skywork PPT

Security checks for vulnerabilities and agentic risk

Overview

This PowerPoint skill is mostly coherent, but it should be reviewed because it uploads local documents to cloud/public URLs and can modify local/system files without strong safeguards.

Install only if you are comfortable sending selected prompts and files to Skywork/cloud storage. Avoid confidential decks unless your organization approves that service, use a revocable API key stored in a protected secret store, do not echo the key in logs, run dependencies in a virtual environment, and use explicit output paths or backups for local slide edits.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (4)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:52
Finding

Unpinned Dependency Installation Into the System Python Environment

Content
View full analysis
/dev/null && "$cmd" -c "import sys; exit(0 if sys.version_info >= (3,8) else 1)" 2>/dev/null; then PYTHON_CMD="$cmd" break fi done if [ -z "$PYTHON_CMD" ]; then echo "ERROR: Python 3.8+ not found." echo "Install on macOS: brew install python3 or visit https://www.python.org/downloads/" exit 1 fi echo "Found Python: $PYTHON_CMD ($($PYTHON_CMD --version))" $PYTHON_CMD -m pip install -q --break-system-packages python-pptx echo "Dependencies ready." ``` The same general installation pattern also appears in `workflow_local.md:10`: ```bash pip install python-pptx ``` ### Technical Analysis The Skill instructs the Agent to install `python-pptx` without an exact version or package hash. Resolution therefore depends on the package index and dependency graph available when the Skill executes. A future compromised release, malicious mirror, altered pip configuration, or compromised transitive dependency could introduce executable code that was not present during this audit. The `--break-system-packages` option bypasses Python distribution protections and allows pip to modify an externally managed interpreter. This unnecessarily expands the impact beyond an isolated Skill environment and can overwrite or conflict with packages used by other applications. Installation is described as an environment check that should always run, meaning dependency mutation may occur even when the selected operation does not require a new installation. ### Attack Path 1. A user activates the Skill. 2. The Agent follows the mandatory environment-check instructions. 3. Pip resolves the unpinned package and transitive dependencies using t ...[truncated 993 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/apikey-fetch.md:21
Finding

API Key Setup Instructions Expose and Persist Secrets in Plaintext

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/web_search.py:55
Finding

Search Queries Can Escape the Temporary Directory Through Path Traversal

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/run_ppt_write.py:316
Finding

Backend-Provided Download URLs Are Fetched Without Destination or Size Validation

Content
View full analysis
Remediation
View remediation
max_bytes: raise ValueError("Download exceeds size limit") f.write(chunk) ``` 5. Check `Content-Length` when available, while still enforcing the streamed limit. 6. Validate the response MIME type and verify that the result is a valid PPTX ZIP package before replacing the destination. 7. Download to a securely created temporary file and atomically rename it after successful validation. 8. Redact query strings or signed tokens before logging the download URL. 9. Apply the same controls in both `run_ppt_write.py` and `run_editable_convert.py`. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (42)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill mandates web search to gather topic material, which is broader than basic presentation manipulation and introduces outbound network requests based on user prompts. While this may support content generation, it materially expands the skill’s behavior and data exposure beyond what a local PPT tool description suggests.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill mandates web search to gather topic material, which is broader than basic presentation manipulation and introduces outbound network requests based on user prompts. While this may support content generation, it materially expands the skill’s behavior and data exposure beyond what a local PPT tool description suggests.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill mandates web search to gather topic material, which is broader than basic presentation manipulation and introduces outbound network requests based on user prompts. While this may support content generation, it materially expands the skill’s behavior and data exposure beyond what a local PPT tool description suggests.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

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

md
primaryEnv: SKYWORK_API_KEY
---

# PPT Write Skill

Five capabilities: **generate**, **template imitation**, **edit existing PPT**, **convert NotebookLM export to editable PPTX**, and **local file operations**.

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · references/apikey-fetch.md (reported line 60)May include surrounding context.

Option B — Claude Code settings

Add the variable to ~/.claude/settings.json:

json
{

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · references/apikey-fetch.md (reported line 94)May include surrounding context.

Option B — Claude Code settings

Add the variable to ~/.claude/settings.json:

json
{

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · references/apikey-fetch.md (reported line 99)May include surrounding context.

Option B — Claude Code settings

Add the variable to ~/.claude/settings.json:

json
{

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · scripts/local_pptx_ops.py (reported line 266)May include surrounding context.

python
# ---------------------------------------------------------------------------

def _resolve_output(args, original_file: str) -> str:
    """Use -o output path if specified by the user, otherwise overwrite the original file."""
    if hasattr(args, "output") and args.output:
        return args.output
    return original_file

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script’s documented purpose is generic file parsing and OCR/text extraction for arbitrary reference files, which materially exceeds the stated PPT-focused skill scope. Scope expansion is security-relevant because it enables users or downstream automation to upload non-PPT documents to a remote service, increasing the chance of unintended sensitive data handling and creating capability creep beyond what the skill description justifies.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

This script adds a general web-search and network retrieval capability inside a skill advertised as PPT creation/editing. That mismatch materially expands the skill's attack surface: it can send arbitrary user-controlled queries to a remote endpoint and ingest untrusted remote content, which may then be reused elsewhere in the agent workflow. In the PPT-focused context, the capability is unjustified and increases the risk of covert data exfiltration, prompt-injection via retrieved content, or unauthorized network access.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The workflow explicitly requires uploading a local PPTX to a publicly accessible OSS/CDN URL before editing, but it does not require user consent, warn about public accessibility, or limit exposure duration. Because PPTX files often contain sensitive business content, speaker notes, embedded media, or internal branding, this can cause unintended data disclosure simply by following the workflow as written.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The optional parsing step sends arbitrary additional local files such as PDF, DOCX, PPTX, and images to a remote document parse service. This materially broadens the skill from presentation work into generalized remote ingestion of user documents, creating a strong risk of confidential data exposure if users do not understand that their local source files are being transmitted off-device.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The workflow uploads a user-provided local template PPTX to an external OSS/CDN service without an explicit consent gate or clear necessity stated to the user. Template files can contain sensitive business content, speaker notes, embedded media, comments, authorship metadata, or confidential branding assets, so silent exfiltration to third-party storage creates a real confidentiality risk.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
95% confidence
Finding

The documented default behavior allows overwriting the original PPTX during slide deletion, which is a direct destructive self-modification of user data. In a tool routed by natural-language commands, this increases the chance that a misunderstood or overly broad request permanently alters the only copy of a file.

Content

Scanner excerpt · workflow_local.md (reported line 57)May include surrounding context.

md
# Delete slide 3
$PYTHON_CMD scripts/local_pptx_ops.py delete --file my.pptx --slides 3

# Delete slides 3, 5, 7-9, overwrite the original file
$PYTHON_CMD scripts/local_pptx_ops.py delete --file my.pptx --slides 3,5,7-9

# Save to a new file after deletion (don't overwrite the original)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill declares broad capabilities that include environment access, local file read/write, and network operations, but it does not declare any explicit tool scope or allowed-tools boundary. In a skill that uploads local files and sends user prompts to a remote service, the absence of clear permission constraints increases the risk of unintended data access or overbroad tool use by the agent.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The instruction to perform web searches expands the skill from document manipulation into external content acquisition, which changes its trust and privacy profile. This is dangerous because user topics, prompts, or associated context may be sent to third-party search services without the manifest making that expansion sufficiently explicit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The edit workflow hard-codes --language Chinese in the command example, which directs the skill to use a specific language regardless of the user's preference. This is a natural-language policy issue because the file elsewhere serves multilingual users, but this step does not offer language choice or justify the restriction.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
79% confidence
Finding

The instruction to create or copy an API key encourages handling a persistent credential, and the overall guide then stores it in plaintext config or shell initialization files. While normal for setup docs, this increases the risk of long-lived secret exposure if the machine, home directory, or dotfiles are accessible to others.

Content

Scanner excerpt · references/apikey-fetch.md (reported line 15)May include surrounding context.

md
- Log in with your Skywork account
- Open account / Settings / API Key (**https://skywork.ai/?openApiKeySetting=1**)
- Create or copy your **API key**

If your organization uses a separate console or test environment, use the URL and credentials your team provides.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The guide tells users to export, store, and echo a live API key but does not warn that the key is a sensitive credential or discuss risks like terminal history exposure, shoulder-surfing, checked-in config files, or shared home-directory files. This can lead to credential disclosure and unauthorized use of the Skywork account if the key is copied into insecure locations or printed in logs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The helper defaults to overwriting the input PPTX when no output path is supplied, and destructive commands like delete/reorder call it without any confirmation or backup. In an agent context, a mistaken invocation, ambiguous user request, or prompt-manipulated action can permanently destroy or alter the only local copy of a presentation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The code uploads a user-provided file to a server-side endpoint that performs generic analysis, OCR, and text extraction, not just presentation editing. In a PPT skill, this broader remote document-processing behavior makes the feature more dangerous because users may reasonably assume local slide operations while the code can exfiltrate the contents of arbitrary documents for server-side inspection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script reads the entire local file and sends it to a remote API endpoint with authorization headers, but it provides no explicit warning or consent checkpoint that the file contents will leave the local environment. This is dangerous because users may upload confidential presentations or embedded documents under the impression that the operation is purely local, leading to unintended disclosure of sensitive data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The CLI argument sets --language to en by default, which imposes a specific language preference unless the caller explicitly overrides it. This is a natural-language policy concern because the skill defaults to one locale rather than offering a neutral choice or prompting for user preference.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The script reads arbitrary local file content via --reference-file and forwards it as reference text to the remote service, which can cause unintended exfiltration of sensitive local data. Because the file path is unconstrained and the feature is broader than strictly necessary for PPT manipulation, it expands the skill's data access beyond user expectations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script sends user-provided content and metadata to a remote Skywork API and then downloads the resulting PPTX from a URL supplied by that service. In a skill framed around PowerPoint operations, this is security-relevant because local content may leave the host and remote fetching of the final file introduces trust and data-boundary concerns that should be explicitly disclosed and constrained.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.