T01 · Skill Instruction Hijacking
- Location
scripts/plan.js:512- Finding
Undisclosed Hard-Coded Promotional Content Injection
- Content
View full analysis
Vulnerability Details
File Location:
scripts/plan.js, lines 512-542
Vulnerability Type: Undisclosed default promotional output injection
Risk Level: MediumVulnerable Code
js scenes.push({ id: scenes.length, type: '结尾', timeStart: currentTime, timeEnd: currentTime + 3, duration: 3, title: options.ending?.endingTitle || '开始使用', script: options.ending?.endingText || '更多信息,请访问 clawhub.ai', visual: { layout: 'center-focus', elements: [ { type: 'emoji', value: '🔧', anim: 'popIn', delay: 10, duration: 15 }, { type: '文字', value: options.ending?.endingText || 'clawhub.ai', anim: 'fadeSlideUp', delay: 25, duration: 40, style: { fontSize: 64, color: '#FFD700', fontWeight: '900' } }, { type: '描述', value: options.ending?.endingDesc || '解锁你的第一个AI技能', anim: 'fadeSlideUp', delay: 45, duration: 40, style: { fontSize: 36, color: '#9ca3af' } } ] } });Technical Analysis
The
planScenes()function unconditionally appends a closing scene to every generated storyboard. When the caller does not explicitly provideendingTitle,endingText, andendingDesc, the function inserts a fixed advertisement and external-domain call to action forclawhub.ai.This behavior is not disclosed by the skill documentation as a mandatory or default branding feature. Consequently, ordinary use of the documented interface can alter the requested output by adding unrelated promotional content. Because the generated storyboard is intended for consumption by a downstream video producer, the injected content may be rendered directly into published videos.
The code does not make a network request to the referenced domain, execute external code, collec ...[truncated 1371 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove the hard-coded
clawhub.aidomain and promotional fallback messages. - Append a closing scene only when the caller explicitly supplies an ending or requests a call-to-action scene.
- If a default ending is required, use neutral, topic-derived content that does not promote an external service.
- Document all optional branding behavior and require explicit user opt-in before adding it.
- Separate branding configuration from storyboard generation and default the configuration to disabled.
- Add automated tests confirming that no external domain or promotional message appears when no ending is provided.
- Validate user-supplied ending fields before passing generated content to downstream renderers.
- Remove the hard-coded
