The vulnerability exists in the hackney_url:parse_url/1 function, which unconditionally converts the scheme part of a URL into an Erlang atom using binary_to_atom/2. Erlang has a hard limit on the number of atoms, and they are not garbage-collected. An attacker can exploit this by sending a large number of requests with unique URL schemes (e.g., uniq1://host, uniq2://host). Each unique scheme creates a new, permanent atom, eventually exhausting the atom table and causing the entire Erlang VM to crash, resulting in a denial of service. The hackney:request/5 function is a key entry point for this attack, as it accepts a raw URL string and passes it directly to the vulnerable parsing function. The patch commit 31f6f0e27e096ad88743dfded4f030a3ee74972e remediates this by replacing the unsafe binary_to_atom/2 call with binary_to_existing_atom/2, which ensures that only pre-existing atoms are used for known schemes, while unknown schemes are handled as binaries without creating new atoms.