T09 · Insecure Skill Coding Practices
- Location
sync_worker.py:29- Finding
Etherscan API Key Exposed in Request URLs and Worker Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
Crypto Genie is a purpose-aligned crypto address checker, but its main check path, storage behavior, credentials guidance, and background worker are materially broader than some of its security claims disclose.
Install only after reviewing the privacy and operational tradeoffs: checking an uncached address can contact Etherscan with your API key, the tool keeps local wallet-analysis history, and cron/systemd sync should be bounded and protected with locks. Treat results as heuristic risk signals, not proof that an address is safe or unsafe, and avoid storing real API keys in shell history, crontab lines, or broadly readable files.
sync_worker.py:29Etherscan API Key Exposed in Request URLs and Worker Output
sync_worker.py:283Scheduled Batch Worker Can Accumulate Indefinitely
crypto_check_db.py:215Attacker-Controlled Blockchain Messages Are Returned to the Agent Without Isolation
crypto_check_db.py:127Primary Check Command Performs Undisclosed Real-Time Network Synchronization
README.md:251Documentation Encourages Persistent Plaintext API-Key Storage
database.py:15Wallet Query History Is Stored with Insufficient Filesystem Protection
install.sh:11Installer Silently Executes Dependency Artifacts Without Hash Verification
sync_worker.py:210Risk Scoring Reports Unverified Contracts Without Performing Verification
The README and manifest messaging claim 'No external API calls during checks,' but the same document later states that unknown addresses trigger real-time Etherscan lookups and local storage. This is a security-relevant documentation integrity issue because users may expose queried wallet addresses and rely on inaccurate privacy assumptions when using the skill.
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
890abcdef12345678
python3 crypto_check_db.py 0x1234... --json
./check_address.sh 0x1234...
### 4. Optional: Background Sync Worker
For bulk processing or scheduled syncs:
```bash
# Run continuously (processes queue)
python3 sync_worker.py
# Process N addresses then stop
python3 sync_worker.py --max-jobs 20
# Add to crontab for periodic syncing
# Every 10 minutes, process 30 addresses
*/10 * * * * cd /path/to/crypto-genie && source venv/bin/activate && python3 sync_worker.py --max-jobs 30
| Document | Description |
|---|---|
| SKILL.md | Complete usage guide with examples and commands |
| DATABASE_ARCHITECTURE.md | Technical deep dive into database schema and architecture |
| SECURITY.md | Security best practices and encryption details |
| CHANGELOG.md | Version history and m |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
.env
*.key
secrets/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
.env
*.key
secrets/
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
The overall presentation can cause users to believe they are interacting with a fully local, comprehensive security assistant, while the documented model is closer to a queued ETL workflow with heuristic reporting and external data dependence. In a security skill, this kind of trust inflation is particularly risky because a false sense of safety can directly lead to financial loss.
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
# Check address (instant, database-only)
python3 crypto_check_db.py 0x1234567890abcdef1234567890abcdef12345678
Manual mode:
python3 sync_worker.py
# Runs continuously, processes queue
Batch mode:
python3 sync_worker.py --max-jobs 20
# Process 20 addresses then exit
Cron schedule (recommended):
# Add to crontab
*/10 * * * * cd ~/.openclaw/workspace/skills/crypto-genie && source venv/bin/activate && ETHERSCAN_API_KEY="key" python3 sync_worker.py --max-jobs 30
User checks address
↓
┌──────────────────┐
│ crypto_check_db │ ← Queries local database ONLY
└────────┬─────────┘ (No external API calls)
│
↓
┌──────────────────────┐
│ Local SQLite DB │
│ ~/.config/crypto-
The script's check path conditionally performs a live synchronization via Etherscan when an address is missing from the local database, directly contradicting the stated 'No external API calls during checks!' and 'database-first' design. This hidden network behavior expands the trust boundary, can leak user-queried addresses to a third party, and makes a supposedly offline/safe verification flow depend on external data and availability.
The module docstring describes the tool as a database-only checker, yet the implementation performs live scanner synchronization for unknown addresses. In a security tool handling potentially sensitive wallet investigations, this mismatch can mislead users into exposing addresses, timing, and investigative intent to third parties.
The skill metadata and behavior claim checks are database-only with no external API calls, but a cache miss causes the code to fetch data from an external blockchain scanner using an API key. This creates undisclosed network exfiltration of the user-supplied address and defeats the privacy and trust assumptions a caller would reasonably rely on.
Pinning FastAPI to 0.109.0 retains a version with a known security advisory (CVE-2024-24762). In an API-serving skill, framework vulnerabilities can expose request handling, documentation endpoints, or application behavior to denial of service or other compromise depending on how the framework feature is used.
Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.
Pinning cryptography==42.0.5 may pull wheels bundled with vulnerable OpenSSL components, as reflected by multiple advisories. Since this skill advertises secure key storage, weaknesses in the crypto stack are especially concerning because they can undermine confidentiality, integrity, or trust in cryptographic operations.
The code makes multiple outbound requests to Etherscan even though the skill metadata claims 'No external API calls during checks.' In a security-focused skill, that mismatch is dangerous because users or operators may rely on the manifest for privacy and trust decisions, while address data and operational behavior are actually sent to a third party.
The manifest describes the skill as making no external API calls during checks, suggesting a fully local safety assistant. This document states the design includes a background sync worker that fetches data from Etherscan, meaning the skill's actual architecture depends on external API access to perform its analysis pipeline.
The skill fetches transaction data from Etherscan, decodes input payloads, and stores decoded messages locally, but the documentation does not prominently warn users that potentially sensitive on-chain message content will be retained on disk. This creates a privacy and data-handling risk because users may assume the tool performs ephemeral checks only, while it actually persists analyzed content in a local database.
The deployment examples place the Etherscan API key directly in shell commands, crontab entries, and systemd environment lines without warning about secret exposure. This can leak credentials through shell history, process listings, configuration files, or world-readable service metadata, enabling unauthorized API use or key abuse.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Enable:
sudo systemctl enable crypto-sync-worker
sudo systemctl start crypto-sync-worker
No suspicious patterns detected.