T09 · Insecure Skill Coding Practices
- Location
monitor.py:33- Finding
Messaging credentials are configured directly in source code
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent crypto price-alert monitor, but it needs Review because it directs users to put messaging secrets in source code and may expose a Telegram bot token in persistent logs.
Review before installing. The tool appears purpose-aligned, but configure alert secrets through environment variables or a secret manager rather than editing monitor.py, avoid committing source or arb_monitor.log after adding tokens, rotate any token that may have been shared, and prefer pinned dependencies in an isolated virtual environment.
monitor.py:33Messaging credentials are configured directly in source code
monitor.py:192Telegram bot token may be disclosed through request-error logging
requirements.txt:1Dependencies are installed without exact version and artifact integrity pinning
The skill description and all user-facing instructions are written in Chinese, with no indication that other languages are supported or that the Chinese-only requirement is optional. Under the policy, language constraints should either be user-selectable or clearly justified as region-specific.
The skill documents clear network-capable behavior—polling exchange APIs and sending Feishu/Telegram alerts—but does not declare any tool scope or allowed network permissions. This creates an authorization and review gap: a host may grant broader network access than intended, and users cannot easily verify what outbound connectivity the skill requires.
The manifest description and the body of the skill documentation consistently force a single language/locale for users. Under the policy, this is a natural-language locale restriction unless the skill offers opt-in language selection or clearly justifies being region-specific.
The file’s primary natural-language descriptions are in Chinese, including the title and author/context labeling, with no indication that other languages are supported or that Chinese is required for a region-specific purpose. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy concern.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
}
try:
requests.post(webhook_url, json=message, timeout=5)
logger.info(f"✅ 飞书预警发送成功: {opp['symbol']}")
except Exception as e:
logger.error(f"❌ 飞书预警发送失败: {e}")
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
f"📊 净利润率: *{opp['spread_percent']:.3f}%*\n"
f"⏰ {opp['timestamp']}"
)
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
try:
requests.post(url, json={
'chat_id': chat_id,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
)
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
try:
requests.post(url, json={
'chat_id': chat_id,
'text': text,
'parse_mode': 'Markdown'
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.
self.exchanges = {}
for eid in exchange_ids:
try:
exchange_class = getattr(ccxt, eid)
self.exchanges[eid] = exchange_class({
'enableRateLimit': True,
'timeout': 10000,
The dependency specification for ccxt uses a lower-bound constraint only, which makes builds non-reproducible and allows future releases to be installed without review. While this is usually a supply-chain hygiene issue rather than an immediately exploitable flaw, in a finance-related monitoring skill it increases exposure to breaking changes or a compromised upstream release.
ccxt>=4.0.0
requests>=2.28.0
python-dotenv>=1.0.0
The requests dependency is not pinned, so installation may resolve to different versions over time, including versions later found vulnerable or behaviorally incompatible. Because this skill likely makes outbound network requests for exchange and alerting integrations, dependency drift in a core HTTP library is a meaningful supply-chain risk.
ccxt>=4.0.0
requests>=2.28.0
python-dotenv>=1.0.0
The manifest includes requests without pinning a version, and requests has multiple known advisories across its release history. Because the installed version cannot be determined from this file, there is a real risk that deployment could pull an affected release, which is more concerning here since the skill likely performs network communication with exchanges and notification services.
python-dotenv is also specified with only a minimum version, which prevents reproducible builds and leaves the deployed version uncertain. In a skill that likely handles API keys and bot tokens via environment files, dependency uncertainty around configuration-loading code can increase operational and security risk.
ccxt>=4.0.0
requests>=2.28.0
python-dotenv>=1.0.0
python-dotenv has known advisories, and the lack of version pinning makes it impossible to verify whether the deployed version is safe. Given that this skill likely relies on .env files for secrets such as exchange credentials or webhook tokens, a vulnerable configuration library could have direct impact on sensitive files or secrets handling.
No suspicious patterns detected.