SSRF: private-IP check misses 100.64/10, 198.18/15, 192.0.0/24 and NAT64 ranges #5
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
eric/apprise-wordpress-notifications#5
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found in security audit run 3 (2026-10-16,
06d630d). Severity: low.Problem
The private/reserved check in
resolve_and_validate_url()relies only onFILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE(includes/class-apprise-client.php:463-467). Only::ffff:0:0/96is unwrapped first (:454-460). Under PHP 8.5 these non-global ranges are still accepted with "Allow Private IPs" off:100.64.0.0/10(CGNAT, Tailscale, and Alibaba Cloud metadata at100.100.100.200)198.18.0.0/15,192.0.0.0/24,224.0.0.0/464:ff9b::/96and64:ff9b:1::/48(NAT64 forms of internal IPv4),2002::/16,fec0::/10Verified with the real function:
10.0.0.5and169.254.169.254are rejected, while100.100.100.200,198.18.0.10,192.0.0.8and64:ff9b::a9fe:a9feare accepted.Fix
filter_varcheck, add an explicit CIDR denylist for the IPv4 ranges above.apprise_notifications_allow_private_ipdecision, so internal Apprise servers still work when private IPs are opted into.rejectedUrlscases intests/Unit/ClientTest.php.