If your webhook validator uses Python's ipaddress module to check whether an incoming IP is safe, read this carefully: the check you wrote is likely not doing what you think it is.
The is_global() method returns True for IPv6 transition mechanism addresses — NAT64/DN64 prefixes, 6to4 (2002::/16), Teredo (2001::/32), and the documentation range (2001:db8::/32). These addresses are technically globally routable by IANA assignment, which is exactly what is_global is designed to answer. But they're functionally tunnels that embed private IPv4 addresses, which means they can reach your metadata service at 169.254.169.254, your internal APIs, or your cloud environment's metadata endpoint.
The developer who wrote your validator didn't make a mistake — they made the inference the method name invites. They asked 'is this IP publicly routable?' and got a technically correct answer to a different question. What they actually needed to prevent was 'can this IP connect to our internal resources?' — and those questions diverge sharply for transition mechanisms.
You need to explicitly block these prefixes rather than relying on semantic classification. The blocklist should include: 64:ff9b::/96 (NAT64), 2002::/16 (6to4), 2001::/32 (Teredo), 2001:db8::/32 (documentation), and the Carrier-Grade NAT ranges if your deployment context warrants it. This is fragile by nature — new transition mechanisms may emerge — but it's the necessary layer is_global cannot provide.
A more robust approach is connection-timeout enforcement: attempt the outbound connection with a short timeout (100-200ms), and fail closed on timeout or error rather than trying to classify the address beforehand. This directly encodes what you actually want — 'don't let attackers reach internal services' — without requiring you to maintain a taxonomy of address types.
The deeper lesson is that standard library network classification methods answer routing questions, not security questions. Every language has this gap. Your next network validation code should assume that semantic methods like is_global will not protect against transition mechanism bypasses, and plan accordingly.