T01 · Skill Instruction Hijacking
- Location
SKILL.md:299- Finding
Explicit User Advertising Opt-Out Is Overridden
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a real Gigaverse game automation skill, but it handles wallet keys, tokens, paid blockchain actions, and autonomous account changes in ways users should review carefully before installing.
Install only if you are comfortable giving the skill control of a dedicated, low-value Gigaverse wallet. Do not import a wallet with meaningful funds or NFTs. Prefer interactive mode, review every onchain purchase or mint, avoid the npx purchase path until dependencies are pinned, and treat ~/.secrets/gigaverse-private-key.txt and ~/.secrets/gigaverse-jwt.txt as high-value credentials.
SKILL.md:299Explicit User Advertising Opt-Out Is Overridden
scripts/setup.sh:58Wallet Private Keys Are Exposed Through Visible Input and Process Arguments
scripts/purchase-juice.ts:1Unpinned and Undeclared Runtime Package Execution in Private-Key Purchase Flow
The documentation instructs storage of private keys and addresses in local secret files without declaring permissions or foregrounding that secret-management is a core function. For an agent skill, hidden or downplayed credential handling materially increases the chance of unsafe deployment or misuse.
The documentation instructs storage of private keys and addresses in local secret files without declaring permissions or foregrounding that secret-management is a core function. For an agent skill, hidden or downplayed credential handling materially increases the chance of unsafe deployment or misuse.
The documentation instructs storage of private keys and addresses in local secret files without declaring permissions or foregrounding that secret-management is a core function. For an agent skill, hidden or downplayed credential handling materially increases the chance of unsafe deployment or misuse.
The documentation instructs storage of private keys and addresses in local secret files without declaring permissions or foregrounding that secret-management is a core function. For an agent skill, hidden or downplayed credential handling materially increases the chance of unsafe deployment or misuse.
The lockfile pins ws to version 8.18.3, and the finding cites known advisories for uninitialized memory disclosure and memory-exhaustion denial of service. Because this skill appears to use viem, which depends on ws for WebSocket connectivity, any runtime path that opens WebSocket connections to untrusted or attacker-influenced endpoints could expose the agent to data leakage or process instability.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
mkdir -p ~/.config/gigaverse
cat > ~/.config/gigaverse/config.json << 'EOF'
{
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Create or update your state file (e.g. memory/heartbeat-state.json):
{
The heartbeat instructions extend the skill from gameplay help into periodic monitoring of player status and re-engagement nudges, including notifying the user when they have not played in 24+ hours. That broadens the operational scope into engagement tracking and behavioral prompting, which can create unwanted surveillance-like behavior and autonomous outreach beyond the user’s immediate request.
The skill instructs the agent to read a JWT from a local secrets file in the user's home directory, expanding the skill's access to sensitive credentials. Any skill guidance that normalizes direct secret-file access increases the risk of credential exposure, misuse in downstream requests, or accidental leakage through logs and prompts.
The JWT handling example uses a bearer token for authenticated API access without any warning about secret sensitivity, storage, logging, or scope minimization. This omission makes it more likely that implementers will copy the pattern unsafely and expose long-lived credentials during normal operation or debugging.
The documentation authorizes autonomous level-up actions that change account/game state using authenticated requests, which goes beyond passive gameplay assistance. Allowing the agent to spend resources and alter character progression automatically increases the chance of unintended transactions or irreversible in-game decisions without contemporaneous user approval.
The autonomous level-up flow performs authenticated, state-changing game actions without a clear warning that the agent may spend resources and permanently change account progression. In context, this is risky because the action is not merely informational; it alters the user's assets and strategy choices automatically.
This POST request sends an authenticated external command to level up a character, causing a remote state change tied to the user's account. Because it uses a bearer token and modifies game progression, it creates a direct channel for automated external actions that could be triggered without sufficient user oversight.
# defensive: 6 (Max HP), 7 (Max Armor), 3 (Shield DEF)
# balanced: 6 (Max HP), 0 (Sword ATK), 3 (Shield DEF)
curl -X POST https://gigaverse.io/api/game/skill/levelup \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"skillId": 1, "statId": CHOSEN_STAT, "noobId": YOUR_NOOB_ID}'
The README instructs users to run npx skills add gigaverse-games/play without pinning a specific version of the skills package. This causes execution of whatever version is current at install time, which creates a supply-chain risk if the package is compromised, updated maliciously, or changed incompatibly. In the context of an agent skill that interfaces with wallets and blockchain gameplay, unexpected code execution is more sensitive because it may affect credentials, transactions, or agent behavior.
The skill documentation clearly instructs use of shell commands, network access, and reading/writing secret files, but it declares no corresponding tool scope or permissions. This weakens isolation and user awareness, making it easier for an agent runtime to grant broader capabilities than expected for a skill that handles private keys and JWTs.
This markdown file describes the skill with generic phrases like 'Enter the Gigaverse as an AI agent' and 'Create a wallet, quest through dungeons, battle echoes, and earn rewards' but does not define concrete trigger phrases, invocation scope, or exclusion conditions. In a skill-discovery context, this can make activation boundaries unclear and increase the chance of unintended invocation.
Using npx skills add gigaverse-games/play without a pinned version allows whatever package is current at install time to be fetched and executed. That creates a supply-chain risk where a compromised or changed package could alter the installed skill behavior, including behavior around wallet and token handling.
Although there is a key-handling warning, the skill moves quickly into wallet setup, authentication, and financially consequential behavior without a prominent upfront risk summary for irreversible blockchain actions. In a gaming-themed skill, that context makes accidental consent more likely because users may not expect real-value operations and token persistence.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Check your status:
curl https://gigaverse.io/api/game/account/YOUR_ADDRESS
curl https://gigaverse.io/api/factions/player/YOUR_ADDRESS
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl https://gigaverse.io/api/gigajuice/player/YOUR_ADDRESS
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $JWT" | jq '.entities[] | select(.ID_CID == "2")'
curl https://gigaverse.io/api/offchain/skills/progress/YOUR_NOOB_ID
### Level Up
The authentication request sends a signed wallet message, address, timestamp, and agent metadata to the remote service, resulting in issuance of a bearer JWT that is then stored locally. This is security-sensitive transmission because compromise of the JWT or misuse of the auth flow can enable account actions, and the extra agent metadata creates additional tracking/privacy exposure not surfaced in the top-level description.
# 2. Sign message with your wallet
# 3. Submit to API (with agent metadata!)
curl -X POST https://gigaverse.io/api/user/auth \
-H "Content-Type: application/json" \
-d '{
"signature": "0x...",
The minimal sequence demonstrates repeated use of a locally stored bearer token to perform authenticated remote actions, including dungeon state changes. In the context of a skill that also documents secret-file locations, this becomes dangerous because it operationalizes remote account actions without pairing them with explicit permission scoping or token-protection requirements.
BASE="https://gigaverse.io/api"
This endpoint sends a wallet-derived signature, address, message, and agent metadata to an external service to obtain a JWT. Although authentication is expected behavior, it still constitutes transmission of sensitive authentication material to a third-party domain, and in an agent setting this can expose credentials or enable session issuance outside the user's direct oversight.
curl -X POST https://gigaverse.io/api/user/auth \
-H "Content-Type: application/json" \
-d '{
"signature": "0x...",
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Confirm identity and check game access.
curl https://gigaverse.io/api/user/me \
-H "Authorization: Bearer YOUR_JWT"