Back to skill

Security audit

Ppt Ooxml Translator

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent PPTX localization tool, but one write path can be steered outside the intended presentation folder by a crafted TSV file.

Install only if you trust the PPTX, TSV, glossary, and job files you run through it. Avoid using untrusted TSV/job specs until the package enforces path containment under the OOXML root and escapes or validates font names; run it on copies of presentations in a restricted workspace.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
src/ppt_ooxml_tool/cli.py:218
Finding

Path Traversal Through the TSV File Field Permits Out-of-Root File Modification

Content
View full analysis
Tuple[int, int]: rows = read_tsv(tsv_path) by_file_seq: Dict[Tuple[str, int], str] = {} for row in rows: file_rel = row["file"].strip() seq = int(row["seq"]) target = row.get("target", "") if target is None or target == "": continue by_file_seq[(file_rel, seq)] = target file_to_rows: Dict[str, List[int]] = {} for file_rel, seq in by_file_seq: file_to_rows.setdefault(file_rel, []).append(seq) files_changed = 0 texts_changed = 0 for file_rel, seqs in file_to_rows.items(): path = root / file_rel if not path.exists(): raise FileNotFoundError(f"Missing XML file from TSV: {file_rel}") content = path.read_text(encoding="utf-8") matches = list(A_TEXT_RE.finditer(content)) max_seq = len(matches) for seq in seqs: if seq < 1 or seq > max_seq: raise IndexError(f"Sequence out of range for {file_rel}: {seq} > {max_seq}") out: List[str] = [] last = 0 changed_this_file = 0 for i, m in enumerate(matches, start=1): out.append(content[last : m.start(1)]) key = (file_rel, i) if key in by_file_seq: original = m.group(1) translated = by_file_seq[key] escaped = xml_escape_text(translated) out.append(escaped) if escaped != original: changed_this_file += 1 else: out.append(m.group(1)) last = m.end(1) out.append(content[last:]) if changed_this_file > 0: path.write_text("".join(out), encoding="utf-8") ...[truncated 2428 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/ppt_ooxml_tool/cli.py:294
Finding

Unescaped Font Name Allows OOXML Attribute and Markup Injection

Content
View full analysis
Remediation
View remediation
`, `"`, and `'`. Text-node escaping alone is insufficient for quoted attributes. 3. Validate custom font names with a conservative policy: - Impose a reasonable maximum length. - Reject control characters. - Reject XML metacharacters. - Permit only characters legitimately expected in font family names. 4. Validate the modified XML before writing it to disk. Write to a temporary file, parse the temporary output, and atomically replace the original only after successful validation. 5. Add tests using quotes, ampersands, angle brackets, apostrophes, backslashes, line breaks, and oversized font values. Tests should confirm that the resulting OOXML remains well-formed and that no additional attributes or elements are introduced. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

There is a clear description-behavior mismatch in the supplied code chunk. The declared purpose claims a feature-rich PPTX localization workflow tool, but the actual code shown contains only package metadata (version). No functionality related to files, archives, XML, translations, fonts, or automation interfaces is present in this chunk. Based on the supplied code alone, the declared description is not accurately represented.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill advertises file-reading and file-writing style behavior such as unpacking, modifying, validating, and repacking PPTX/OOXML content, but it does not declare any explicit tool scope or permissions boundaries. In an agent environment, this can lead to over-broad filesystem access being granted implicitly, increasing the risk of unintended file access or modification beyond the expected workspace.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JSON file maps English product terms directly to Japanese equivalents, indicating a fixed language/locale behavior. Because the file provides no natural-language indication of user choice or justification for a Japan-specific constraint, it appears to enforce a specific locale without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest sets "lang": "ja", which imposes a specific language/locale in the skill configuration. For SQP-3, locale constraints should either offer user choice or be clearly documented and justified; this file provides neither.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The workflow command triggers collect, apply, normalize, validate, and repack in one step, and apply/normalize write changes directly back into files under the provided root. While individual commands print completion messages after execution, there is no upfront confirmation or warning in the command definition or help text that this mode will modify the unpacked OOXML directory in place.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The runfile subcommand accepts a JSON job spec and passes it into the full workflow, which may unpack archives, write TSV files, overwrite XML files, and create a new PPTX. The CLI help for runfile only says 'run JSON job spec' and does not warn users that executing the job file can perform multiple filesystem writes and in-place modifications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

This markdown file documents a one-shot automation mode and provides an example that takes an input presentation and writes an output PPTX, but it does not include any user-facing warning about modifying or generating files. For markdown files, omissions of warnings about behaviors affecting user data can be reported when the described behavior touches user documents.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: setuptools has 10 known advisory(ies) (CVE-2013-1633 (Setuptools vulnerable to Man-in-the-middle attacks); CVE-2025-47273 (setuptools has a path traversal vulnerability in PackageIndex.download that lead); CVE-2024-6345 (setuptools vulnerable to Command Injection via package URL) +7 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: wheel has 4 known advisory(ies) (CVE-2026-24049 (Wheel Affected by Arbitrary File Permission Modification via Path Traversal in w); CVE-2022-40898 (pypa/wheel vulnerable to Regular Expression denial of service (ReDoS)); CVE-2022-40898 (An issue discovered in Python Packaging Authority (PyPA) Wheel 0.37.1 and earlie) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.