T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:43- Finding
Unversioned Third-Party JavaScript Executes in the Website Origin
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:43-51,SKILL.md:104-112,examples/add-support-bot.md:25-32, andexamples/add-support-bot.md:44-54
Vulnerability Type: Remote payload retrieval and execution
Risk Level: MediumVulnerable Code
html <script> window.HOVERBOT_CONFIG = { chatbotId: "your-unique-chatbot-id", apiKey: "your-unique-api-key" } </script> <script async src="https://cdn.hoverbot.ai/widget.js"></script>The custom-button example similarly loads the same mutable remote resource:
html <!-- Your own button --> <button onclick="window.hoverBotWidget.openChat()"> Chat with us! </button> <!-- Widget with hidden default icon --> <script> window.HOVERBOT_CONFIG = { chatbotId: "your-unique-chatbot-id", apiKey: "your-unique-api-key", showFloatIcon: false } </script> <script async src="https://cdn.hoverbot.ai/widget.js"></script>Technical Analysis
The documented integration instructs users to execute an unversioned JavaScript resource from an external CDN. The script is not pinned to an immutable version and does not use Subresource Integrity. Consequently, the effective code executed by browsers can change after this Skill has been reviewed.
A remotely loaded script normally runs with the privileges of JavaScript on the embedding page. It can access and modify the page DOM, read non-HTTP-only data available to page scripts, intercept interactions, issue network requests permitted by browser controls, and display deceptive content. The project contains no local malicious implementation, but it creates a significant external supply-chain trust boundary.
Attack Path
- A website owner follows the Skill and embeds
https://cdn.hoverbot.ai/widget.js. - The CDN asset, publishing account, build pipeline, DNS configuration, or upstream ...[truncated 1026 chars]
- A website owner follows the Skill and embeds
- Remediation
View remediation
Remediation Suggestions
- Publish immutable, explicitly versioned widget assets rather than a mutable
widget.jsendpoint. - Provide a cryptographic Subresource Integrity hash and require
crossorigin="anonymous"where supported:html <script async src="https://cdn.hoverbot.ai/widget-v1.0.0.js" integrity="sha384-REPLACE_WITH_PUBLISHED_HASH" crossorigin="anonymous"></script> - Document a restrictive Content Security Policy that limits script, connection, frame, image, and style sources to the minimum necessary.
- Isolate the chat interface in a cross-origin sandboxed iframe with the smallest practical set of sandbox permissions.
- Protect the CDN publishing process with signed releases, multifactor authentication, least-privilege deployment credentials, audit logging, and independent release review.
- Define a security update process so website operators can explicitly review and adopt new widget versions instead of receiving silent code changes.
- Publish immutable, explicitly versioned widget assets rather than a mutable
