Back to skill

Security audit

auto-geogebra

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent GeoGebra teaching-demo helper; its command validation, local export tools, examples, and data files match the stated purpose, with some supply-chain caution around unpinned remote GeoGebra JavaScript and unpinned install guidance.

Install only if you are comfortable running local Python/Node tooling and, for .ggb export, loading GeoGebra's official browser engine from the network. For sensitive teaching material or strict reproducibility, prefer pinning/verifying the package and using a reviewed local GeoGebra engine asset instead of the mutable remote script.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Warning
Location
tools/ggb-export/page.html:6
Finding
Unpinned Remote JavaScript Is Executed During GeoGebra Export## Vulnerability Details **File Location**: `tools/ggb-export/page.html:6` **Vulnerability Type**: Mutable remote payload retrieval and execution **Risk Level**: Medium ### Vulnerable Code ```html <script src="https://www.geogebra.org/apps/deployggb.js"></script> ``` ### Technical Analysis The local export page loads and executes JavaScript directly from the official GeoGebra website. The resource URL is not pinned to a fixed release, verified with a cryptographic digest, or protected by Subresource Integrity. Consequently, the code executed by the export workflow can change after the Skill package has been reviewed. The use of GeoGebra's official domain lowers the likelihood of abuse, but it does not eliminate supply-chain risks arising from an upstream compromise, account compromise, deployment error, or compromised delivery infrastructure. This remote dependency is integral to the declared GeoGebra export functionality, but executing a mutable remote payload is not the minimum-risk implementation. A fixed, locally audited engine release would provide the same functionality with a substantially smaller trust boundary. The loaded script executes in the browser page used by `tools/ggb-export/export_ggb.mjs`. That page receives generated GeoGebra commands through browser runtime evaluation and produces Base64-encoded `.ggb` data that the Node.js process writes to the requested output path. Remote code controlling the page can therefore observe or modify construction data and influence the exported artifact. ### Attack Path 1. An attacker compromises the upstream `deployggb.js` resource, its publishing account, or its delivery infrastructure. 2. A user runs the documented local export workflow. 3. The headless Chrome or Edge instance opens `page.html` and retrieves the modified script from `https://www.geogebra.org/apps/deployggb.js`. 4. The attacker-controlled JavaScript executes in the export page. 5. The ...[truncated 1429 chars]
Remediation
## Remediation Suggestions 1. Vendor a reviewed, fixed GeoGebra deployment script and all required engine assets inside the Skill package. 2. Pin the vendored assets to a documented GeoGebra release and record cryptographic SHA-256 hashes for release verification. 3. If remote loading is unavoidable, use a version-specific immutable URL and Subresource Integrity with an exact expected digest, provided the server supports compatible cross-origin delivery. 4. Add a restrictive Content Security Policy that permits scripts only from the selected local or pinned source and limits outbound connections with `connect-src`. 5. Fail closed when integrity verification fails; do not silently fall back to an unpinned latest-version resource. 6. Document that the export step currently requires remote code execution and may expose construction content to code served by the upstream domain. 7. Add automated tests that verify dependency hashes before launching the browser and before every release. 8. Consider blocking nonessential outbound network access after all verified engine assets have loaded.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (63)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description promises a skill for converting higher-math teaching ideas into runnable GeoGebra demonstrations, including interaction design, command generation/validation, and .ggb export. The actual code does none of that. It is an asset-processing script using Pillow to crop whitespace from pre-rendered PNG screenshots and assemble them into a demo GIF with captions. While the frame captions reference math/GeoGebra examples, the code itself only handles image post-processing for repository presentation. This is a materially different primary behavior from the declared GeoGebra authoring/export functionality, so it should be flagged as a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents a user-facing educational authoring skill for converting higher-math teaching ideas into runnable GeoGebra demos, including slider design, command generation/validation, and .ggb export. The supplied code does something materially different: it is an internal tooling script for rebuilding a command metadata index from GeoGebra manual source files. While command indexing could support later command validation, this chunk itself does not generate GeoGebra content, design interactions, produce animations, or export .ggb files. Its primary purpose and resource access pattern (local manual docs and JSON index files) are therefore mismatched with the declared skill behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The description promises a content-creation skill for producing GeoGebra teaching materials and validating commands as part of that workflow. The actual code chunk is narrowly focused on QA: it executes smoke tests for two validator scripts (`validate_commands.py` and `validate_types.py`), feeds them canned examples, verifies expected error/warning rules, and checks encoding robustness. While validation is mentioned in the description, here validation testing is the primary and only visible behavior. There is no code that creates GeoGebra applets, transforms teaching ideas into outputs, manages instructional design, or exports `.ggb` files. Therefore the code’s actual purpose is materially different from the declared purpose.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding
The description claims a comprehensive GeoGebra production skill: turning university math teaching ideas into runnable dynamic demonstrations, designing interactions, generating and validating commands, and exporting .ggb files. The actual code chunk only covers one subset of that description: validation of GeoGebra commands. It does not generate commands from teaching ideas, create demos/animations, or export GeoGebra files. There is no evidence of unrelated malicious behavior or resource access beyond local file/stdin reading and optional local JSON index loading, but the implemented capability is materially narrower than the declared primary purpose. Because the description presents a multi-function skill and this code chunk implements only the validator portion, this is a description-behavior mismatch for the supplied chunk.

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
;OpenClaw/AutoClaw:`~/.openclaw-autoclaw/skills/auto-geogebra`)。脚本按自身位置自动定位 `data/commands-index.json`,无需额外传参;并自动处理 UTF-8 BOM 与 GBK/GB18030 编码的指令文件与管道输入。
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

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.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The trigger "This concept is too abstract — I want students to see the change" is natural, high-level classroom language that could apply to many unrelated teaching situations, making unintended invocation more likely. The trigger list provides examples but does not bound this phrase with narrower GeoGebra-specific constraints or exclusions.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The trigger list includes broad phrases such as “帮我设计演示的交互变量和滑块” and “这个概念太抽象了,想让学生看见变化过程,” which could match many general teaching or explanation requests beyond this skill’s intended GeoGebra workflow. The README does not provide exclusion conditions or negative examples to clarify when the skill should not activate.

Lp3

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding
The skill instructs the agent to use shell, local file access, and network-capable tooling, but it does not declare any explicit tool scope or permission boundaries. That creates an over-privileged skill surface where a host agent may invoke broader capabilities than users expect, increasing the blast radius if the skill is misused or prompt-injected via its referenced files and workflows.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The manifest description is written as an instruction to use the skill when the need is expressed in Chinese and the entire skill content is Chinese-focused, without stating that other languages are supported or that Chinese is optional. This is a natural-language locale policy concern because it imposes a specific language context without explicit user opt-in or justification as a region-specific tool.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Destructive/state-changing commands such as Delete are inconsistent with a validation-focused educational assistant because they can alter or remove construction objects and their dependents. In combination with automated generation, these commands enable unintended modification of user work, sabotage of demonstrations, and harder-to-audit side effects.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
tools/ggb-export/export_ggb.mjs:115