Fedora Account System
Red Hat Associate
Red Hat Customer
Disclaimer: Community trackers are created by Red Hat Product Security team on a best effort basis. Package maintainers are required to ascertain if the flaw indeed affects their package, before starting the update process. (*x509.Certificate).VerifyHostname previously called matchHostnames in a loop over all DNS Subject Alternative Name (SAN) entries. This caused strings.Split(host, ".") to execute repeatedly on the same input hostname. With a large DNS SAN list, verification costs scaled quadratically based on the number of SAN entries multiplied by the hostname's label count. Because x509.Verify validates hostnames before building the certificate chain, this overhead occurred even for untrusted certificates.
I don't think the toolbox RPM is vulnerable to this certificate validation bug. Here's an actual analysis of the code. First, let's get rid of all the Go tests: [rishi@topinka toolbox-0.3]$ find src -name "*_test.go" -delete Let's find the shortest path in the import graph to crypto/x509: [rishi@topinka toolbox-0.3/src]$ go mod why -vendor crypto/x509 # crypto/x509 github.com/containers/toolbox/pkg/utils github.com/spf13/viper github.com/spf13/afero net/http crypto/tls crypto/x509 To be sure that there are no other paths in the import graph, let's remove pkg/utils and try again: [rishi@topinka toolbox-0.3/src]$ rm --force --recursive pkg/utils [rishi@topinka toolbox-0.3/src]$ go mod why -vendor crypto/x509 # crypto/x509 (main module does not need to vendor package crypto/x509) Now let's dig deeper. [rishi@topinka toolbox-0.3/src]$ grep --line-number --recursive crypto/x509 * [rishi@topinka toolbox-0.3/src]$ grep --line-number --recursive crypto/tls * [rishi@topinka toolbox-0.3/src]$ grep --line-number --recursive net/http * vendor/github.com/stretchr/testify/assert/assertion_format.go:6: http "net/http" vendor/github.com/stretchr/testify/assert/assertion_forward.go:6: http "net/http" vendor/github.com/stretchr/testify/assert/http_assertions.go:5: "net/http" vendor/github.com/stretchr/testify/assert/http_assertions.go:6: "net/http/httptest" vendor/github.com/spf13/afero/httpFs.go:18: "net/http" Of these, vendor/github.com/stretchr/testify is a module that's meant for testing. So, let's ignore that, which leaves: vendor/github.com/spf13/afero/httpFs.go:18: "net/http" In vendor/github.com/spf13/afero/httpFs.go, net/http is used to implement the HttpFs type, which is instantiated by the NewHttpFs function. There's nothing in Toolbx or its dependencies that uses this type: [rishi@topinka toolbox-0.3/src]$ grep --line-number --recursive NewHttpFs * vendor/github.com/spf13/afero/README.md:321:httpFs := afero.NewHttpFs(<ExistingFS>) vendor/github.com/spf13/afero/httpFs.go:52:func NewHttpFs(source Fs) *HttpFs {