T09 · Insecure Skill Coding Practices
- Location
scripts/chatgpt_image_tailnet.py:13- Finding
Unauthenticated Remote Browser Control over Plain HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for remote ChatGPT image generation, but it controls a remote browser session through a broadly trusted tailnet HTTP API without clear endpoint-level safeguards.
Install only if you own and trust the tailnet browser host, its ChatGPT session, and the network controls around port 9377. Treat prompts and generated images as sent through that remote browser and saved to disk; restrict tailnet ACLs/firewall rules and avoid sensitive prompts unless endpoint authentication and session isolation are added.
scripts/chatgpt_image_tailnet.py:13Unauthenticated Remote Browser Control over Plain HTTP
scripts/chatgpt_image_tailnet.py:139Predictable Shared Session Identity and Uncorrelated Download Consumption
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
e": item.get("mimeType"),
"bytes": item.get("bytes"),
}
time.sleep(1)
raise RuntimeError("No download captured from generated image")
def default_output_path():
ts = datetime.now(UTC).strftime("%Y%m%d-%H%M%S")
return os.path.join(os.path.dirname(__file__), "..", "generated", f"chatgpt-image-{ts}.png")
def main():
ap = argparse.ArgumentParser(description="Generate and download a ChatGPT image through the remote Camoufox browser")
ap.add_argument("prompt", help="Prompt to send to ChatGPT image generation")
ap.add_argument("--base", default=DEFAULT_BASE)
ap.add_argument("--user", default="lotfi")
ap.add_argument("--session", default="chatgpt-image-helper")
ap.add_argument("--output", default=None)
ap.add_argument("--timeout", type=int, default=180)
args = ap.parse_args()
output = os.path.abspath(args.output or default_output_path())
try:
tab = open_tab(args.base, args.user, args.session, C
The skill instructs use of a remote browser over a tailnet IP and performs networked actions, but the manifest declares no explicit tool scope or allowed-tools restrictions. That weakens least-privilege controls and can cause the agent to invoke broader network capabilities than a user would reasonably expect, especially when interacting with a remote residential browser and external services.
The skill explicitly describes downloading generated images and saving or sending them, but the user-facing description does not clearly warn that files will be written to disk. This can surprise users, lead to unintended storage of potentially sensitive or policy-relevant content, and increase risk if saved files are later accessed, synced, or retained longer than expected.
The script sends user-provided prompt content through remote browser-control HTTP endpoints and then to ChatGPT, but the code does not provide a visible warning, confirmation, or privacy notice about that transmission. Network transmission of user data is in scope for missing-warning checks on code files.
This code creates directories and writes a downloaded image file to the local filesystem, but there is no confirmation prompt, warning comment, docstring disclosure, or user-facing log indicating that a file will be created. For a code file, file writes are safety-relevant operations that should have some visible disclosure unless clearly disclosed elsewhere.