ipv6 endpoint parsing is handled differently in two places:
wireguard_builder.rs:420-431 correctly handles [IPv6]:port using rsplitn
validation.rs:269-276 (validate_wireguard_peer) uses split(':').next_back() which will misparse ipv6 addresses since they contain colons
related: validate_cidr and validate_ip_address in validation.rs use heuristic string splitting on . / : rather than std::net::IpAddr::parse(). malformed-but-plausible addresses can slip through.
ipv6 endpoint parsing is handled differently in two places:
wireguard_builder.rs:420-431correctly handles[IPv6]:portusingrsplitnvalidation.rs:269-276(validate_wireguard_peer) usessplit(':').next_back()which will misparse ipv6 addresses since they contain colonsrelated:
validate_cidrandvalidate_ip_addressinvalidation.rsuse heuristic string splitting on./:rather thanstd::net::IpAddr::parse(). malformed-but-plausible addresses can slip through.