Back to skill

Security audit

pms-vigilance-intake

Security checks for vulnerabilities and agentic risk

Overview

This is a small medical-device compliance decision-support CLI with disclosed limits and no hidden data access, persistence, or network execution.

Before relying on it, users should verify the regulatory rule text themselves and correct the documented example commands to use severity/event_type. The tool should be treated only as decision support, especially because it concerns medical-device reporting obligations.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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 (5)

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
Line L19 states that the documentation is in Chinese (`中文文档见 SKILL.md`) with no indication of alternative language support or user choice. This is a natural-language locale policy concern because it imposes a specific language on users rather than offering an opt-in or documenting a justified region-specific restriction.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The display name, description, headings, usage guidance, and disclaimers are all presented in Chinese, which effectively forces a specific language for users. The file does not offer multilingual support, opt-in language selection, or a documented reason that this skill must be Chinese-only.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
Natural-language strings throughout the file, including the module description, CLI help text, and error messages, are all written exclusively in Chinese. The file does not offer any language selection or explain that the tool is intentionally limited to a Chinese regulatory audience, which can violate language/locale policy requirements under the stated rule.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
L35 的示例使用了 `--device_class` 和 `--device_type`,而 L38 又声明参数是 `severity / event_type`。这不是单纯的省略信息,而是两组不同输入模型的直接冲突,会使审计者和使用者对技能实际判定依据产生错误理解。

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Content
allok = False
                print(json.dumps({"tool": META["slug"], "input": d, "errors": [str(e)], "rc": 2}, ensure_ascii=False))
        sys.exit(0 if allok else 2)
    args = {k: getattr(ns, k) for k in argnames}
    if not any(v not in (None, "") for v in args.values()):
        # 无参数时打印帮助
        p.print_help()
Confidence
50% confidence
Finding
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Static analysis

No suspicious patterns detected.