GHSA-x6fg-52vr-hj4w: NAT is a commonHandler any authenticated member can
create, and newHTTPandGRPCMux matches r.Host against NAT before dispatching
the dashboard/gRPC handlers, so a member could register the dashboard's own
host as a NAT Domain and hijack global routing. Add IsReservedDashboardHost
(InstallHost/ListenHost plus an operator-declared ReservedHosts list for
reverse-proxy deployments), reject reserved hosts on create/update, and drop
pre-planted records when building the startup cache.
GHSA-39g2-8x68-pmx8: bind-time CheckPermission let a member pre-bind a DDNS
profile ID that the victim would only create later. GetDDNSProvidersFromProfiles
now re-validates ownership by server owner UID and skips foreign-owned
profiles (UserID==0 is treated as a migration artifact, not an admin grant).
Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
* ddns: store configuation in database
Co-authored-by: nap0o <144927971+nap0o@users.noreply.github.com>
* feat: split domain with soa lookup
* switch to libdns interface
* ddns: add unit test
* ddns: skip TestSplitDomainSOA on ci
network is not steady
* fix error handling
* fix error handling
---------
Co-authored-by: nap0o <144927971+nap0o@users.noreply.github.com>