Some remote clients can pass as one of your trusted reverse proxies. They can then set X-Forwarded-* headers that your app believes. That lets them fake their IP address and get past IP allow lists, rate limits and logs. They can also change the host used in password reset and login link emails, or pass as HTTPS over plain HTTP.
Who is affected
Apps on symfony/http-foundation 7.2 and later, or symfony/framework-bundle 7.1 and later (also part of symfony/symfony), that set framework.trusted_proxies: private_ranges, or pass private_ranges or PRIVATE_SUBNETS to Request::setTrustedProxies(). The shortcut also covered some IPv6 address ranges that remote clients can use.
The Symfony advisory names two exposed setups. A server listening on all IPv6 addresses without IPV6_V6ONLY reports every IPv4 client in IPv6 form, so it trusts every client. A server reachable over IPv6 trusts clients from 6to4 or Teredo addresses. Symfony 6.4 doesn't use this list by default, but an app that passes IpUtils::PRIVATE_SUBNETS to setTrustedProxies() itself is exposed on any version.
What to do
Update to 7.4.23 or 8.1.11. If you're on 8.0, update to 8.1.11. The fix gives trusted proxies their own list, IpUtils::PRIVATE_RANGES, which 6.4.50 also adds. If you pass IpUtils::PRIVATE_SUBNETS yourself, switch to IpUtils::PRIVATE_RANGES. If a proxy lives in a documentation or reserved range, list it explicitly.
Reported by Ivan Tse.