Back to skill

Security audit

Korean Document Reviewer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Korean business-document reviewer, but it defaults to retaining unredacted financial and business identifiers in workspace files without clear privacy controls.

Use this skill only for documents you are comfortable processing through spawned model sessions and storing in the workspace. Prefer redacted outputs, get explicit approval before saving reports, and delete the reviews directory or sensitive intermediate files when the review is complete.

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

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:41
Finding

Plaintext Persistence of Sensitive Financial and Business Identity Data

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 41–44 and 132–134; related data model in schema/review-result.schema.json, lines 45–60
Vulnerability Type: Sensitive data exposure through unprotected persistent storage
Risk Level: Medium

Vulnerable Code Snippets

SKILL.md, lines 41–44:

markdown
- 이미지 파일 경로를 명시하고 "Read tool로 읽어라"고 지시
- 서류 유형별 체크리스트를 태스크에 포함
- **반환 형식을 JSON으로 지정** (교차 검증에 필요한 핵심 값)
- 핵심 필드: 사업자등록번호, 상호, 대표자, 금액, 날짜, 계좌번호

English meaning of the security-relevant instruction: the workflow requires extraction of business registration numbers, company and representative names, amounts, dates, and bank account numbers.

SKILL.md, lines 132–134:

markdown
**출력 파일:**
- JSON 결과를 workspace에 저장: `reviews/REV-{YYYYMMDD}-{NNN}.json`

English meaning: the JSON result is saved persistently in the workspace.

schema/review-result.schema.json, lines 45–60:

json
"extractedData": {
  "type": "object",
  "description": "OCR 추출 핵심 데이터",
  "properties": {
    "businessRegNo": { "type": "string", "description": "사업자등록번호" },
    "companyName": { "type": "string", "description": "상호" },
    "representative": { "type": "string", "description": "대표자" },
    "address": { "type": "string", "description": "소재지" },
    "supplyAmount": { "type": ["number", "null"], "description": "공급가액" },
    "taxAmount": { "type": ["number", "null"], "description": "세액" },
    "totalAmount": { "type": ["number", "null"], "description": "합계금액" },
    "date": { "type": "string", "description": "주요 날짜 (작성일/계약일/이체일 등)" },
    "bankName": { "type": ["string", "null"], "description": "은행명" },
    "accountNo": { "type": ["string", "null"], "description": "계좌번호" },
    "accountHolder": { "type": ["string", "null"], "description": "예금주" },
    "items": { "type": "string", "description": "품목 요약" }
  }
}

Technical Analysis

The Skill is designed to process highly sensitive business documents, including bank-book copies, transfer confirmatio ...[truncated 2558 chars]

Remediation
View remediation

Remediation Suggestions

  1. Minimize stored data

    • Do not retain full account numbers unless strictly required.
    • Store only a masked form, such as **********1234.
    • Replace business registration numbers and addresses with masked or hashed representations where cross-document comparison is sufficient.
  2. Separate comparison data from report data

    • Use complete values only in transient memory while performing cross-validation.
    • Write only redacted values to the final JSON report.
    • Store boolean comparison results rather than duplicating raw identifiers.
  3. Require explicit consent

    • Inform the user before retaining unredacted financial information.
    • Require explicit approval for persistent storage.
    • Default to a non-persistent or redacted review mode.
  4. Protect files at rest

    • Encrypt reports containing sensitive information.
    • Create the reviews directory and report files with restrictive permissions accessible only to the intended user.
    • Ensure temporary images and intermediate OCR files receive equivalent protection.
  5. Define retention controls

    • Add a short default retention period.
    • Automatically and securely delete reports and intermediate files after expiration.
    • Document whether backups and synchronized copies are also deleted.
  6. Prevent secondary disclosure

    • Prohibit full account numbers and registration numbers in chat summaries, diagnostic logs, filenames, and exception messages.
    • Review subagent traces and tool logs for inadvertent persistence of raw OCR data.
  7. Harden the schema

    • Replace accountNo with fields such as accountNoMasked and accountFingerprint.
    • Add structured fields recording whether consent was obtained and whether the output was redacted.
    • Reject unmasked sensitive values in the default output schema.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill goes beyond transient document review by instructing the agent to persist extracted review results to workspace files. Because those results contain structured business data from invoices, contracts, bank documents, and IDs, this expands the data-handling scope and creates unnecessary retention and exposure risk if the workspace is later accessed, indexed, or reused by other tasks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill explicitly instructs storing review outputs that include extracted business document data without any warning about sensitivity, retention, or access control. Since the covered documents include bank account copies, transfer confirmations, contracts, and business registration data, saving them to workspace materially increases the chance of privacy leakage or secondary misuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The entire skill reference is written only in Korean and does not indicate that users may choose another language or that the locale restriction is intentional. Under the stated policy, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown skill forces a specific language/locale for all users through its title and checklist content, and there is no indication that users can opt into Korean or choose another language. Under the policy, language constraints should either be optional or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This schema consistently uses Korean natural-language labels and descriptions for fields, such as the title and property descriptions, without indicating that the skill is Korea-specific or that users can choose another language. That creates a language/locale policy concern because the file appears to force a single locale rather than offering an explicit opt-in or documenting a justified regional restriction.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The manifest frames the skill as a document reviewer, but the implementation guidance directs use of the pdftoppm command to convert PDFs into images. While document extraction can support review, explicit shell-command execution is a broader operational capability than the manifest states and is not declared as part of the skill’s scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file contains only Korean-language instructions and does not state that the skill is intended specifically for Korean-speaking users or a Korea-specific workflow. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document presents all instructions and checklist content only in Korean, which can amount to a language/locale policy issue if users are not given a choice or informed that the skill is region- or language-specific. There is no visible opt-in, alternative language support, or justification that the skill is intended only for Korean-language contract review.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

This markdown file contains user-facing instructions exclusively in Korean, and there is no indication that the skill is region-specific or that users may choose another language. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file contains user-facing natural language exclusively in Korean, but it does not state that the skill is intended only for Korean-speaking users or offer any language/locale choice. Under the policy rule, forcing a specific language without user opt-in can be a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The document title and all instructions are presented exclusively in Korean, which can constitute a language/locale policy issue when no user choice or opt-in is offered. The file does not indicate that the skill is region-specific or that Korean is an optional language selection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file presents all instructions and checklist content exclusively in Korean, with no indication that the user can select another language or that the Korean-only constraint is optional. Under the natural-language policy rule, forcing a specific language without user opt-in can be a locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file presents all instructions and validation guidance only in Korean, with no indication that the skill is region-specific or that users may choose another language. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The entire skill file is written only in Korean, including the title and all checklist instructions, with no indication that the user can choose another language or that the skill is intentionally limited to Korean-language use. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

This sample output is entirely structured around Korean-language field values and narrative text, including the transaction summary, document types, checklist items, and final opinion. For a file type covered by SQP-3, this can indicate a locale-specific output expectation without any explicit opt-in or documented justification in the file itself.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.