T09 · Insecure Skill Coding Practices
- Location
scripts/weapp_automation.py:126- Finding
JavaScript Injection Through an Unescaped WebSocket Endpoint
- Content
View full analysis
str: ws_endpoint = self.config.ws_endpoint if hasattr(self.config, 'ws_endpoint') else 'ws://localhost:9420' base_script = ''' const automator = require('miniprogram-automator'); async function runTest() { const miniProgram = await automator.connect({ wsEndpoint: '%%WS_ENDPOINT%%' }); const results = []; try { let page = await miniProgram.currentPage(); // Generated automation operations are inserted here. %s await miniProgram.disconnect(); console.log('BATCH_RESULT: ' + safeStringify(results)); } catch (error) { results.push({ success: false, error: error.message }); console.log('BATCH_RESULT: ' + safeStringify(results)); await miniProgram.disconnect(); process.exit(1); } } runTest(); ''' # Action snippets are generated above this return statement. return base_script.replace('%%WS_ENDPOINT%%', ws_endpoint) % "".join(js_code) ``` The generated script is subsequently executed at `scripts/weapp_automation.py:104-112`: ```python result = subprocess.run( ["node", script_path], capture_output=True, text=True, encoding="utf-8", errors="replace", timeout=self.config.timeout * len(steps), env=env, ) ``` `scripts/console_reader.py:94-106`: ```python ws_endpoint = self.ws_endpoint script_content = f''' const automator = require('miniprogram-automator'); async function getLogs() {{ try {{ const miniProgram = await automator.connect({{ wsEndpoint: '{ws_endpoint}' }}); ``` `scripts/console_read ...[truncated 2314 chars]- Remediation
View remediation
