T09 · Insecure Skill Coding Practices
- Location
stock_scanner/scanner.py:1- Finding
Hard-Coded Alpha Vantage API Credential Exposed in Source and Network Requests
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is Review because it bundles real personal financial records and can post financial summaries to a fixed Discord channel without clear confirmation controls.
Install only after removing real personal and financial records from the package, rotating the exposed Alpha Vantage key, removing broad /workspace/memory access, and making Discord delivery opt-in with a visible payload preview and verified destination. Treat the current package as exposing sensitive household financial context to anyone who can read the skill files.
stock_scanner/scanner.py:1Hard-Coded Alpha Vantage API Credential Exposed in Source and Network Requests
CASH_FLOW_ANALYSIS.md:1Plaintext Personal, Banking, Benefits, and Household Financial Data Included in the Skill Package
SKILL.md:54Quarterly Workflow Requests Overbroad Agent Memory Access Before External Financial Disclosure
This section gives specific financial, tax, legal, and insurance recommendations tailored to an identifiable household situation without any disclaimer or encouragement to seek qualified professional advice. Users may treat the guidance as authoritative and act on mortgage prepayment, trust setup, investment allocation, benefits eligibility, or tax planning in ways that are unsuitable or harmful for their circumstances.
The skill explicitly instructs posting personal financial information such as net worth, savings changes, debt status, FIRE progress, and overdue action items to a Discord channel, but provides no privacy controls, audience restrictions, or minimization guidance. Even if the channel is intended to be private, Discord is an external service and this creates unnecessary exposure of sensitive financial data that could be disclosed to unintended recipients or retained outside the user's control.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
### Files
- `/workspace/skills/catalyst-edge/SKILL.md` (this)
- `/workspace/skills/catalyst-edge/FIRE_MODEL.md` — current numbers
- `/workspace/skills/catalyst-edge/PORTFOLIO_ANALYSIS.md` — portfolio details
- `/workspace/skills/catalyst-edge/HISTORICAL_PICKS.md` — past picks + performance
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
return load_json(LAST_SCAN_F)
else:
print("[Pipeline] last_scan.json is stale — running scan_once.py ...")
result = subprocess.run(
[sys.executable, str(SCAN_DIR / "scan_once.py")],
capture_output=True, text=True
)
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
"--target", DISCORD_CHANNEL_ID,
"--file", tmp,
]
result = subprocess.run(cmd, capture_output=True, text=True)
return result
# ═══════════════════════════════════════════════════════════════════════════════
The top-level docstring describes the skill as a stock scanner that pulls live RSI, price, and momentum for a watchlist, which suggests data retrieval and analysis behavior. However, the implementation also writes structured scan output to last_scan.json and appends historical entries to scan_log.md, adding persistent side effects not reflected in the documentation.
The fetch helper performs outbound HTTP requests to Alpha Vantage, and the scan function sends user-selected tickers as query parameters. While network access is core to a stock scanner, there is no nearby user-facing disclosure or code comment warning that watchlist contents and request metadata are sent to a third-party service.
The code saves detailed scan output to last_scan.json and appends summaries to scan_log.md, creating persistent local records of scan activity. There is no confirmation prompt, warning comment, or user-facing disclosure that this data will be stored on disk.
Multiple timestamps are formatted with a fixed 'CDT' suffix, which imposes a specific locale/timezone assumption on all users. This is a natural-language locale policy issue because the skill presents localized time information without opt-in or justification.
No suspicious patterns detected.