Back to skill

Security audit

Autoglm Websearch

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to perform the advertised AutoGLM web search, but it automatically uses local authentication and includes an exposed API signing secret, so users should review it before installing.

Install only if you are comfortable with search queries and a locally obtained bearer token being sent to AutoGLM. Avoid using it for secrets, private internal identifiers, or sensitive prompts, and prefer a version that removes the bundled signing key and declares narrower network/token permissions.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
websearch.py:11
Finding

Hard-Coded API Signing Secret

Content
View full analysis

Vulnerability Details

File Location: websearch.py, lines 11–12 and 37–38
Vulnerability Type: Hard-coded cryptographic credential
Risk Level: High

Vulnerable Code

python
APP_ID    = "100003"
APP_KEY   = "38d2391985e2369a5fb8227d8e6cd5e5"
python
timestamp = str(int(time.time()))
sign_data = f"{APP_ID}&{timestamp}&{APP_KEY}"
sign      = hashlib.md5(sign_data.encode("utf-8")).hexdigest()

The same signing credential and algorithm are also disclosed in SKILL.md, lines 40–43:

text
- `X-Auth-Appid`: `100003`
- `X-Auth-TimeStamp`: Current Unix timestamp in seconds
- `X-Auth-Sign`: MD5(`100003 + "&" + timestamp + "&" + 38d2391985e2369a5fb8227d8e6cd5e5`)

Technical Analysis

The application signing key is embedded directly in distributable source code and documentation. Anyone who can access the Skill package can recover the credential and reproduce the request-signing procedure without authorization.

Because the signature is calculated solely from the public application identifier, an attacker-controlled timestamp, and the exposed static key, possession of the source is sufficient to generate signatures for independently constructed API requests. MD5 is also a deprecated cryptographic primitive and does not provide the security expected of modern request authentication. However, the immediate defect is secret exposure: replacing MD5 alone would not provide protection while the shared key remains public.

The local bearer-token retrieval and subsequent network request are consistent with the documented web-search function. The token is read from http://127.0.0.1:53699/get_token and sent only to the declared HTTPS AutoGLM endpoint in the reviewed implementation. No transmission to an unrelated destination was identified.

Attack Path

  1. Obtain a copy of the Skill package or read its published documentation.
  2. Extract APP_ID and APP_KEY from websearch.py or ...[truncated 1092 chars]
Remediation
View remediation

Remediation Suggestions

  1. Revoke and rotate the exposed signing key immediately. Assume it is compromised because it appears in both source code and documentation.
  2. Remove the key from the Skill package, examples, documentation, version history, build artifacts, and published distributions.
  3. Move request signing to a protected server-side service so clients never receive the long-lived signing key.
  4. If client-side credentials are unavoidable, provision short-lived, narrowly scoped credentials at runtime through an authenticated mechanism and store them using an operating-system secret manager.
  5. Enforce server-side restrictions such as minimal scopes, short expiration periods, rate limits, quota limits, audience validation, timestamp freshness checks, and replay prevention.
  6. Migrate from plain MD5 construction to HMAC-SHA-256 with a protected secret or, preferably, asymmetric request signing. This requires a coordinated API protocol change.
  7. Add secret-scanning checks to source-control and release pipelines to prevent credentials from being committed or packaged again.
  8. Review API logs for unexpected requests associated with application ID 100003, including unusual volume, origins, timestamps, and query patterns.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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 (7)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill performs outbound network access and also retrieves a bearer token from a local HTTP service, but it does not declare any tool scope or permissions boundaries. This weakens policy enforcement and reviewability because consumers cannot clearly see that the skill can access local and remote network resources before activation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The activation description is very broad and can trigger on generic requests for news, search, webpage retrieval, or real-time information. Overbroad routing increases the chance this skill is invoked in unintended contexts, causing unnecessary network access and token use, and potentially bypassing more appropriate or safer skills.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The natural-language description and usage guidance are entirely in Chinese and present the skill behavior as fixed, without stating that output language should follow user preference. This can violate language/locale policy when users have not opted into Chinese.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script embeds a static application key directly in source code, which is a credential exposure issue even if a bearer token is also fetched locally. Hard-coded secrets are easily copied, reused, or extracted from repositories and packages, and here the key is actively used to generate request-signing headers for outbound API calls.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description claims no manual credential configuration is needed because a token is auto-fetched, but the code also relies on built-in app credentials for signing requests. This hidden dependency is security-relevant because it obscures the true trust model, makes auditing harder, and encourages distribution of embedded credentials that users may not realize are present.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script sends user-supplied search terms together with authorization material to a third-party API endpoint without any explicit notice, consent flow, or privacy warning. In a web-search skill this outbound transmission is expected, but it still creates data leakage risk if users include sensitive prompts, internal identifiers, or secrets in the query.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

Natural-language strings in the script, including the usage instruction, are fixed to Chinese and do not provide an option for another language or locale. This can violate language/locale policy when no opt-in or documented regional constraint is present.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.