T09 · Insecure Skill Coding Practices
- Location
scripts/generate_image.py:49- Finding
Unrestricted API endpoint can receive credentials and local image contents over plaintext or attacker-controlled connections
- Content
View full analysis
str: base = base.strip().rstrip("/") if not base: raise SystemExit("Missing VOLCENGINE_ENDPOINT / ARK_BASE_URL / OPENAI_BASE_URL") if base.endswith("/images/generations"): return base if base.endswith("/api/v3"): return base + "/images/generations" if base.endswith("/v1"): return base + "/images/generations" return base + "/v1/images/generations" ``` ```python def local_file_to_data_url(path_str: str) -> str: path = pathlib.Path(path_str).expanduser().resolve() if not path.exists(): raise SystemExit(f"Local image not found: {path}") mime = mimetypes.guess_type(str(path))[0] or "application/octet-stream" encoded = base64.b64encode(path.read_bytes()).decode("ascii") return f"data:{mime};base64,{encoded}" ``` ```python parser.add_argument("--endpoint", default=getenv("VOLCENGINE_ENDPOINT", "ARK_BASE_URL", "OPENAI_BASE_URL")) parser.add_argument("--api-key", default=getenv("VOLCENGINE_API_KEY", "ARK_API_KEY", "OPENAI_API_KEY")) ``` ```python url = build_url(args.endpoint) output_dir = pathlib.Path(args.output_dir).expanduser().resolve() ensure_dir(output_dir) download_dir = pathlib.Path(args.download_dir).expanduser().resolve() images = collect_images(args.image, args.image_file) payload = { "model": args.model, "prompt": args.prompt, "size": args.size, "n": args.n, "quality": args.quality, "response_format": args.response_format, "sequential_image_generation": args.sequential_image_generation, "stream": parse_bool(args.stream), "watermark": parse_bool(args.watermark), } if images: payload["image"] = images[0] if len(images) == 1 else images if ...[truncated 2782 chars]- Remediation
View remediation
