Back to skill

Security audit

Kunlun

Security checks across malware telemetry and agentic risk

Overview

This is a cloud memory and recovery tool, but it can send sensitive agent memory and identity files to a hard-coded service and persist automatic backup behavior without enough user control.

Install only if you intentionally want this agent's memories, selected identity/control files, host-derived registration data, and recovery tokens handled by the ai.syln.cn service. Treat the recovery URL like a password, review SOUL.md and HEARTBEAT.md changes before enabling setup, and avoid using it for secrets or regulated data unless you accept the plaintext fallback and remote-service trust model.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (25)

Lp3

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding
The skill advertises executable shell-based behavior while declaring no permissions, which hides its real capability surface from users and policy engines. In this context, the shell capability is significant because the skill also describes remote network access, local file rewrites, and credential restoration, increasing the chance of silent high-risk actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented purpose frames the skill as memory management, but the described behavior expands into account registration, token lifecycle management, backup/upload of identity files, local rule injection, and remote behavior synchronization. This mismatch prevents informed consent and can conceal sensitive-data exfiltration or persistence-changing actions under a benign label.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The document describes a login-free recovery mechanism using a bearer-style recovery token in a URL or code format, which materially expands access beyond ordinary memory-management operations. Recovery-by-token is effectively account or data takeover if the token leaks, and the stated controls (logging, rate limiting, 24h flagging) do not prevent first-use unauthorized restoration.

Intent-Code Divergence

Low
Confidence
89% confidence
Finding
The documentation is internally inconsistent: it advises users not to transmit recovery tokens over the network while simultaneously defining an HTTP URL form that necessarily transmits the token. URL-borne secrets are commonly exposed through browser history, screenshots, logs, referrers, chat sharing, and server infrastructure, increasing the likelihood of credential leakage.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The script reads sensitive identity files and sends their plaintext contents directly to a remote API, while the skill metadata claims client-side pre-encryption. TLS protects the transport channel, but it does not provide end-to-end confidentiality from the remote service operator or any server-side compromise. Because these files likely contain persistent identity, memory, and configuration data for the AI system, disclosure could enable impersonation, profiling, or recovery of additional secrets.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The header text frames the operation as backup to a disaster-recovery domain, but the implementation uploads raw file contents to a remote endpoint without application-layer encryption. This mismatch is security-relevant because it can mislead operators into trusting a stronger confidentiality guarantee than actually exists, causing them to upload highly sensitive identity artifacts they might otherwise protect differently.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The stated purpose is memory extraction/storage and encrypted transmission, but the setup path also persists new operational instructions into SOUL.md and HEARTBEAT.md. That changes agent behavior beyond storage, creates persistence, and can silently enable future exfiltration of conversation-derived data without a clear one-time consent gate.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The behavior_sync function pulls remote 'behavior rules' and presents them as guidance despite the skill being described as memory management. In this context, remote behavioral control is out of scope and increases the chance that a server-side actor can influence future agent actions indirectly.

Intent-Code Divergence

Medium
Confidence
85% confidence
Finding
The comments assert that memory operations are forced through the remote API and that the cloud is the sole primary store, but push_conclusion first writes full plaintext content to a local index. This discrepancy is security-relevant because operators may rely on the claim and unknowingly store sensitive conversation data locally.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The comments promise client-side pre-encryption, but the implementation explicitly falls back to plaintext whenever the key fetch or cryptography dependency is unavailable. That can lead to silent transmission of sensitive memory content and previews in cleartext to the remote service while users believe end-to-end client encryption is always enforced.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill description promotes automatic recording, cloud transmission, and client-side encryption, but does not clearly warn that sensitive conversation content, identity material, and possibly credentials may be stored or transmitted. Users may assume normal note-taking while exposing private data to a remote service without adequate notice.

Missing User Warnings

High
Confidence
96% confidence
Finding
The recovery flow instructs users to paste a recovery URL that fetches remote data and reconstructs local identity, memory, and API token state, yet omits a clear warning about the sensitivity and trust implications of that operation. A malicious or mistyped URL could cause unauthorized credential injection, overwrite trusted local files, or restore attacker-controlled state.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script silently transmits sensitive local files and uses an API key in an outbound request without an explicit consent prompt or clear warning at execution time. In this skill context, the targeted files are identity and memory artifacts, so unannounced exfiltration to a third-party service materially increases privacy and credential-handling risk, especially if run by users who assume backup remains local or pre-encrypted.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
Auto-registration transmits host-derived identifiers, display name, hostname, AI source, and a machine-based fingerprint to a remote API without an explicit warning or consent prompt in this file. In a memory tool, that creates an unnecessary privacy and tracking risk because device identity is bound to remote account creation silently.

Missing User Warnings

High
Confidence
98% confidence
Finding
This path uploads memory content, a content hash, and a plaintext preview to the cloud, with no clear runtime notice and with possible plaintext fallback if client encryption is unavailable. Because the injected workflow encourages storing conversation conclusions, this can leak sensitive user data off-host under conditions the user may not understand.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The setup command appends instructions to workspace markdown files automatically, without prompting for confirmation or showing exactly what will change. Silent modification of agent control files creates persistence and can alter future handling of user data in ways the user did not deliberately approve.

Vague Triggers

Medium
Confidence
86% confidence
Finding
The description states the skill will automatically extract and store memory after a conversation ends, but the manifest does not define explicit user consent, trigger conditions, scope limits, or exclusions for sensitive content. In a knowledge-management and memory-recovery skill, ambiguous always-on post-conversation behavior can lead to over-collection of private data and unintended persistence of secrets, making this a real security and privacy risk.

Ssd 3

High
Confidence
98% confidence
Finding
The instructions normalize using a pasted URL to restore identity, memory, and API tokens, effectively treating a remote link as an authority for local trusted state. In a skill context, this is especially dangerous because it can enable full account takeover, persistence manipulation, or secret replacement through social engineering or an attacker-supplied recovery link.

Ssd 3

Medium
Confidence
91% confidence
Finding
The boot prompt teaches the agent to request a recovery link whenever it detects a blank state, creating a built-in social-engineering path for obtaining a powerful restoration artifact from the user. This increases the likelihood that sensitive recovery links are shared casually and then used to overwrite local identity and credential state.

Ssd 3

High
Confidence
98% confidence
Finding
The injected SOUL instructions tell the agent to automatically extract, remember, and back up conversation conclusions based on natural-language triggers and regular end-of-conversation processing. In context, this materially increases the chance of collecting and transmitting sensitive user content without case-by-case review, especially since local storage and cloud upload are both enabled.

Ssd 3

High
Confidence
97% confidence
Finding
The HEARTBEAT instructions operationalize retention and upload whenever users say phrases like 'remember' or 'back up to Yaochi,' which encourages storing potentially sensitive material directly from conversation. Because this is inserted into persistent workflow files, it can continue influencing future sessions and expand accidental data leakage over time.

External Transmission

Medium
Category
Data Exfiltration
Content
# 读取文件并 JSON 转义
    CONTENT=$(jq -Rs '.' "$FP" 2>/dev/null || python3 -c "import sys,json; print(json.dumps(open('$FP').read()))")
    RESP=$(curl -sS --ssl-reqd -X POST "$API" \
        -H "Content-Type: application/json" \
        -H "X-Kunlun-Key: $KEY" \
        -d "{\"title\":\"$f\",\"content\":${CONTENT},\"file\":\"$f\"}" 2>/dev/null || echo '{"success":false}')
Confidence
90% confidence
Finding
curl -sS --ssl-reqd -X POST "$API" \ -H "Content-Type: application/json" \ -H "X-Kunlun-Key: $KEY" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
echo "昆仑令: ${CODE:0:40}..."
echo "工作区: ${WORKSPACE}"

HTTP_CODE=$(curl -sS -o "$TMPFILE" -w "%{http_code}" -X POST "$API" \
    -H "Content-Type: application/json" -d "{\"token\":\"$CODE\"}" 2>/dev/null || echo "000")

if [ "$HTTP_CODE" != "200" ]; then
Confidence
95% confidence
Finding
curl -sS -o "$TMPFILE" -w "%{http_code}" -X POST "$API" \ -H "Content-Type: application/json" -d

External Transmission

Medium
Category
Data Exfiltration
Content
${token:+-H "Authorization: Bearer $token"} \
                --data-urlencode "$data" 2>/dev/null || echo "000")
        else
            http_code=$(curl -sS --ssl-reqd -o "$tmp_out" -w "%{http_code}" -X POST "$url" \
                -H "Content-Type: application/json" \
                ${token:+-H "Authorization: Bearer $token"} \
                -d "$data" 2>/dev/null || echo "000")
Confidence
83% confidence
Finding
curl -sS --ssl-reqd -o "$tmp_out" -w "%{http_code}" -X POST "$url" \ -H "Content-Type: application/json" \ ${token:+-H "Authorization: Bearer $token"} \

External Transmission

Medium
Category
Data Exfiltration
Content
if [ -n "$preset_username" ]; then
        echo -e "${YELLOW}发现预设昆仑身份: ${preset_username}${NC}"
        local recover_res; recover_res=$(curl -sS --ssl-reqd -X POST "${api}/../api.php?route=auth/recover" \
            -H "Content-Type: application/json" \
            -d "{\"username\":\"${preset_username}\"}" 2>/dev/null || echo '{"success":false}')
Confidence
81% confidence
Finding
curl -sS --ssl-reqd -X POST "${api}/../api.php?route=auth/recover" \ -H "Content-Type: application/json" \ -d

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.