Back to skill

Security audit

Hyperframes

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with video creation, but its local design picker can render generated or user-derived HTML without sanitization and its workflow uses unpinned CLI commands.

Review this skill before installing. It appears intended for HyperFrames video work, not deception, but use a pinned local hyperframes installation, avoid running bare npx commands, do not open a generated design picker built from untrusted prompts or data unless the HTML is sanitized, and treat transcription examples as uploading audio to third-party providers.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
templates/design-picker.html:890
Finding
Generated and User-Influenced Data Is Inserted Through innerHTML Without Runtime Sanitization<![CDATA[ ## Vulnerability Details **File Location**: `templates/design-picker.html:890-924` and `templates/design-picker.html:1269-1304` **Vulnerability Type**: DOM-based HTML injection and cross-site scripting **Risk Level**: High ### Vulnerable Code ```javascript var tokens = { "{{bg}}": bg, "{{fg}}": fg, "{{ac}}": pal.accent, "{{mt}}": pal.muted || pal.mid || al(fg, 0.4), "{{hf}}": tp.headline.family, "{{hw}}": tp.headline.weight, "{{bf}}": tp.body.family, "{{bw}}": tp.body.weight, "{{cr}}": mb.corners || "4px", "{{pad}}": mb.padding || "20px", "{{gap}}": mb.gap || "16px", "{{shadow}}": mb.shadow || "none", "{{sf}}": al(fg, 0.06), "{{g}}": al(fg, 0.06), "{{fg3}}": al(fg, 0.03), "{{fg6}}": al(fg, 0.06), "{{fg8}}": al(fg, 0.08), "{{fg15}}": al(fg, 0.15), "{{ac3}}": al(pal.accent, 0.03), "{{ac5}}": al(pal.accent, 0.05), "{{ac25}}": al(pal.accent, 0.25), "{{prompt_headline}}": (PROMPT && PROMPT.headline) || "Your Headline", "{{prompt_sub}}": (PROMPT && PROMPT.subline) || "A subline for your product.", }; var preview = arch.preview_html || ""; Object.keys(tokens).forEach(function (k) { preview = preview.split(k).join(tokens[k]); }); var tagHtml = [tp.headline.family, pal.name, CORNERS[mb.corners_index || 1].name] .map(function (t) { return '<span class="mood-token">' + t + "</span>"; }) .join(""); card.innerHTML = '<div class="mood-preview"><div style="transform:scale(0.38);transform-origin:top left;width:263.16%;min-height:263.16%;">' + preview + '</div></div><div class="mood-info"><div class="mood-name">' + mb.name + '</div><div class="mood-desc">' + mb.description + '</div><div class="mood-tokens">' + tagHtml + "</div></div>"; ``` The full-size preview repeats the same unsafe pattern: ```javascript var tokens = { "{{bg}}": bg, "{{fg}}": fg, "{{ac}}": ac, "{{mt}}": mt, "{{sf}}": al(fg, 0.06), "{{hf}}": t.headline.family, "{{hw}}": t.headline.weight, "{{bf}}": t.body. ...[truncated 3539 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Sanitize `preview_html` immediately before insertion using a well-maintained allowlist-based HTML sanitizer. 2. Permit only the minimum required elements and attributes. Explicitly reject: - `<script>`, `<iframe>`, `<object>`, `<embed>`, and active metadata elements. - All attributes beginning with `on`. - `javascript:`, `vbscript:`, and unsafe `data:` URLs. - SVG and MathML unless a strict, separately reviewed allowlist is implemented. - Form controls or navigation elements that are unnecessary for previews. 3. Use `textContent` for names, descriptions, labels, tags, and prompt text rather than concatenating them into HTML. 4. Construct static picker controls with DOM APIs such as `createElement`, `setAttribute`, and `appendChild`. 5. Validate colors, font weights, dimensions, corner radii, spacing, and shadow values against strict schemas before using them in inline styles. 6. Treat generated JSON as untrusted. Perform deterministic schema and security validation after generation rather than relying on instructions given to the generating agent. 7. Consider rendering architecture previews in sandboxed iframes with a restrictive `sandbox` attribute and an explicit Content Security Policy. 8. Add a Content Security Policy that blocks inline event handlers, restricts scripts to approved origins, and limits outbound connections. 9. Add regression tests containing event handlers, malformed attributes, dangerous URL schemes, SVG payloads, and closing-tag injection. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:228
Finding
Unpinned npx Commands Can Download and Execute Unreviewed Package Versions<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:228-236`, `SKILL.md:380-397`; related commands also appear in `patterns.md:35` and `references/transcript-guide.md:82-105` **Vulnerability Type**: Unsafe dependency resolution and implicit remote package execution **Risk Level**: Medium ### Vulnerable Code ```bash # Dev preview uses declared defaults npx hyperframes preview # Render with overrides npx hyperframes render --variables '{"title":"Q4 Report","theme":"dark"}' --output q4.mp4 # Or from a JSON file npx hyperframes render --variables-file ./vars.json ``` The mandatory validation workflow also directs the agent to run unpinned commands: ```markdown - [ ] `npx hyperframes lint` and `npx hyperframes validate` both pass - [ ] `npx hyperframes inspect` passes, or every reported overflow is intentionally marked ``` ```bash npx hyperframes inspect npx hyperframes inspect --json ``` ### Technical Analysis The documented commands invoke `npx hyperframes` without an exact version and without requiring a preinstalled local binary. Depending on the npm/npx version and local project state, `npx` may resolve and download the latest matching registry release when the package is absent. This means the code executed by the workflow is not necessarily the code that existed when the Skill was reviewed. A compromised registry account, malicious release, dependency compromise, or unexpected future package version could change the effective executable payload. The project’s separate `scripts/package-loader.mjs` implements stronger controls for helper dependencies: it rejects unpinned specifications, asks for approval, disables lifecycle scripts, and uses a temporary installation directory. Those controls do not protect the independent `npx hyperframes` commands documented throughout the Skill. ### Attack Path 1. The user or agent runs the documented workflow in a project where `hyperframes` is not installed locally. 2. `npx` resolves the unqualified ...[truncated 1145 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `hyperframes` to an exact audited version in the project manifest and lockfile. 2. Install dependencies explicitly during a controlled setup phase rather than allowing operational commands to trigger downloads. 3. Invoke only the local binary, for example: ```bash npx --no-install hyperframes preview npx --no-install hyperframes render --variables-file ./vars.json npx --no-install hyperframes lint npx --no-install hyperframes validate npx --no-install hyperframes inspect ``` 4. Alternatively, use the package manager’s local executable mode with an immutable lockfile and frozen-install option. 5. Verify package integrity through the lockfile and trusted registry configuration. 6. In automated environments, disable implicit package installation and fail if the expected local executable is missing. 7. Align all dependency execution with the safeguards already present in `scripts/package-loader.mjs`: exact versions, explicit approval, lifecycle scripts disabled where practical, and temporary isolated installation. 8. Document the expected package name, exact version, and integrity source so future audits can identify the executable payload deterministically. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (34)

Whitespace Padding

Medium
Category
Prompt Injection
Content
On the root `<html>` element:

| Attribute                    | Required | Values                                                                                                                         |
| ---------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `data-composition-variables` | No       | JSON array of declared variables (id/type/label/default) — drives Studio editing UI and provides defaults for `getVariables()` |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The section titled 'Language Rule (Non-Negotiable)' prescribes strict language-handling behavior and explicitly treats English differently, while not offering the user a choice or stating that this is a region- or compliance-specific constraint. Under the policy rule, forcing a language/locale behavior without opt-in can constitute a natural-language policy violation.

Whitespace Padding

Medium
Category
Prompt Injection
Content
These tools are available in the HyperFrames runtime. Use them when they solve a real problem — not every composition needs all of them.

| Tool                | What it does                                                              | Access                                                                                         | When it's useful                                                             |
| ------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| **pretext**         | Pure-arithmetic text measurement without DOM reflow. 0.0002ms per call.   | `window.__hyperframes.pretext.prepare(text, font)` / `.layout(prepared, maxWidth, lineHeight)` | Per-frame text reflow, shrinkwrap containers, computing layout before render |
| **fitTextFontSize** | Finds the largest font size that fits text on one line. Built on pretext. | `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })`             | Overflow prevention for long phrases, portrait mode, large base sizes        |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The phrase "Run on every composition" is a very broad trigger description for a markdown skill file and does not clearly define the boundaries of when the skill should or should not activate. Although later lines mention a few exceptions, the invocation condition still overlaps with a wide range of ordinary composition tasks and lacks explicit trigger phrases or negative examples.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding
The documentation instructs use of `npx hyperframes` without pinning a specific package version. `npx` may fetch the latest published package at execution time, which creates a supply-chain risk if a malicious or compromised release is published or if behavior changes unexpectedly.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The guide recommends uploading audio to OpenAI and Groq for transcription but does not clearly warn that media content leaves the local environment and is shared with third-party services. Audio may contain sensitive speech, personal data, or confidential recordings, so omission of a privacy/data-handling warning can lead to unintended disclosure.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Generate with word timestamps, then import
curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F file=@audio.mp3 -F model=whisper-1 \
  -F response_format=verbose_json \
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding
This example again uses `npx hyperframes` without an exact version, allowing execution of whatever version is current in the registry at runtime. In a developer workflow document, that can expose users to supply-chain compromise or non-reproducible behavior.

External Transmission

Medium
Category
Data Exfiltration
Content
**Groq Whisper API** (fast, free tier available):

```bash
curl https://api.groq.com/openai/v1/audio/transcriptions \
  -H "Authorization: Bearer $GROQ_API_KEY" \
  -F file=@audio.mp3 -F model=whisper-large-v3 \
  -F response_format=verbose_json \
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding
The command at this location uses unpinned `npx`, which can retrieve and execute a changed or malicious package version. Because this is operational guidance, users may copy-paste it directly, increasing practical exploitability.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding
An unversioned `npx hyperframes` invocation creates the same registry trust problem as the earlier examples: the package resolved at runtime may not be the one the documentation author tested. That weakens integrity and reproducibility in a workflow that may handle local media files.

Whitespace Padding

Medium
Category
Prompt Injection
Content
Think about what the transition _communicates_, not just what it looks like.

| Mood                     | Transitions                                                                                                                          | Why it works                                                                                |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| **Warm / inviting**      | Light leak, blur crossfade, focus pull, film burn · **Shader:** thermal distortion, light leak, cross-warp morph                     | Soft edges, warm color washes. Nothing sharp or mechanical.                                 |
| **Cold / clinical**      | Squeeze, zoom out, blinds, shutter, grid dissolve · **Shader:** gravitational lens                                                   | Content transforms mechanically — compressed, shrunk, sliced, gridded.                      |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Whitespace Padding

Medium
Category
Prompt Injection
Content
Think about what the transition _communicates_, not just what it looks like.

| Mood                     | Transitions                                                                                                                          | Why it works                                                                                |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| **Warm / inviting**      | Light leak, blur crossfade, focus pull, film burn · **Shader:** thermal distortion, light leak, cross-warp morph                     | Soft edges, warm color washes. Nothing sharp or mechanical.                                 |
| **Cold / clinical**      | Squeeze, zoom out, blinds, shutter, grid dissolve · **Shader:** gravitational lens                                                   | Content transforms mechanically — compressed, shrunk, sliced, gridded.                      |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The document prescribes rapid jitter, large positional offsets, blur, and glitch-style overlays without any accessibility or comfort warning. In a video/animation skill, these effects can plausibly trigger discomfort, motion sensitivity, or photosensitive responses when used directly by an agent, especially because the guidance is framed as implementation-ready transition behavior.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/package-loader.mjs:229