T09 · Insecure Skill Coding Practices
- Location
scripts/crypto-kline.py:28- Finding
Unvalidated User Input Interpolated into SQLite Statements
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent Binance market-data collector, with some implementation and proxy-trust caveats but no evidence of hidden control, credential theft, destructive behavior, or agent hijacking.
Install only if you are comfortable with a Chinese-language Binance data collector that makes public Binance API requests and writes local SQLite databases. Prefer running it with a trusted or no proxy, and avoid passing untrusted symbol, interval, or database-path values through automation.
scripts/crypto-kline.py:28Unvalidated User Input Interpolated into SQLite Statements
scripts/binance-kline.js:25Node.js Proxy Mode Removes End-to-End TLS Protection
The file presents all user-facing instructions and descriptions exclusively in Chinese, which can amount to forcing a specific language without offering the user a choice. The policy for this audit flags language or locale constraints when they are not optional or explicitly justified.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
CREATE TABLE {symbol}_{interval}_kline (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp INTEGER,
open_time TEXT,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
function fetchKlines(symbol, interval, limit = 100, proxy = null) {
return new Promise((resolve, reject) => {
const url = `https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=${interval}&limit=${limit}`;
const options = {
timeout: 30000
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
function fetchKlines(symbol, interval, limit = 100, proxy = null) {
return new Promise((resolve, reject) => {
const url = `https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=${interval}&limit=${limit}`;
const options = {
timeout: 30000
The file-level description is entirely in Chinese, and all user-facing CLI messages and help text in the script are also Chinese, which imposes a locale/language choice on users without opt-in. The policy explicitly calls out forced language or locale as a natural-language violation when no choice is offered.
The file’s descriptive comments and runtime usage/help text are entirely in Chinese, and the script does not offer any locale or language selection. This is a natural-language policy concern when a skill imposes a specific language without user opt-in.
No suspicious patterns detected.