Skip to content

[Security] Unauthenticated UDP punch-hole request enables reflection/amplification abuse (CVE-2026-30784) #670

Description

@malejdj

Description

I run a self-hosted RustDesk Server (version 1.1.15, Docker: hbbs/hbbr) on a public VPS, with both hbbs and hbbr running with -k _ (key-based authentication required). Despite this, I discovered that hbbs responds to PunchHoleRequest messages without any authentication or validation that the request originates from a legitimate RustDesk client. Attackers are exploiting this as a UDP reflection/amplification vector, and my server was actively abused as part of a DDoS attack against an unrelated third party.

How the abuse works

  • Attackers send UDP packets to hbbs:21116 with a spoofed source IP set to the intended victim's address (in my case, IP addresses belonging to Minecraft servers on port 25565).
  • hbbs replies with a UDP punch hole response directly to this (spoofed) address, with no check that the request came from a registered peer or that the punch-hole was actually solicited by an authorized party.
  • This occurs even with -k _ enforced on both hbbs and hbbr — the key requirement does not appear to gate the punch-hole request/response path, only relay/registration flows elsewhere.
  • I logged over 150,000 such requests in a single hour, originating from dozens of distinct source IPs (mostly cloud/VPS ranges — DigitalOcean, Hetzner, OVH, Contabo), resulting in several GB of outbound traffic per day. My server was effectively turned into an unwitting DDoS reflector against a third party without my knowledge or consent.

Impact

  • My VPS was used to attack an unrelated third-party service, exposing me to abuse complaints and potential IP blacklisting through no fault of my own configuration.
  • Significant unnecessary bandwidth/cost consumption on my infrastructure.
  • This appears to correspond to CVE-2026-30784 (Missing Authentication for Critical Function) in handle_punch_hole_request() (src/rendezvous_server.rs).

Mitigation applied on my side (workaround, not a fix)

Since -k _ did not prevent this, and this is a server-side authentication flaw, I could not fix it in configuration. As a stopgap, I applied host-level firewall mitigations:

  • A UDP rate-limit (per source IP) on port 21116 to reduce the volume of punch-hole requests being processed.
  • An explicit outbound DROP rule blocking traffic from my server to the specific victim IP(s) being targeted, to stop my server from participating in the attack.

These reduce the abuse but do not address the underlying missing-authentication issue in hbbs.

Suggested fix

  • Add authentication/validation and rate-limiting to handle_punch_hole_request(), keyed on both source and destination IP.
  • Require that the destination of a punch-hole request be a currently registered, active peer on this hbbs instance before any response is sent.
  • Clarify in the docs that -k does not mitigate this reflection vector, since this is a common self-hosting hardening step that users would reasonably expect to help here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions