Back to skill

Security audit

Email Compatibility

Security checks for vulnerabilities and agentic risk

Overview

This skill is a scoped HTML email compatibility helper with a disclosed caniemail data fetch/cache path and no evidence of hidden control, credential access, persistence, or unsafe execution.

Install only if you are comfortable with a Node-based email compatibility linter that reads the HTML/CSS files you point it at, fetches public caniemail data by default, and stores a local cache. Use --offline when you want to avoid network access.

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
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 20)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 25)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 37)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 41)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 44)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 99)May include surrounding context.

md
`scripts/caniemail.mjs` queries the caniemail.com dataset. Node 24+ and nothing

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file states the tool "works offline against a bundled dataset snapshot" with "no dependencies and no install step," implying a local/offline design, but later documentation says the dataset is fetched from caniemail.com, cached for 24 hours, and supports --offline/--refresh. This is an active contradiction in the documented behavior of the skill, not merely missing detail.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documented command synopsis lists available commands and options, but the later "Data freshness" section instructs users to pass --offline and --refresh, which are not declared in the command list. That makes the inline documentation internally inconsistent about the interface the skill exposes.

Content

No source excerpt is available for this finding.