From 3147a795e3bbade2f3c8b89384fc96939ede6aa4 Mon Sep 17 00:00:00 2001 From: Etai Lev Ran Date: Wed, 16 Jul 2025 22:07:43 +0300 Subject: [PATCH 1/2] sanity check target decode host Signed-off-by: Etai Lev Ran --- go.mod | 2 ++ go.sum | 4 ++++ internal/proxy/proxy.go | 11 +++++++++++ 3 files changed, 17 insertions(+) diff --git a/go.mod b/go.mod index 3a51bf4..5b39e79 100644 --- a/go.mod +++ b/go.mod @@ -27,4 +27,6 @@ require ( golang.org/x/tools v0.31.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apimachinery v0.33.3 // indirect + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect ) diff --git a/go.sum b/go.sum index 7c87f90..2b401c4 100644 --- a/go.sum +++ b/go.sum @@ -51,5 +51,9 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/apimachinery v0.33.3 h1:4ZSrmNa0c/ZpZJhAgRdcsFcZOw1PQU1bALVQ0B3I5LA= +k8s.io/apimachinery v0.33.3/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/internal/proxy/proxy.go b/internal/proxy/proxy.go index 9d5d65c..c8830cb 100644 --- a/internal/proxy/proxy.go +++ b/internal/proxy/proxy.go @@ -29,6 +29,7 @@ import ( "github.com/go-logr/logr" lru "github.com/hashicorp/golang-lru/v2" + "k8s.io/apimachinery/pkg/util/validation" "k8s.io/klog/v2" ) @@ -179,6 +180,9 @@ func (s *Server) prefillerProxyHandler(hostPort string) (http.Handler, error) { if err != nil { s.logger.Error(err, "failed to parse URL", "hostPort", hostPort) return nil, err + } else if err := validateTarget(u.Hostname()); err != nil { + s.logger.Error(err, "invalid target", "hostPort", hostPort) + return nil, err } proxy = httputil.NewSingleHostReverseProxy(u) @@ -186,3 +190,10 @@ func (s *Server) prefillerProxyHandler(hostPort string) (http.Handler, error) { return proxy, nil } + +func validateTarget(target string) error { + if net.ParseIP(target) != nil || len(validation.IsDNS1123Subdomain(target)) == 0 { + return nil + } + return errors.New(target + " is not a valid prefill target") +} From 6289601d23587dc4904544b1bbd531736679a322 Mon Sep 17 00:00:00 2001 From: Etai Lev Ran Date: Thu, 17 Jul 2025 10:35:27 +0300 Subject: [PATCH 2/2] remove redundant else Signed-off-by: Etai Lev Ran --- internal/proxy/proxy.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/proxy/proxy.go b/internal/proxy/proxy.go index c8830cb..4075c15 100644 --- a/internal/proxy/proxy.go +++ b/internal/proxy/proxy.go @@ -180,7 +180,8 @@ func (s *Server) prefillerProxyHandler(hostPort string) (http.Handler, error) { if err != nil { s.logger.Error(err, "failed to parse URL", "hostPort", hostPort) return nil, err - } else if err := validateTarget(u.Hostname()); err != nil { + } + if err := validateTarget(u.Hostname()); err != nil { s.logger.Error(err, "invalid target", "hostPort", hostPort) return nil, err }