The CVSS 7.7 for CVE-2026-72591 classifies this as an 'authenticated user' SSRF in gabehf/Koito v0.3.2's image_url parameter. That framing obscures a deeper architectural failure: authentication was likely added as a patch to an earlier unauthenticated SSRF finding, treating it as an access control problem when the real issue is network egress. The server's ability to reach 169.254.169.254 or internal services has nothing to do with whether the triggering user is authenticated — it has everything to do with whether the server should be making outbound connections on behalf of users at all.
This is a second-generation vulnerability following a well-documented pattern. GitLab's 2019 SSRF in project import, Shopify's SSRF in webhook discovery, and dozens of CVEs from 2018-2023 followed the same arc: developer implements URL-fetching, authentication gets added as a response to 'unauthenticated SSRF found,' and the same vulnerability gets re-reported when someone proves authenticated users can reach metadata endpoints or internal services. The 'authenticated user' label isn't describing a trust boundary — it's documenting a patch that failed to understand what it was patching.
In containerized deployments, the escalation path is worse than the CVSS captures. If this library runs inside a Kubernetes pod with a service account attached to cloud IAM roles, SSRF against 169.254.169.254 yields not just instance metadata but potentially cross-role credentials scoped far beyond what the application itself needs. The blast radius extends to every resource those credentials can reach — CVSS measures door-width, not what's behind the door.
The fix isn't adding authentication. The correct architectural responses are: block private IP ranges and known metadata endpoints in the URL fetcher (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.169.254); remove the URL-fetching feature entirely and require direct binary upload; or implement a sandboxed fetch service with explicit egress controls. None of these are obvious to a developer who thinks SSRF means 'unauthenticated users can access things.'
The systemic problem is that no major web framework ships with a 'safe URL fetcher' as the default. Python's requests and Go's net/http have no concept of 'public IP only' as a configurable constraint — the security posture is opt-in, requiring developers to know about SSRF risks before they encounter them. URL-fetching is three lines of code; binary upload requires multipart form handling, size validation, format detection, and storage. The dangerous pattern is the path of least resistance, not an accident of convenience. Consider adding linter rules or dependency scanners that flag URL-fetching parameters in API handlers and surface the SSRF implication explicitly — making the design trade-off visible at the moment it's being made, rather than in a CVE six months later.