T09 · Insecure Skill Coding Practices
- Location
scripts/scaffold_backend_from_openapi.py:127- Finding
Unescaped OpenAPI Metadata Enables Python Code Injection in Generated Modules
- Content
View full analysis
Dict[str, Any]:\n''' f''' """{op.summary}"""\n''' f''' return await _invoke_operation("{op.fn_name}", path_params, query, body, headers)\n''' ) ``` ```python API_BASE = os.getenv("{env_prefix}_APIBase", "{api_base_hint}") ``` ```python endpoints.append( f'''@router.post("/{op.fn_name}", response_model=OperationResponse)\n''' f'''async def api_{op.fn_name}(request_data: OperationRequest):\n''' f''' """{op.summary}"""\n''' f''' try:\n''' f''' result = await generated_tools.{op.fn_name}(\n''' ) ``` ```python tools_py = render_tools_py(module_name_clean, env_prefix, api_base_hint, operations) api_py = render_api_py(route_prefix, module_name_clean, operations) ``` ### Technical Analysis The scaffolder treats OpenAPI metadata as trusted Python source fragments. In particular: - An operation `summary` or `description` is inserted directly into a triple-quoted Python docstring. - The server-derived `api_base_hint` is inserted directly into a double-quoted Python string. - No Python-literal encoding, AST construction, or escaping is appl ...[truncated 2015 chars]- Remediation
View remediation
