Back to skill

Security audit

Btc Price Tracker

Security checks for vulnerabilities and agentic risk

Overview

This BTC price tracker is purpose-aligned and disclosed, with some install, privacy, and dependency hardening notes but no evidence of hidden or malicious behavior.

Install in a virtual environment, avoid the optional sudo symlink, review or delete the bundled sample alerts, and do not put sensitive trading details in alert names if Telegram delivery is enabled. Pin dependencies before production use.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unbounded Third-Party Dependency Version

Content
View full analysis
=2.25.0 ``` Related installation instructions in `SKILL.md:19` and `README.md:9`: ```bash pip install requests ``` ### Technical Analysis The dependency declaration accepts every `requests` release from version 2.25.0 onward. The project does not provide a lockfile, an upper version boundary, or cryptographic hashes for dependency verification. The documented direct installation command similarly resolves whichever package version is available from the configured Python package index at installation time. Consequently, the installed dependency set can change without any modification to the audited project. If a permitted future release or the package distribution channel is compromised, users may install code that was not included in this audit. This is a supply-chain integrity weakness rather than evidence that the current `requests` package is malicious. ### Attack Path 1. An attacker compromises a future permitted `requests` distribution, a dependency selected by it, or the package index used by the victim. 2. A user follows the documented installation command or installs from `requirements.txt`. 3. Because the dependency is not pinned and no hashes are enforced, the resolver accepts the attacker-controlled release. 4. Malicious installation or runtime code executes in the context of the user running `pip` or the BTC tracker. 5. The malicious package can access resources available to that user, including local files, environment variables, and network connectivity. ### Impact Assessment Successful exploitation could provide arbitrary code execution with the privileges of the account performing installation or running the ...[truncated 464 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · README.md (reported line 26)May include surrounding context.

python btc_price_tracker.py price

或者创建软链接到 PATH

sudo ln -s $(pwd)/btc_price_tracker.py /usr/local/bin/btc-price-tracker btc-price-tracker price

text

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 · README.md (reported line 104)May include surrounding context.

解决方案:确保当前用户对技能目录有写入权限

bash
chmod 755 /home/ming/.openclaw/workspace/skills/btc-price-tracker/

问题:Telegram 通知未发送

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly describes sending alert content through Telegram and requiring a Telegram bot token, but it does not clearly warn users that notifications are delivered via an external third-party messaging service. This can lead users to disclose financial monitoring activity, alert names, and price thresholds without understanding the privacy implications or retention/visibility risks associated with Telegram.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code sets OPENCLAW_LANG to zh by default, and the user-facing strings throughout the CLI are Chinese. This imposes a specific language/locale unless the environment variable is explicitly changed, which is a natural-language policy concern when no user choice or opt-in is offered in the skill itself.

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 · btc_price_tracker.py (reported line 17)May include surrounding context.

python
# 配置
ALERTS_FILE = os.path.join(os.path.dirname(__file__), 'alerts.json')
PRICE_API = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,cny,sgd&include_24hr_change=true"
LAST_PRICE_FILE = os.path.join(os.path.dirname(__file__), 'last_price.json')

# 防封 IP 配置

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 · check-alerts.py (reported line 16)May include surrounding context.

python
# 配置
ALERTS_FILE = os.path.join(os.path.dirname(__file__), 'alerts.json')
PRICE_API = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,cny,sgd&include_24hr_change=true"
LAST_PRICE_FILE = os.path.join(os.path.dirname(__file__), 'last_price.json')

# 防封 IP 配置

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The module docstring says the script sends Telegram messages when alerts trigger, and the function docstring says it "sends notifications." However, the implemented behavior is only console output via print statements, with comments explicitly noting that actual sending is not implemented. This is an intent-code divergence in the inline documentation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The alert names use Chinese text ("高价警报" and "低价警报") in a file that otherwise uses English field names and USD currency, which suggests a fixed language choice without any visible opt-in or documented locale scope. Under the policy, hard-coding a specific language can be a natural-language policy issue unless the locale constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The module docstring and all visible runtime messages are written only in Chinese, which imposes a specific language on users without opt-in. Under the stated policy, locale or language restrictions should either be optional for the user or explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency is specified as requests>=2.25.0, which permits any newer version to be installed and makes builds non-reproducible. This increases supply-chain risk because different environments may resolve to different releases, including versions with undiscovered or newly disclosed vulnerabilities.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.25.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding

Because requests is not pinned, it is impossible to verify whether installation will select a version affected by known advisories. In a skill context, this uncertainty is more dangerous than a purely cosmetic dependency issue because runtime behavior may vary by environment and could expose the agent to known library flaws if an affected release is resolved.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.exposed_secret_literal, suspicious.insecure_tls_verification

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py:131

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py:91

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py:57

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
venv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py:1251

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_internal/network/auth.py:93

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py:214

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py:323

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py:423

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py:988

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py:231

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py:102

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/requests/adapters.py:258

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/requests/sessions.py:323

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/urllib3/connection.py:807

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/urllib3/connectionpool.py:1073

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
venv/lib/python3.12/site-packages/urllib3/contrib/socks.py:116

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_internal/network/session.py:304

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py:183

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py:353

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py:443

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py:454

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py:113

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py:795

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py:137

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/urllib3/connection.py:951

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py:84

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
venv/lib/python3.12/site-packages/urllib3/util/ssl_.py:353