Cinematic Scroll

Security checks across malware telemetry and agentic risk

Overview

This skill is a disclosed cinematic website-building toolkit; its network, shell, file, and credential use are mostly optional, user-initiated, and aligned with that purpose.

Install only if you want an agent to create or modify cinematic website files and run local Node/npm tooling. Use fal.ai features only with a key you are willing to spend from, keep .env.local out of git, and self-host CDN assets if third-party browser requests are not acceptable. Review troubleshooting reset commands before running them because they can remove dependency/cache files and overwrite template files.

SkillSpector

By NVIDIA
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (105)

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
No manifest is available, so the skill's purpose must be treated as unknown. In that context, dynamically fetching executable decoder assets from unpkg.com is an unjustified capability because it extends behavior beyond local rendering into third-party network dependency loading.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The document states the DOM contract uses `[data-title]` children, but the title reveal generator later targets `.title` and `.title .word` selectors instead. This is an active contradiction in the documentation-to-code mapping, because an implementer following the stated contract would not produce the elements the code animates.

Intent-Code Divergence

Low
Confidence
86% confidence
Finding
The output section says the compiler produces `gsap-scroll-config.ts`, but earlier and elsewhere the document describes a working Node compiler that emits runnable JS/HTML outputs such as `scene.js`, `film.js`, `preview.html`, and `index.html`. This is an intent/documentation contradiction rather than mere incompleteness, because the file claims a specific output contract that does not match the described compiler behavior.

Missing User Warnings

Low
Confidence
81% confidence
Finding
This HTML file fetches fonts from Google Fonts and JavaScript libraries from jsDelivr, which causes the user's browser to make third-party network requests. The file contains no visible notice, comment for users, or other disclosure that external resources will be contacted.

Missing User Warnings

Low
Confidence
89% confidence
Finding
This is a markdown file, so SQP-2 applies to omissions in user-facing warnings. The README states that Three.js and @google/model-viewer load from a CDN, which implies external network requests and execution of third-party code, but it does not explicitly warn users about that behavior or its privacy/network implications.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
The document declares `lang="en"`, which hard-codes English as the page language. Under the stated policy, forcing a specific language without user opt-in or clear justification is a natural-language locale policy issue.

Missing User Warnings

Low
Confidence
89% confidence
Finding
This HTML code loads resources from Google Fonts and jsDelivr, which causes the user's browser to contact third-party services and transmit standard request metadata such as IP address and user agent. Within this file, there is no user-facing notice, warning, or comment directed to users explaining that third-party network requests occur.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
The HTML root declares `lang="en"`, which sets the page's language to English. In this file, there is no indication that language selection is optional or that English-only behavior is justified by a region-specific requirement.

Missing User Warnings

Low
Confidence
87% confidence
Finding
This markdown file states that the page loads GSAP + ScrollTrigger from a CDN and also uses Google Fonts, which causes third-party network requests when the page is opened. The README explains the architecture but does not explicitly warn users about the external requests or related privacy/integrity implications.

Missing User Warnings

Low
Confidence
93% confidence
Finding
This HTML file loads fonts from Google Fonts and JavaScript from jsDelivr, which causes the user's browser to contact third-party services and transmit routine request metadata. The file contains technical comments about the libraries but no user-facing warning, notice, or description that external network requests will occur.

Missing User Warnings

Low
Confidence
91% confidence
Finding
This markdown file describes how to run the skill and notes in passing that the page makes an external request to Google Fonts, but it does not clearly warn users about the privacy/network implication of contacting a third-party service. For markdown files, external network behavior that may affect privacy should be explicitly disclosed as a warning.

Natural-Language Policy Violations

Low
Confidence
90% confidence
Finding
The file uses normative language requiring Chrome DevTools for scroll-jank measurement and later defines Chrome-centric testing/CI expectations. This imposes a specific tooling environment as policy-like instruction without user opt-in or an explicit justification that other locales/tools are unsupported.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The text states that cinematic motion is required on every device and that a flat, motionless mobile page is a failure mode, allowing only a single exception for `prefers-reduced-motion: reduce`. This natural-language requirement removes user choice for users who may want less motion without changing OS settings, creating a policy-style constraint on experience without explicit opt-in.

Natural-Language Policy Violations

Medium
Confidence
83% confidence
Finding
This line says touch devices must still receive scroll-coupled motion and that only reduced-motion mode may disable all motion. That creates a rigid natural-language policy for mobile behavior rather than offering a user-selectable experience, which is a policy concern when motion sensitivity or device constraints exist outside the OS reduced-motion setting.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
The HTML root element sets `lang="en"`, which enforces English as the page language. Under the policy, locale/language constraints should either offer user opt-in/choice or be clearly documented as justified for a region-specific tool, neither of which is present in this file.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The document declares `lang="en"`, which hard-codes English as the page language. Under the policy for natural-language violations, forcing a specific language without offering user choice or documenting a justified locale constraint can be a policy issue.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This markdown file includes irreversible cleanup commands such as `rm -rf node_modules package-lock.json`, deleting `.next`, and copying template files over the current project. Although framed as an emergency recovery procedure, the section does not explicitly warn users that these commands remove local state and may overwrite project files before they run them.

File System Enumeration

Medium
Category
Data Exfiltration
Content
**Verify installation:**
```bash
ls -la ~/.openclaw/workspace/skills/cinematic-scroll-skill/
# Should show: SKILL.md, examples/, templates/, references/, .git/
```
Confidence
60% confidence
Finding
ls -la ~/

Context Leakage

High
Category
Data Exfiltration
Content
1. Download this repository as a ZIP file (or clone it)
2. Open Claude Desktop → Settings → Capabilities → Skills
3. Click **"Upload skill"**
4. Drag the `cinematic-scroll-skill` folder into the upload dialog
5. Confirm

**Verification:**
Confidence
85% confidence
Finding
upload dialog

External Transmission

Medium
Category
Data Exfiltration
Content
2. Test the generation route (replace values with your chapter):

   ```bash
   curl -X POST http://localhost:3000/api/generate-edition-asset \
     -H "Content-Type: application/json" \
     -d '{
       "chapterId": "prologue",
Confidence
60% confidence
Finding
curl -X POST http://localhost:3000/api/generate-edition-asset \ -H "Content-Type: application/json" \ -d '{ "chapterId": "prologue", "subject": "classical marble bust beside a

External Transmission

Medium
Category
Data Exfiltration
Content
# (Next.js only reads .env.local at startup)
npm run dev

# 3. Test with curl (bypass the app to isolate the issue)
# ⚠️ CREDENTIAL SAFETY: this reads the key from the $FAL_KEY env var — do NOT paste
#    the literal key on the command line (it lands in your shell history and process
#    list). Run in a private shell, don't share the command or its output/logs (the
Confidence
60% confidence
Finding
curl (bypass the app to isolate the issue) # ⚠️ CREDENTIAL SAFETY: this reads the key from the $FAL_KEY env var — do NOT paste # the literal key on the command line (it lands in your shell history

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**Why:** A 4K uncompressed texture is tens of megabytes of VRAM and a slow decode; an un-compressed glTF mesh balloons both download and parse time. Both stall first paint and pressure GPU memory until layers fall back to CPU rasterization.
**Replacement:** Cap textures at 2K unless there is a named reason to go higher, use compressed formats (KTX2 / Basis) where supported, and compress geometry with Draco / meshopt. Budget and pipeline live in `ASSETS-3D.md` and `references/3d-stack.md`.

### 5.6 Never force VR locomotion or move the user without consent
**Why:** Moving the camera (the user's head) in VR while they stand still is the classic trigger for simulator sickness. Forced acceleration, smooth strafing, or camera shake in an immersive session can make people physically ill.
**Replacement:** Default to teleport / snap-turn comfort locomotion, keep a stable horizon, and never translate the user without an explicit input. The 2D page must be complete without XR; XR is a session the user chooses to enter. See `references/webxr.md` for comfort and safety rules.
Confidence
75% confidence
Finding
without consent

Credential Access

High
Category
Privilege Escalation
Content
"env"
  ],
  "security": {
    "note": "All sensitive capabilities are optional and user-initiated. FAL_KEY is a billable secret — store it in a gitignored .env.local or a secret manager, never in source or version control. Audit mode uses the agent's own browser/fetch access to analyze a user-supplied URL (not a local headless binary); the request may trigger analytics or side effects on the target — only audit sites you own or are authorized to test. Mode A output pages load GSAP + ScrollTrigger and three.js from cdn.jsdelivr.net, the three.js Draco decoder and @google/model-viewer from unpkg.com, and Google Fonts from fonts.googleapis.com / fonts.gstatic.com (SRI-pinned where the format allows — ES-module import maps cannot carry SRI) — self-host these if your deployment policy requires it. See manifest.md → Security & Privacy and audit-mode.md.",
    "secrets": [
      "FAL_KEY",
      "GENERATE_API_SECRET"
Confidence
60% confidence
Finding
.env.local

Credential Access

High
Category
Privilege Escalation
Content
if (unauthorized) return unauthorized;

  if (!process.env.FAL_KEY) {
    console.error('[generate-edition-asset] FAL_KEY not set — add it to .env.local');
    return NextResponse.json({ error: 'Image generation not configured.' }, { status: 503 });
  }
Confidence
60% confidence
Finding
.env.local'

Credential Access

High
Category
Privilege Escalation
Content
const MODEL_ID = flags.model ?? env.FAL_IMAGE_MODEL ?? 'fal-ai/flux-2-pro';

if (!FAL_KEY && !flags.dryRun) {
  console.error('\n[generate-chapter-assets] FAL_KEY missing. Set it in .env.local or your shell.\n');
  exit(1);
}
Confidence
60% confidence
Finding
.env.local

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal