Back to skill

Security audit

Insurance Intelligent Cs

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent insurance customer-service prompt, but it uses weak identity checks before exposing sensitive policy details.

Review before installing in a real insurance workflow. The skill should require stronger, institution-backed authentication before revealing policy existence or details, clarify that full identity and phone numbers must not be collected in chat, remove or justify estimated claim amount collection, and align retention language with the insurer's actual policy.

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
SKILL.md:71
Finding
Weak Knowledge-Based Verification Allows Unauthorized Policy Information Disclosure## Vulnerability Details **File Location**: `SKILL.md`, lines 71 and 160-175 **Vulnerability Type**: Weak identity verification and sensitive information disclosure **Risk Level**: High ### Vulnerable Code Snippet ```python "保单查询": { "典型说法": ["我的保单", "保到什么时候", "保额多少"], "路由": "模块1 保单查询", "必核要素": ["姓名", "证件号后四位", "手机号"], "风险提示": "未完成身份核验不得展示保额与受益人" } ``` ```text 客户:我想查一下我的保单 客服:为保障您的信息安全,需要先核验身份。请提供投保人姓名、 身份证号后四位,以及预留手机号后四位。 客户:张伟,身份证后四位 1234,手机后四位 5678 客服:核验通过。您名下有效保单共 2 张: 1)国联人寿「医惠锡城」2026 版 —— 保至 2027-06-30 2)国联人寿定期寿险 —— 保至 2035-03-31 请问您要查看哪一张的详细信息? 客户:第一张 客服:【保单号】POL-000001 【产品名称】医惠锡城 2026 版 【生效/到期】2026-07-01 至 2027-06-30 【当前状态】有效 【保障概要】住院医疗费用、特定药品费用(具体责任以条款为准) ``` ### Technical Analysis The Skill treats a customer name, the last four digits of an identity number, and the last four digits of a registered phone number as sufficient verification before disclosing policy information. These values are static knowledge factors rather than proof of identity or possession. Partial identity and telephone data may be obtained from leaked datasets, documents, prior communications, social engineering, or people acquainted with the victim. Matching these values does not establish that the requester controls the registered communication channel or has authorization from the policyholder. After this weak verification, the example discloses the existence and number of policies, product names, insurers, coverage periods, policy status, policy number, and coverage summary. Insurance holdings can also reveal financial or health-related information. ### Attack Path 1. An attacker obtains a victim's name, identity-number suffix, and phone-number suffix from a leak, document, or social-engineering interaction. 2. The attacker initiates a policy inquiry while impersonating the victim. 3. The attacker supplies the static values requested by the Skill. 4. The workflow considers verification successful without ...[truncated 784 chars]
Remediation
## Remediation Suggestions 1. Replace static knowledge-based verification with a server-validated possession factor, such as a one-time code sent to the registered phone, an authenticated official application session, or an equivalent strong authentication mechanism. 2. Do not disclose whether a policy exists until authentication and authorization have both succeeded. 3. Bind successful verification to a short-lived session and require renewed verification before displaying especially sensitive fields. 4. Apply attempt limits, rate limiting, temporary lockouts, anomaly detection, and security logging to verification requests. 5. Use generic failure messages that do not reveal which submitted identifier was correct. 6. Require documented authorization for representatives or family members and verify both the authorization and representative identity. 7. Minimize post-authentication disclosure according to the customer's request and role. 8. Add automated tests confirming that policy counts, identifiers, coverage details, and status cannot be returned before strong verification succeeds.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:112
Finding
Contradictory Identity-Collection Instructions Can Cause Excessive Sensitive Data Collection## Vulnerability Details **File Location**: `SKILL.md`, lines 112 and 339-350 **Vulnerability Type**: Ambiguous handling of sensitive personal information **Risk Level**: Medium ### Vulnerable Code Snippet ```python "保单基本信息查询": { "steps": [ "身份验证(姓名+身份证+手机号验证)", "选择要查询的保单", "展示保单基本信息" ] } ``` The later privacy guidance provides a conflicting requirement: ```text 客户:我的身份证是310101199001011234,你帮我查一下。 客服:为保障信息安全,建议您不要发送完整证件号码。我已为您遮蔽处理, 后续核验仅需提供后四位即可。 ``` ```markdown | 场景 | 必需字段 | 非必需(不应主动索取) | 保存期限口径 | |---|---|---|---| | 保单查询 | 姓名 + 证件后四位 + 手机后四位 | 完整证件号、家庭住址 | 按本单位规定 | ``` ### Technical Analysis The policy inquiry workflow broadly instructs the agent to verify a customer's name, identity card, and phone number. It does not specify in that flow that only suffixes may be collected. Later sections state that full identity numbers should not be requested and that only the last four digits are needed. Because agent behavior is driven by the entire Skill, these inconsistent instructions create an unsafe interpretation path. An agent could follow the earlier workflow literally and request complete identity and phone numbers. Those values could then enter conversation transcripts, quality-monitoring records, analytics systems, or other retention pipelines before the later masking guidance is applied. Masking a value after receipt does not guarantee removal from raw request logs, upstream telemetry, model inputs, backups, or already-generated audit records. ### Attack Path 1. A customer starts the policy inquiry workflow. 2. The agent follows the general instruction to verify a name, identity card, and phone number. 3. Because the instruction does not limit collection to suffixes, the agent requests or accepts complete values. 4. The customer submits a complete identity number or phone number through the conversation channel. 5. The sensitive values may be captured in raw transcripts or logging infrastructure before masking ...[truncated 706 chars]
Remediation
## Remediation Suggestions 1. Replace the ambiguous verification step with an explicit instruction that complete identity and phone numbers must never be requested through free-form conversation. 2. Centralize identity-verification requirements in one authoritative section and make all examples reference that procedure. 3. Use dedicated structured input controls for permitted suffixes rather than free-text chat whenever possible. 4. Validate input length and reject or redact complete identity, bank-card, and phone numbers before the values reach conversation storage. 5. Apply redaction at the ingestion boundary, before transcript logging, analytics, tracing, model processing, or backup creation. 6. Prevent the agent from repeating sensitive values in responses. 7. Define retention periods according to data classification and business requirements instead of applying an ambiguous universal retention rule. 8. Audit existing logs for complete identifiers and securely delete or tokenize improperly retained values. 9. Add tests covering accidental user submission of complete identifiers and verify that raw and processed logs contain only redacted values.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (4)

Vague Triggers

Medium
Confidence
89% confidence
Finding
The trigger section lists generic phrases such as "insurance consultation," "policy inquiry," and Chinese terms like "产品咨询" and "保险术语" without defining when the skill should or should not activate. Because no negative examples, channel constraints, or invocation boundaries are provided, these terms could overlap with ordinary insurance-related conversation and cause unintended invocation.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The claims reporting script collects an 'estimated claim amount' even though other parts of the skill explicitly say customer service should not estimate or predict payout amounts and the PIPL section emphasizes minimal necessary collection. This creates unnecessary collection of potentially sensitive financial information and may also bias downstream handling or create customer confusion about expected compensation.

Natural-Language Policy Violations

Low
Confidence
86% confidence
Finding
The description states the skill is "Built for China life and property insurance companies" and centers Chinese regulatory and language context, but it does not explicitly indicate that this locale restriction is an intentional region-specific limitation presented to the user at activation time. Under the policy, forcing a specific language or locale without user choice can be a natural-language policy concern unless the constraint is clearly documented and justified as region-specific behavior.

Intent-Code Divergence

Low
Confidence
80% confidence
Finding
The PIPL data handling table states "90天后自动清理" at L294-L295, suggesting a concrete retention rule. However, the later recording declaration template at L366-L368 leaves retention as a placeholder {保留期限}, which conflicts with the earlier fixed retention statement rather than implementing it consistently.

Static analysis

No suspicious patterns detected.