{"items":[{"id":"NVI-00015079","kind":"vulnerability","title":"QTINeon has unauthenticated relay-to-host amplification via unbounded RECONNECT_REQUEST forwarding","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-85rg-p3fr-xc2f","CVE-2026-54609"],"plain_summary":"GitHub lists this reviewed advisory for com.quietterminal:qti-neon, qti-neon, qti-neon. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-1af57bcd939f114bb23c4444642a7e36"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-07-28T16:36:48.000Z","value":"8.6 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-1af57bcd939f114bb23c4444642a7e36"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-1af57bcd939f114bb23c4444642a7e36","url":"https://github.com/advisories/GHSA-85rg-p3fr-xc2f","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-85rg-p3fr-xc2f","publisher":"GitHub Advisory Database","observed_at":"2026-11-03T09:59:04.660Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-1af57bcd939f114bb23c4444642a7e36"],"technology":"com.quietterminal:qti-neon","known_exclusions":[],"conditions_summary":"### Impact\nThe 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.\n\nAffected: `NeonRelay` in all three implementations (Java, Python, TypeScript).\n\n### Patches\nNot yet patched. Fix consists of three changes to handleReconnectReque","public_affected_ranges":["= 1.0.0"]},{"certainty":"source_listed","source_ids":["sr-1af57bcd939f114bb23c4444642a7e36"],"technology":"qti-neon","known_exclusions":[],"conditions_summary":"### Impact\nThe 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.\n\nAffected: `NeonRelay` in all three implementations (Java, Python, TypeScript).\n\n### Patches\nNot yet patched. Fix consists of three changes to handleReconnectReque","public_affected_ranges":["= 1.0.0"]}],"null_published_at":"2026-11-03T10:03:26.545Z","source_updated_at":"2026-07-28T16:36:48.000Z","source_disclosed_at":"2026-07-28T16:36:47.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-03T09:59:04.660Z"}],"next_cursor":null,"snapshot_revision":"42594"}