The vulnerability is a Server-Side Request Forgery (SSRF) caused by a parser differential in the hackney library. The root cause is in the hackney_url:normalize/2 function, which decodes percent-encoded characters in the host part of a URL. An attacker could provide a URL with a percent-encoded IP address (e.g., http://%31%32%37%2E%30%2E%30%2E%31/). An application's SSRF filter, using Erlang's inet:parse_address/1 on the raw URL, would not recognize this as an IP address and would allow the request. However, when this URL is passed to hackney, the hackney_url:normalize/2 function is called, which decodes the host to 127.0.0.1. The library then proceeds to make a request to this loopback address, resulting in an SSRF. The patch mitigates this by adding a check in hackney_url:normalize/2 to verify if a host becomes an IP address after decoding and, if so, it rejects the URL. The hackney:request/5 function is also identified as a key function, as it's the primary function that developers use to make requests and it always invokes the vulnerable normalization logic.