The vulnerability is an incomplete fix for a Server-Side Request Forgery (SSRF) vulnerability. The original fix, commit 603e7bf, replaced calls to isSSRFSafeURL followed by file_get_contents with a single call to url_get_contents. However, as stated in the security advisory, this fix is incomplete because url_get_contents itself does not use the $resolvedIP output parameter from isSSRFSafeURL to perform DNS pinning. This leaves the application vulnerable to Time-of-check Time-of-use (TOCTOU) race conditions via DNS rebinding.
The analysis of commit 603e7bf reveals two locations where this incomplete fix was applied:
- The
parseUrl() function in objects/EpgParser.php.
- The script
plugin/AI/receiveAsync.json.php.
Both of these now use url_get_contents to fetch remote content based on a provided URL, and are thus vulnerable. The advisory mentions that there are at least six other similar vulnerabilities in the codebase, but without the ability to search the entire repository, this analysis is limited to the functions explicitly mentioned and patched in the provided commit. The root cause is the lack of DNS pinning when making HTTP requests to user-supplied URLs.