Impact
The Phoenix JavaScript presence client incorrectly verifies the existence of a presence entry by performing a simple truthiness test rather than an own‑property check. An attacker can supply a presence key that matches a member of JavaScript’s Object.prototype (for example __proto__, constructor, toString, hasOwnProperty). When such a key is processed, the client accesses properties on the prototype object, triggering a TypeError that aborts the presence synchronization handler. This crash causes the local sync state to never update and the onSync() callback never fires, resulting in a persistent client‑side denial of service for every user viewing that presence channel. The flaw does not modify the prototype or provide code execution; it only produces a continuous UI failure for the affected topic.
Affected Systems
The issue is present in the Phoenix framework’s JavaScript presence client shipped with Phoenix. Versions affected are all releases from 1.2.0‑rc.0 up to, but not including, 1.5.15; 1.6.0‑rc.0 up to, but not including, 1.6.17; 1.7.0‑rc.0 up to, but not including, 1.7.24; and 1.8.0‑rc.0 up to, but not including, 1.8.9. Applications that allow users to provide arbitrary presence identifiers such as usernames or session IDs without validation are vulnerable.
Risk and Exploitability
An attacker with ordinary channel access can supply a malicious presence key. The resulting TypeError propagates out of the sync handler but is not caught by higher‑level code, leaving the client in a broken state until the offending user disconnects. The CVSS score of 6.3 indicates moderate severity. The EPSS score of <1% implies a low likelihood of exploitation in the wild, and the vulnerability is not listed in CISA’s KEV catalog. Nonetheless, because the exploit requires only normal user privileges and can continuously disrupt the user interface of affected channels, the risk remains material for exposed or public channels.
OpenCVE Enrichment