Back to skill

Security audit

PIPL Audit - PIPL合规审计工具

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about cloud scoring, but cloud-provided audit text is inserted into terminal prompts and HTML reports without escaping, so it needs review before use.

Use the offline preview if you do not want any data sent out. For scored audits, proceed only if you are comfortable sending yes/no audit answers plus an API key or anonymous trial ID to compliancehub.cn. Prefer environment-variable key use on shared machines, and treat generated HTML reports cautiously until the publisher escapes cloud-supplied content and adds browser protections.

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
scripts/pipl-audit.py:349
Finding

Unsanitized Cloud-Controlled Content in HTML Reports and Terminal Output

Content
View full analysis
").strip().lower() ``` Cloud response fields are also interpolated directly into an HTML document: ```python def render_html(data, items): s = data score = s.get("score", 0) color = "#4caf50" if score >= 80 else "#ff9800" if score >= 60 else "#f44336" rows = "" sev_cls = {"critical": "#dc2626", "high": "#ea580c", "medium": "#ca8a04", "low": "#16a34a"} sev_label = {"critical": "严重", "high": "高", "medium": "中", "low": "低"} current_cat = "" for r in items: if r.get("category") != current_cat: current_cat = r.get("category", "") rows += f'{current_cat}\n' icon = "✅" if r.get("passed") else "❌" cls = "pass" if r.get("passed") else "fail" sev = r.get("severity") or "" sev_badge = "" if sev: color = sev_cls.get(sev, "#64748b") sev_badge = f'{sev_label.get(sev, sev)}' rec = r.get("recommendation") or "Keep it up" ...[truncated 3193 chars]
Remediation
View remediation
``` Avoid inline executable scripts so that `script-src 'none'` remains effective. 6. Add regression tests using payloads containing `
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The module docstring and most user-facing prompts are written entirely in Chinese and the generated HTML declares zh-CN, but the skill does not offer any language choice or state that it is intended only for Chinese-speaking users. Under the policy, forcing a specific language/locale without opt-in is 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
83% confidence
Finding

The file declares Locale: zh-CN and states that interaction/prompts are primarily in Chinese. Although it mentions English can be provided on request, the default locale is still imposed in the skill definition rather than offered as an explicit user choice, which can conflict with language/locale choice policies.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.