Back to skill

Security audit

AIKEK API

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to do what it says, but its setup stores and prints long-lived API credentials in ways that deserve review before installation.

Review this before installing. Use an OS keychain, secret manager, or encrypted vault instead of the plaintext fallback where possible; avoid putting funds in the generated wallet; do not print or paste the token into shell history; and rotate or revoke credentials if they may have been exposed.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:33
Finding

Credential File Is Executed as Shell Code and the API Token Is Printed

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:48
Finding

Private Key and Non-Expiring API Token Are Persisted in Plaintext

Content
View full analysis
~/.config/aikek/credentials chmod 600 ~/.config/aikek/credentials source ~/.config/aikek/credentials ``` The generated token is later appended to the same file: ```bash echo "AIKEK_API_TOKEN=" >> ~/.config/aikek/credentials ``` The Skill persists a Solana private key and a non-expiring bearer token in an unencrypted text file. Setting mode `0600` is a useful access-control measure, but it does not encrypt the secrets or protect them from processes running under the same account, user-level malware, accidental backup exposure, or privileged administrators. The output redirection creates or truncates the file before the later `chmod 600` operation. The resulting initial permissions depend on the user's `umask`, creating a short interval in which the private key could be more broadly readable than intended. The example also does not validate whether the destination is a regular file rather than a symbolic link. The authentication workflow itself does not send the private key over the network. It locally signs a message and sends the public address, signature, and timestamp to the declared HTTPS API endpoint. Sending the bearer token to the declared API in the `Authorization` header is necessary for the documented functionality; plaintext persistence is the unnecessary risk. ### Attack Path 1. The user follows the registration instructions, generating `~/.config/aikek/credentials`. 2. The private key and API token remain stored as plaintext. 3. A same-user process, malware, exposed backup, misconfigured synchronization service, or other actor with access to the file obta ...[truncated 1330 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (13)

Session Persistence

Medium
Category
Rogue Agent
Confidence
86% confidence
Finding

The skill recommends persisting both a Solana private key and a non-expiring API token in a local sourced credentials file. Even with chmod 600, long-lived secrets stored in plaintext on disk materially increase the blast radius of local compromise, backups, accidental inclusion in support bundles, or unsafe sourcing by other scripts.

Content

Scanner excerpt · SKILL.md (reported line 43)May include surrounding context.

md
## Registration

### Step 1: Create a Solana Wallet

Generate a keypair for authentication. **Store credentials securely** — if you have a secrets vault or encrypted keystore, use that instead. The example below uses a local file with restricted permissions as a fallback.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 57)May include surrounding context.

print(f'AIKEK_ADDRESS={kp.pubkey()}') " > ~/.config/aikek/credentials

chmod 600 ~/.config/aikek/credentials source ~/.config/aikek/credentials

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 76)May include surrounding context.

md
message = f"Sign this message to authenticate with AIKEK API.\n\nAddress: {keypair.pubkey()}\nTimestamp: {timestamp}"
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 76)May include surrounding context.

md
message = f"Sign this message to authenticate with AIKEK API.\n\nAddress: {keypair.pubkey()}\nTimestamp: {timestamp}"
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 77)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 98)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 101)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 133)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 136)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 160)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 166)May include surrounding context.

md
signature = keypair.sign_message(message.encode("utf-8"))

response = requests.post(
    "https://api.alphakek.ai/auth/wallet-login",
    json={"address": str(keypair.pubkey()), "signature": str(signature), "timestamp": timestamp},
)
data = response.json()

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs users to print a newly issued long-lived API token to stdout and then manually echo it into a credentials file. This increases the chance of credential exposure through terminal scrollback, screen sharing, logging, copy/paste mistakes, or shell history, especially because the token is explicitly described as non-expiring.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 101)May include surrounding context.

Endpoint: POST https://api.alphakek.ai/knowledge/ask

bash
curl -s -X POST https://api.alphakek.ai/knowledge/ask \
  -H "Authorization: Bearer $AIKEK_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"question": "What is the current sentiment on Solana?", "search_mode": "fast"}'

Static analysis

No suspicious patterns detected.