- Supported Versions
- Reporting a Vulnerability
- Disclosure Policy
- Security Considerations
- Security Audit
- Hall of Fame
| Version | Supported |
|---|---|
| 0.4.x | β Active development |
| < 0.4 | β Not released |
Only the latest development release receives security updates. Ensure you build from main before reporting.
If you discover a security vulnerability in Orbiscreen, please report it responsibly and privately.
Preferred method:
- Open a private security advisory on GitHub: Security Advisories β
Alternative method:
- Email the maintainers via the GitHub security contact above.
What to include:
| Field | Details |
|---|---|
| Description | Clear explanation of the vulnerability |
| Reproduction | Steps to reproduce - minimal PoC if possible |
| Component | Affected crate / module and version |
| Impact | Privilege escalation, input injection, data exposure, etc. |
| Fix | Suggested mitigation (optional) |
Response timeline:
| Phase | Timeframe |
|---|---|
| Initial acknowledgment | Within 72 hours |
| Impact assessment | Within 7 days |
| Patch development | Within 30 days (critical) |
| Public disclosure | Coordinated after fix is released |
We follow a coordinated disclosure model:
- Report received and acknowledged
- Vulnerability validated and severity assessed
- Fix developed and tested
- Patch released to all supported versions
- Public disclosure with credit to reporter (if desired)
No premature disclosure. Do not open public issues or pull requests for security bugs until the fix is released.
Orbiscreen is a Linux host daemon that:
- Creates kernel-level virtual displays via the
evdiDRM module - Captures screen contents via X11 (
x11rb) or Wayland (ashpd+ PipeWire) - Injects input events via
evdevil(uinput) orashpdRemoteDesktop - Streams encoded H.264 over a local WebRTC peer connection
| Area | Risk | Mitigation |
|---|---|---|
| uinput injection | Any process holding the virtual touchscreen can inject arbitrary input | The daemon opens the uinput device exclusively; restrict /dev/uinput permissions on the host |
| Screen capture | Frames contain everything rendered to the virtual display | v1 binds to the evdi-backed virtual display only, not the primary desktop |
| WebRTC signaling | Signaling server binds 0.0.0.0 by default |
Local network only in v1; no cloud relay; no TURN server |
| evdi kernel module | DKMS + Secure Boot signing is distro-specific | Module loading is the host administrator's responsibility |
| mDNS advertising | Hostname + port broadcast on the local network | No credentials are advertised; client must still complete the WebRTC handshake |
-
Run the daemon as a non-root user with explicit
/dev/uinput+/dev/dri/card*permissions viaudevrules. -
Do not expose the signaling port (
8788by default) to untrusted networks. Bind to127.0.0.1and useadb reversefor USB transport on untrusted networks. -
Build from source from the official repository:
git clone https://github.com/shadow-x78/orbiscreen.git
-
Review the
evdikernel module provenance before loading it; Secure Boot hosts must sign it. -
Never log raw input events in production -
tracingis set toINFOby default and does not dump pointer coordinates.
Orbiscreen is written entirely in Rust (edition 2021) and a thin Kotlin Android WebView host. A running daemon performs:
open()on/dev/dri/card*evdi nodesUinputDeviceconstruction viaevdevilGetImage(X11) orScreencastportal (Wayland) capture- GStreamer pipeline construction for H.264 encoding
axumHTTP/WS listener on the configured signaling portadb reversesubprocess invocation when a USB device is attached
All logic is readable in plain Rust. If you perform an audit, please share findings via the private reporting channels above.
We thank the following security researchers for responsible disclosure:
(None yet - be the first!)
Built by shadow-x78 Β· orbiscreen Β· Back to README
Β© 2026 Orbiscreen (shadow-x78)