T09 · Insecure Skill Coding Practices
- Location
scripts/paper_trading/service.py:64- Finding
Unauthenticated Trading API Can Be Exposed on Non-Loopback Interfaces
- Content
View full analysis
None: parser = argparse.ArgumentParser(description="Paper trading backend service") parser.add_argument("--host", default=DEFAULT_HOST) parser.add_argument("--port", type=int, default=DEFAULT_PORT) parser.add_argument("--db-path", default=str(get_default_db_path())) parser.add_argument("--match-interval", type=int, default=5) parser.add_argument("--valuation-interval", type=int, default=10) parser.add_argument("--idle-valuation-interval", type=int, default=300) args = parser.parse_args() ensure_runtime_dir() engine = PaperTradingEngine(db_path=args.db_path) print(f"paper trading service listening on http://{args.host}:{args.port} db={args.db_path}") run_server(args.host, args.port, engine, match_interval=args.match_interval, valuation_interval=args.valuation_interval, idle_valuation_interval=args.idle_valuation_interval) ``` ```python def do_POST(self) -> None: try: payload = self._payload() path = urlparse(self.path).path if path == "/accounts": return self._json({"status": "success", "data": self.engine.create_account(payload["account_id"], float(payload.get("initial_cash", 100000.0)))}, code=201) if path.startswith("/accounts/") and path.endswith("/reset"): return self._json({"status": "success", "data": self.engine.reset_account(path.split("/")[2], payload.get("initial_cash"))}) if path == "/accounts/default": return self._json({"status": "success", "data": self.engine.set_default_account(payload["account_id"])}) if path.startswith("/accounts/") and path.endswith("/cash-adjust"): account_id = path.split("/")[2] re ...[truncated 4756 chars]- Remediation
View remediation
