Back to skill

Security audit

Arbiscan

Security checks for vulnerabilities and agentic risk

Overview

ArbiScan is a disclosed read-only crypto market scanner that queries public exchange APIs and does not request keys, trading authority, persistence, or local data access.

Install and run it in a virtual environment, expect outbound requests to public crypto exchange APIs, and treat results as informational market data rather than financial advice. Avoid combining it with trading/executor skills unless you explicitly review and approve any trade action.

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

Note
Location
scripts/requirements.txt:1
Finding
Unbounded Third-Party Dependency Versions Permit Unreviewed Package Updates## Vulnerability Details **File Location**: `scripts/requirements.txt:1-2`; installation documented at `SKILL.md:484` **Vulnerability Type**: Insecure dependency version constraints **Risk Level**: Low **Relevant code:** ```text requests>=2.28.0 tabulate>=0.9.0 ``` The Skill directs users to install these dependencies without a lock file or integrity verification: ```bash pip install -r requirements.txt ``` ### Technical Analysis Both dependencies use open-ended minimum-version constraints. Consequently, installation can resolve to any future release published under these package names. The project does not provide exact versions, cryptographic hashes, or a reviewed lock file. No malicious, misspelled, or privately sourced package was identified in the audited version. `requests` and `tabulate` are established packages, so this is a supply-chain hardening weakness rather than evidence that the current dependencies are malicious. Exploitation depends on a future upstream compromise, malicious release, package-index compromise, or unexpected incompatible release. The dependencies are imported during normal execution: - `scripts/fetcher.py` imports `requests`. - `scripts/formatter.py` imports `tabulate`. A malicious resolved release could therefore execute code when imported or used by the scanner. ### Attack Path 1. An attacker compromises an upstream package publisher account or otherwise causes a malicious future version of `requests` or `tabulate` to be distributed through the configured package index. 2. A user follows `SKILL.md` and runs `pip install -r requirements.txt`. 3. Because only a minimum version is specified, the package installer accepts the malicious newer release. 4. The user launches the scanner. 5. The malicious dependency executes in the Python process when imported or invoked. This path is contingent on compromise of the dependency distribution chain; the project does not ...[truncated 594 chars]
Remediation
## Remediation Suggestions 1. Pin reviewed dependency versions exactly, for example: ```text requests==2.32.5 tabulate==0.9.0 ``` 2. Generate a reproducible lock file with cryptographic hashes using a dependency-management tool such as `pip-tools`, Poetry, or uv. 3. Require hash verification during installation, for example with `pip install --require-hashes -r requirements.txt`. 4. Review and test dependency upgrades before updating pinned versions. 5. Add automated dependency vulnerability scanning and update monitoring. 6. Install and run the Skill in an isolated virtual environment under a non-privileged user. 7. Document the expected package index and avoid untrusted mirrors or extra indexes.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (49)

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
该技能说明文件整体仅以中文呈现,未见提供其他语言选项、用户选择机制,或声明这是面向特定中文区域/用户群的受限版本。根据语言/locale 政策,强制单一语言而无用户 opt-in 或明确合理说明,属于自然语言层面的政策风险。

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill documents extensive network access to multiple third-party APIs but does not declare an explicit tool scope or permissions boundary. That mismatch can cause the host agent to grant broader-than-necessary capabilities or make the skill’s external communication behavior less transparent to users and policy enforcement.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The intent mapping includes broad phrases like market overview, risk, and scan everything that could trigger large multi-endpoint scans from casual or ambiguous user input. In an agent environment, this can lead to unintended network activity, excess data collection, rate-limit issues, or resource abuse without clear user consent.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Bitget:
```
GET https://api.bitget.com/api/v2/mix/market/current-fund-rate?symbol=BTCUSDT&productType=USDT-FUTURES
Response: { "data": [{ "fundingRate": "0.0001", ... }] }
→ Read: float(response["data"][0]["fundingRate"])
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The module title and function docstring are written in Chinese, while the CLI description and output are otherwise English, indicating a mixed-language skill that implicitly requires Chinese comprehension. Under the policy, forcing a specific language without user opt-in or clear regional justification is a natural-language policy violation.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
Multiple docstrings and user-facing strings in this file are written in Chinese, including the module description and function descriptions, while the file provides no opt-in, fallback, or justification for enforcing that locale. Under the policy, hard-coding a specific language without user choice or documented regional scope is a natural-language policy violation.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The module title and function docstring are written only in Chinese, which imposes a specific language choice in the skill's natural-language interface. The file does not offer any user language selection or document that the skill is intentionally limited to a Chinese-speaking context.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The module title, docstrings, and user-facing console output are written in Chinese, which imposes a specific language on users. The file does not offer a language selection mechanism or explain that the skill is intended only for a Chinese-speaking or region-specific audience.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The module title and user-facing descriptions/messages are written in Chinese, including the docstring and console output. For a general-purpose skill, this imposes a specific language/locale without offering user choice or documenting that the skill is intended only for a Chinese-speaking context.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The file’s natural-language strings and docstrings are written in Chinese, including the top-level description and runtime status output, but there is no indication that the skill is region-specific or that users can choose their preferred language. This creates a locale policy concern because the skill appears to enforce a specific language without opt-in.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The module title and function docstring are written in Chinese, while other user-facing output is in English, indicating an implicit language constraint in the skill's natural-language interface. The file does not offer a language/locale choice or explain that the skill is intentionally region-specific, which matches the language/locale policy violation criteria.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The module title and function docstring are written only in Chinese, while the command-line description/output is otherwise in English. This creates a mixed-language skill experience that effectively imposes a locale choice without user opt-in or a documented region-specific justification.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# 稳定币监控对,path 用点号分隔访问嵌套 JSON
DEPEG_PAIRS = {
    "USDC": [
        {"exchange": "Binance", "url": "https://api.binance.com/api/v3/ticker/price", "params": {"symbol": "USDCUSDT"}, "path": "price"},
        {"exchange": "OKX", "url": "https://www.okx.com/api/v5/market/ticker", "params": {"instId": "USDC-USDT"}, "path": "data.0.last"},
        {"exchange": "Bybit", "url": "https://api.bybit.com/v5/market/tickers", "params": {"category": "spot", "symbol": "USDCUSDT"}, "path": "result.list.0.lastPrice"},
    ],
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.