-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
remove docker package: CVE-2024-41110 #275
Conversation
docker package was used to check for git urls. implemented the fork inside locations.go instead of pulling entire package.
Mergecat's ReviewClick to read mergecats review!😼 Mergecat review of go.mod@@ -15,7 +15,6 @@ require (
github.com/cenkalti/backoff/v4 v4.3.0
github.com/chainguard-dev/git-urls v1.0.2
github.com/creasty/defaults v1.7.0
- github.com/docker/docker v27.2.1+incompatible
github.com/ghodss/yaml v1.0.0
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399
github.com/go-logr/zerologr v1.2.3
@@ -120,6 +119,7 @@ require (
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/distribution/reference v0.5.0 // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
+ github.com/docker/docker v27.2.1+incompatible // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/emicklei/go-restful/v3 v3.10.2 // indirect Feedback & Suggestions:
😼 Mergecat review of cmd/locations.go@@ -3,10 +3,10 @@ package cmd
import (
"context"
"path/filepath"
+ "regexp"
"strings"
"time"
- "github.com/docker/docker/builder/remotecontext/urlutil"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
@@ -35,7 +35,7 @@ var ErrCannotUseQueryWithFilePath = errors.New("relative and absolute file paths
func maybeCloneGitUrl(ctx context.Context, repoManager cloner, repoRefreshDuration time.Duration, location, vcsUsername string) (string, error) {
result := strings.SplitN(location, "?", 2)
- if !urlutil.IsGitURL(result[0]) {
+ if !isGitURL(result[0]) {
if len(result) > 1 {
return "", ErrCannotUseQueryWithFilePath
}
@@ -82,3 +82,26 @@ func maybeCloneGitUrl(ctx context.Context, repoManager cloner, repoRefreshDurati
return path, nil
}
+
+func isGitURL(str string) bool {
+ if IsURL(str) && urlPathWithFragmentSuffix.MatchString(str) {
+ return true
+ }
+ for _, prefix := range []string{"git://", "github.com/", "git@"} {
+ if strings.HasPrefix(str, prefix) {
+ return true
+ }
+ }
+ return false
+}
+
+// urlPathWithFragmentSuffix matches fragments to use as Git reference and build
+// context from the Git repository. See IsGitURL for details.
+var urlPathWithFragmentSuffix = regexp.MustCompile(`\.git(?:#.+)?$`)
+
+// IsURL returns true if the provided str is an HTTP(S) URL by checking if it
+// has a http:// or https:// scheme. No validation is performed to verify if the
+// URL is well-formed.
+func IsURL(str string) bool {
+ return strings.HasPrefix(str, "https://") || strings.HasPrefix(str, "http://")
+} Feedback & Suggestions:
Suggested changes: func isGitURL(str string) bool {
if isValidURL(str) && urlPathWithFragmentSuffix.MatchString(str) {
return true
}
switch {
case strings.HasPrefix(str, "git://"),
strings.HasPrefix(str, "github.com/"),
strings.HasPrefix(str, "git@"):
return true
}
return false
}
// urlPathWithFragmentSuffix matches fragments to use as Git reference and build
// context from the Git repository. See isGitURL for details.
var urlPathWithFragmentSuffix = regexp.MustCompile(`\.git(?:#.+)?$`)
// isValidURL returns true if the provided str is a well-formed HTTP(S) URL.
func isValidURL(str string) bool {
u, err := url.Parse(str)
return err == nil && (u.Scheme == "http" || u.Scheme == "https")
} Dependency ReviewClick to read mergecats review!No suggestions found |
Temporary image available at |
This is to address CVE-2024-41110
Docker package was used to check for git urls.
this PR implements the fork inside locations.go instead of pulling entire package.