The flaw is in isBlockedIP within internal/notification/dispatcher/webhook.go, which safeDialContext uses before opening connections for the webhook HTTP client. The guard checks loopback, link-local, multicast, unspecified, and selected unroutable IPv4 addresses, but does not inspect IPv4 values embedded inside IPv6 transition addresses.
The missed forms include 6to4, NAT64, Teredo, and IPv4-compatible IPv6 addresses. As a result, an IPv6 address can appear non-blocked even when it represents an embedded IPv4 loopback or link-local address. The fix extracts embedded IPv4 addresses and applies the existing blocking checks to them, including NAT64 local-use addresses and the obfuscated IPv4 client value in Teredo addresses.
An attacker needs an authenticated Dozzle account with permission to configure a webhook URL and a notification trigger for the path to execute. The network conditions required for each transition mechanism to route to a local target can vary by deployment and are not fully established by the public evidence.