Back to skill

Security audit

sn-da-non-spreadsheet-analysis

Security checks across malware telemetry and agentic risk

Overview

The skill coherently analyzes Word, PDF, and PowerPoint documents, with expected but privacy-relevant image rendering and caption-helper processing.

Install only if you are comfortable with the agent reading the selected documents, rendering pages or embedded images to temporary local files, and passing those images to the referenced captioning helper. For sensitive business, legal, HR, or financial documents, confirm how the captioning helper processes data and clean temporary files after use.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill launches an external Python script from a hard-coded path and treats it as part of the processing pipeline without any trust boundary, integrity check, or output validation. This creates a dangerous cross-skill execution dependency: if that script is replaced, modified, or behaves unexpectedly, the PDF-analysis workflow can execute untrusted code or ingest adversarial output.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The hybrid workflow repeats the same unsafe pattern by spawning an external captioning script for image-like pages and trusting its results. Because this path is triggered conditionally during normal document handling, adversarial PDFs can push execution into a dependency chain that lacks isolation and verification.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The activation criteria are extremely broad and include many generic phrases, which can cause the skill to trigger in contexts the user did not intend. In a system with multiple skills, overbroad routing can expose document contents to unnecessary processing paths, increase data handling scope, and produce surprising behavior that weakens user consent and least-privilege boundaries.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill renders slide content to images and sends them to another captioning component without any disclosure, consent gate, or data-handling boundary. PPT slides often contain sensitive business, financial, HR, or legal content, so forwarding rendered images to a separate script can expand access to confidential data and create an unintended exfiltration path.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The code extracts embedded document images to predictable paths under /tmp without cleanup, creating local file artifacts from potentially sensitive document contents. On multi-tenant or shared systems, this can expose confidential data to other processes/users or cause filename collisions and unintended overwrites.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill sends extracted document images to an external captioning script without clear disclosure or consent boundaries. Even if the script is local, this is a secondary processing path for document contents that may handle sensitive data differently than users expect and broadens exposure of embedded content.

Unvalidated Output Injection

High
Category
Output Handling
Content
else:
            cmd += ["--prompt", "提取页面中所有文字和表格内容,保持原始结构,Markdown格式输出。"]

        r = subprocess.run(cmd, capture_output=True, text=True, timeout=90)
        if r.returncode == 0:
            desc = json.loads(r.stdout).get("description", "")
            all_text.append(f"=== Page {i+1} ===\n{desc}")
Confidence
95% confidence
Finding
The workflow takes JSON output from an external captioning process and directly injects the returned description into downstream text without validation, sanitization, or trust checks. If the captioning tool emits prompt-injection content, malformed structured data, or hostile instructions embedded as extracted text, later agent stages may treat attacker-controlled output as trustworthy document content, enabling indirect prompt injection and corrupted analysis.

Unvalidated Output Injection

High
Category
Output Handling
Content
prompt = image_prompt or "提取页面中所有文字和表格内容,Markdown格式输出。"
            cmd += ["--prompt", prompt]

            r = subprocess.run(cmd, capture_output=True, text=True, timeout=90)
            if r.returncode == 0:
                desc = json.loads(r.stdout).get("description", "")
                all_text.append(f"=== Page {i+1} (image→caption) ===\n{desc}")
Confidence
95% confidence
Finding
The hybrid path has the same untrusted-output problem: content produced by the external captioning script is appended directly into the aggregate analysis stream. In document-analysis contexts this is especially risky because malicious PDFs can embed text designed to manipulate later LLM reasoning, making the extraction pipeline a delivery mechanism for prompt injection.

Unvalidated Output Injection

High
Category
Output Handling
Content
cmd = ["python3", CAPTION, img_path, "--json"]
        p = prompt or "提取幻灯片中所有文字、数值和表格内容,保持结构,Markdown格式输出。"
        cmd += ["--prompt", p]
        cr = subprocess.run(cmd, capture_output=True, text=True, timeout=90)
        if cr.returncode == 0:
            desc = json.loads(cr.stdout).get("description", "")
            s['text'] = desc
Confidence
72% confidence
Finding
Although the subprocess call itself is shell-safe, it forwards a largely unbounded prompt string and document-derived image to another script whose trust boundary and downstream behavior are unspecified. If that captioning script calls a model service, plugin, or parser unsafely, attacker-controlled slide content can trigger prompt injection or sensitive data leakage across component boundaries.

Unvalidated Output Injection

High
Category
Output Handling
Content
cmd = ["python3", CAPTION, tmp_path, "--json"]
            if prompt:
                cmd += ["--prompt", prompt]
            r = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
            if r.returncode == 0:
                desc = json.loads(r.stdout).get("description", "")
                results.append({'image': media, 'caption': desc})
Confidence
67% confidence
Finding
The subprocess invocation itself is safely argumentized, but the untrusted `prompt` is forwarded to another script and the JSON output from that script is trusted without validation. If the downstream caption script is LLM-backed or prompt-sensitive, document content or user-controlled prompt text could manipulate its behavior, leading to unsafe output handling or unexpected secondary actions in that helper.

VirusTotal

60/60 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.