Wrap is pre-1.0. Only the latest release receives security fixes.
Use GitHub private vulnerability reporting. Include the affected version, reproduction, impact, and known mitigations. Do not open a public issue for an undisclosed vulnerability.
- A pairing URL is an interactive-shell credential. Anyone with the complete
fragment can control that one shared terminal. Use
wrap regenif it may have escaped andwrap removewhen sharing is finished. - Browser frames are protected with fragment-derived AES-256-GCM keys. The fragment is not sent in HTTP requests, logs, process arguments, or persisted host state.
- Cloudflare terminates TLS and serves the browser application. A malicious or compromised edge could replace that JavaScript and attack key establishment. Application encryption protects against passive intermediaries, not an active edge, compromised browser, or compromised host.
- The HTTP/WebSocket listener binds only to loopback and checks the exact Quick Tunnel origin. Handshakes, clients, messages, and queues are bounded.
- Browser input has the authority of the user running Wrap. Wrap is not a sandbox and needs no elevated privileges.
- Wrap targets an exact tmux socket, server generation, helper session, and window. Cleanup kills only its marked grouped helper. It never intentionally kills the source window or session.
- Instance records are non-secret, private metadata. Directories are mode 0700 and records/control sockets are mode 0600. A matching local control response, not a PID alone, establishes worker ownership. A per-instance process-held lease distinguishes a live but unreachable worker from stale state even if a PID has been reused.
- Quick Tunnels are ephemeral and provide no uptime guarantee.