CVE-2026-54609: QTINeon has unauthenticated relay-to-host amplification via unbounded RECONNECT_REQUEST forwarding
The relay’s reconnect handler forwards every RECONNECT_REQUEST to the host without deduplication or a size cap on the pendingReconnects map, unlike the connect flow which guards against this with maxPendingConnections. An unauthenticated attacker who knows a valid session ID can send RECONNECT_REQUEST packets from many spoofed source addresses; each packet that passes the session lookup is forwarded to the host as a new reconnect attempt. Because the per-source rate limiter assigns a fresh token bucket to each spoofed IP, it provides no protection. The host receives one forwarded packet per spoofed source per cleanup cycle, making the relay an amplification vector for denial-of-service against the host. The host’s real address is never exposed to clients by design, so this is the primary viable DoS path against it. A secondary issue: once more than maxRateLimiters spoofed IPs are seen, performCleanup calls rateLimiters.clear(), resetting rate limit state for all sources including legitimate ones.
Affected: NeonRelay in all three implementations (Java, Python, TypeScript).
References
Code Behaviors & Features
Detect and mitigate CVE-2026-54609 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →