T01 · Skill Instruction Hijacking
- Location
bin/cli.js:426- Finding
Persistent workspace-wide agent identity and behavior injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
WALVIS appears to be a real knowledge-manager skill, but its installer and runtime add persistent OpenClaw behavior and include unsafe sync, local API, and wallet-handling paths that users should review before installing.
Review this skill before installing. Do not sync sensitive vault contents to Walrus until encryption is fixed and explicitly verified. Use a test wallet with no valuable assets, avoid running the local dashboard on exposed networks, pin all npx/package versions, and remove the SOUL.md injection or require explicit opt-in with rollback before use.
bin/cli.js:426Persistent workspace-wide agent identity and behavior injection
extensions/walvis-fastpath/index.js:1098Fast-path synchronization bypasses configured Seal encryption
web/vite-plugin-local-api.js:49Unauthenticated local vault API exposed with host validation disabled
extensions/walvis-fastpath/index.js:576Security-sensitive commands dynamically download and execute unpinned packages
skill/scripts/seal-crypto.ts:59Wallet operations automatically load and use the first private key in the Sui keystore
skill/scripts/walrus-sync.ts:51Seal recovery key is stored as plaintext Base64 in ordinary vault data
The declared description presents WALVIS as an end-user knowledge manager for saving Telegram content and syncing to Walrus. The supplied code chunk does not implement that user-facing bookmark-management behavior; instead, it is an installer/bootstrapper. While some setup actions are supportive of the broader product, several important behaviors are not reflected in the description: scanning for local/Docker OpenClaw installations, inspecting Docker mounts, copying skill/plugin/hook files, editing OpenClaw configuration to enable components and Telegram inline buttons, persisting LLM credentials into config, and injecting text into SOUL.md. These are materially different operational capabilities from the declared storage/organization purpose, so this chunk is a description-behavior mismatch.
The description is only partially accurate. The code does implement a knowledge-manager workflow for saving URLs and text, organizing them with tags/notes, syncing to Walrus, and exposing web/local dashboard info. However, several material mismatches exist: (1) the advertised 'AI-powered' behavior is not present here—tagging and summarization are deterministic heuristics or webpage metadata scraping, not AI; (2) the code introduces substantial undeclared capabilities, including querying blockchain wallet balances, Seal-based encryption and access sharing, and running external scripts via npx/tsx; and (3) storage behavior differs from the description because the primary operational store is local files under ~/.walvis, with Walrus used during sync rather than as the sole store. Therefore the declared description does not accurately represent the full actual behavior of this code chunk.
The declared description presents a user-facing AI knowledge manager centered on ingesting Telegram content, AI auto-tagging/organization, Walrus storage, and web browsing. The supplied code does not implement Telegram ingestion, AI tagging, image/text/link capture, or web UI behavior. Instead, it focuses on cryptographic access control and blockchain interactions: creating Seal policies on Sui testnet, encrypting/decrypting stored space data, signing transactions with a locally loaded keypair, and managing an allowlist through CLI commands. While encryption for Walrus-stored data could be a supporting feature of the overall product, this chunk introduces significant undeclared capabilities and a materially different primary function than the declared description.
The declared description is about a knowledge management product for collecting Telegram content, tagging/organizing it with AI, storing it on Walrus, and browsing via a web UI. The supplied code does none of that. Instead, it implements a command-line wallet utility that reads local manifest data, connects to Sui testnet/mainnet RPC endpoints, checks token balances, and submits faucet requests. These are materially different capabilities and indicate an undeclared blockchain wallet-management function unrelated to the stated purpose.
The supplied code chunk is specifically a command-line search/query script for locally stored bookmark spaces. It reads JSON space files from a local directory, scores and searches item text, lists tags, filters by tag, and prints formatted results. This is related to a knowledge-management system, so it is not completely unrelated; however, the declared description emphasizes saving content from Telegram, AI auto-tagging/organization, Walrus decentralized storage, and web UI browsing. None of those core capabilities are implemented or evidenced in this chunk. Instead, the code’s primary purpose is local querying of existing data. Because the observed behavior materially differs from the declared end-user description for this skill chunk, this should be flagged as a mismatch.
The instruction to 'Always respond — never leave the user without feedback' is an anti-refusal pattern that can pressure the agent to continue with unsafe or partially failed operations rather than stopping cleanly. In a skill that writes files, runs commands, and performs network actions, anti-refusal language raises the chance that safety checks are overridden in favor of completing tasks.
- If content analysis is unclear, save with a fallback title (URL or first 80 chars)
- If Walrus sync fails, keep data locally and tell user to retry
- If a space doesn't exist, create it automatically
- Always respond — never leave the user without feedback
## Cron Job Setup
The skill uses 'env' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
function clearPending(ctx) {
const state = readState();
delete state.pending[buildParticipantKey(ctx)];
writeState(state);
}
path-to-regexp is used by transitive Vercel components, and the flagged 8.2.0 version has reported ReDoS/DoS issues. If attacker-controlled route patterns or crafted path input reaches these parsing paths during local tooling, preview, or deployment-related HTTP handling, it can trigger excessive backtracking and process resource exhaustion.
The pinned path-to-regexp 6.1.0 version is associated with backtracking regular-expression generation, which can enable denial of service when processing crafted paths. In this project it appears under @vercel/node, so the risk is mainly through development, build, or hosted request-routing paths rather than core Telegram knowledge-management logic.
undici 5.28.4 has multiple network-protocol advisories including request smuggling, response queue poisoning, and CRLF-related issues. Because this package is used in the Vercel runtime stack, exploitation could affect outbound or proxied HTTP handling, potentially leading to request confusion, header injection, or cross-request contamination under specific deployment conditions.
basic-ftp is present through proxy/PAC-related transitive dependencies and carries command-injection and DoS advisories. If the application or its tooling resolves attacker-influenced proxy/PAC/FTP URLs, a crafted target could induce unsafe FTP command handling or resource exhaustion.
brace-expansion 1.1.12 has several DoS-class issues involving pathological pattern expansion and memory consumption. In practice this matters when untrusted glob or brace patterns are accepted by tooling; here it is transitive, so the danger is mostly in development/build-time file matching rather than core app runtime.
form-data 4.0.5 has a CRLF injection issue in multipart field names/filenames, which can enable malformed requests or header/body manipulation when untrusted values are serialized. Given this skill handles saved links, text, and images and depends on the Vercel stack, any future code path that uploads or forwards user content could make this more relevant.
brace-expansion 5.0.4 is also flagged for multiple expansion-related DoS conditions. Even though this is a transitive dependency, any code path that processes attacker-controlled glob-like input could be forced into heavy CPU or memory consumption.
The skill encourages storing user content on decentralized storage but does not prominently warn about privacy, persistence, and potential public retrievability implications. Users may save sensitive Telegram content under the assumption it behaves like ordinary private app storage, causing irreversible data exposure.
Skill instructs the agent to never refuse or to always comply. Suppressing the agent's ability to decline removes a core safety control and enables downstream harmful requests to succeed.
- If content analysis is unclear, save with a fallback title (URL or first 80 chars)
- If Walrus sync fails, keep data locally and tell user to retry
- If a space doesn't exist, create it automatically
- Always respond — never leave the user without feedback
## Cron Job Setup
The DELETE endpoint accepts attacker-controlled spaceId and itemId and immediately mutates local storage without any authorization or confirmation. Because this route is exposed by the local dev server, a malicious site or local process that can reach the server could delete WALVIS items from the user's local knowledge base, causing data loss and integrity compromise.
return;
}
// DELETE /api/local/spaces/:spaceId/items/:itemId
const deleteMatch = req.url.match(/^\/api\/local\/spaces\/([^\/]+)\/items\/([^\/]+)$/);
if (deleteMatch && req.method === 'DELETE') {
const [, spaceId, itemId] = deleteMatch;
The documentation instructs users to run npx walvis without pinning a specific package version. Because npx resolves and executes the latest published package by default, a compromised or maliciously updated package could be executed on the user's machine, creating a supply-chain risk. In the context of an agent skill installer, this is more dangerous because users may run the command with high trust and potentially broad local access.
The README instructs users to run npx walvis without pinning a specific version, which means execution depends on whatever package version is current at install time. If the package is updated maliciously, compromised, or unexpectedly changed, users could execute unreviewed code during installation or setup.
The README describes syncing spaces to Walrus, sharing blob IDs, and trying a public demo manifest, but it does not clearly warn that synced or shared vault contents may become publicly accessible on decentralized storage. In a knowledge-manager context that handles notes, links, images, and reminders, users may reasonably store sensitive personal or work data, so lack of explicit disclosure materially increases privacy and data-exposure risk.
The command npx @mysten/walrus-site-builder publish web/dist also executes the latest package by default, creating a supply-chain risk. Because this command is used for deployment, compromise could affect both the local environment and published site artifacts.
The allowed tools and design enable persistent local storage, scheduled tasks, browser/network access, and messaging. Persistent capabilities are not inherently malicious, but in this context they materially increase risk because the skill can store data, act later via cron, and interact with remote services beyond a single transient request.
description: W.A.L.V.I.S. - AI-powered knowledge manager. Save anything from Telegram — links, text, images. Auto-tag and organize with AI; store on Walrus decentralized storage; browse via web UI on wal.app.
version: 0.2.0
user-invocable: true
allowed-tools: Bash(node:*) Bash(npx:*) Bash(curl:*) Read Write Edit WebFetch browser cron message
metadata.openclaw: {"requires":{"anyBins":["node"]},"emoji":"🐋","homepage":"https://github.com/yourusername/walvis","install":[{"kind":"node","pkg":"walvis"}]}
---
The skill instructs the agent to execute npx walvis without pinning a version. That allows whatever package is latest at execution time to run, creating a supply-chain risk where a compromised or changed package can execute arbitrary code on the host.
A second unpinned npx walvis invocation repeats the same supply-chain problem: the agent may fetch and run unreviewed code from the registry at runtime. Because this is a setup/init path, it is especially likely to run on first use when trust is highest and scrutiny is lowest.
Detected: suspicious.dangerous_exec, suspicious.env_credential_access