3284 Commits

Author SHA1 Message Date
Mend Renovate
df4a64e487 Update docker/buildx-bin Docker tag to v0.35.0
Signed-off-by: Mend Renovate <bot@renovateapp.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-06-18 11:08:10 +02:00
Paweł Gronowski
39fe05769e test-integration-flaky: Stress modified tests too
Also run `test-integration-flaky` for changed existing tests.

Keep the old added-test detection as-is, and add modified-test detection
on top of it to avoid regressing the existing behavior.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-06-17 13:42:49 +02:00
Paweł Gronowski
f3169f92a3 test/docker-py: Fix swarm encrypted failure
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-06-12 15:43:03 +02:00
Sebastiaan van Stijn
d915dbd766 hack/dockerfiles: simplify install of tools
Follow-up to 4210ba07d9, which added the
"tool" directive, but kept the existing package references, which means
that installation would potentially happen multiple times.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-06-10 14:19:04 +02:00
Paweł Gronowski
9097ab1048 Merge pull request #52774 from vvoland/gha-pr-refs
gha/validate-pr: Reject GitHub references in commit messages
2026-06-10 14:04:00 +02:00
Paweł Gronowski
f5ea52aa17 gha/validate-pr: Reject GitHub references in commit messages
GitHub issue and PR references in commit messages become part of
persistent history and can create unintended cross-references.

Check commit subjects and bodies for shorthand references such as
<hash>123, moby/moby<hash>123 and GitHub issue or pull-request URLs.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-06-10 13:22:08 +02:00
Sebastiaan van Stijn
c6c8f97224 remove uses of legacy github.com/golang/protobuf/protoc-gen-go
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-06-09 15:41:01 +02:00
Sebastiaan van Stijn
4210ba07d9 remove internal/tools and use go.mod tools directive
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-06-09 13:39:47 +02:00
Rajnish Kumar
927f6bae16 test/docker-py: re-enable test_run_with_networking_config
The test was skipped because Container.run() returned stale container
state after 7bc56c5365 changed when the
short ID was added to Aliases. That behaviour is now stable and the
test passes against the current docker-py commit (059d371).

Signed-off-by: Rajnish Kumar <rajnishkumar448@gmail.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-06-05 16:33:45 +02:00
Paweł Gronowski
49742882d5 Merge pull request #52753 from vvoland/update-go
update to go1.26.4
2026-06-03 18:30:55 +02:00
Paweł Gronowski
c3967c40c0 update to go1.26.4
This release include 3 security fixes following the security policy:

- mime: quadratic complexity in WordDecoder.DecodeHeader

    Decoding a maliciously-crafted MIME header containing many invalid
    encoded-words could consume excessive CPU.
    The MIME decoder now better handles this case.

    Thanks to p4p3r (https://hackerone.com/p4p3r_hak) for reporting this issue.

    This is CVE-2026-42504 and Go issue https://go.dev/issue/79217.

- net/textproto: arbitrary input are included in errors without any escaping

    When returning errors, functions in the net/textproto package would
    include its input as part of the error, without any escaping. Note that
    said input is often controlled by external parties when using this
    package naturally. For example, a net/http client uses ReadMIMEHeader
    when parsing the headers it receive from a server.

    As a result, an attacker could inject arbitrary content into the error.
    Practically, this can result in an attacker injecting misleading
    content, terminal control bytes, etc. into a victim's output or logs.

    This is CVE-2026-42507 and Go issue https://go.dev/issue/79346

- crypto/x509: split candidate hostname only once

    (*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.

    Thanks to Jakub Ciolek (https://ciolek.dev) for reporting this issue.

    This is CVE-2026-27145 and https://go.dev/issue/79694.

View the release notes for more information:
https://go.dev/doc/devel/release#go1.26.4

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-06-03 17:13:02 +02:00
Paweł Gronowski
635145d68a Merge pull request #52752 from vvoland/update-dockerpy
test/docker-py: Bump to master
2026-06-03 16:26:12 +02:00
Paweł Gronowski
96639c8461 test/docker-py: Bump to master
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-06-03 14:57:09 +02:00
Akihiro Suda
059d3f36ee Update RootlessKit (3.0.1)
https://github.com/rootless-containers/rootlesskit/releases/tag/v3.0.1

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2026-05-27 19:34:51 +09:00
Mend Renovate
af35f3716e chore(deps): update docker/buildx-bin docker tag to v0.34.1
Signed-off-by: Mend Renovate <bot@renovateapp.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-05-20 10:59:14 +02:00
Mend Renovate
bb71630486 chore(deps): update docker/buildx-bin docker tag to v0.34.0
Signed-off-by: Mend Renovate <bot@renovateapp.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-05-14 15:18:23 +02:00
CrazyMax
08eec0204c hack: authenticate BuildKit ref resolution
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-05-13 12:50:55 +02:00
Paweł Gronowski
4d815e43d2 Merge pull request #52585 from vvoland/fix-flaky-integration
gha: Fix test-integration-flaky
2026-05-11 13:52:59 +02:00
Paweł Gronowski
57db5dedd0 hack: Fix test-integration-flaky
Split the diff from the grep in the bundle so a failed diff is no longer
swallowed and misreported as "no new tests".

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-05-11 13:28:27 +02:00
CrazyMax
8bc239f340 hack: preserve pseudo-version hashes in buildkit-ref
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-05-11 09:59:14 +02:00
Paweł Gronowski
0fdc152a31 update to go1.26.3
This release include 11 security fixes:

- cmd/go: malicious module proxy can bypass checksum database

    A malicious module proxy could exploit a flaw in the go command's
    validation of module checksums to bypass checksum database validation.

    This vulnerability affects any user using an untrusted module proxy
    (GOMODPROXY) or checksum database (GOSUMDB).

    A malicious module proxy can serve altered versions of the Go toolchain.
    When selecting a different version of the Go toolchain than the
    currently installed toolchain (due to the GOTOOLCHAIN environment variable,
    or a go.work or go.mod with a toolchain line), the go command will download
    and execute a toolchain provided by the module proxy. A malicious module
    proxy can bypass checksum database validation for this downloaded
    toolchain.

    Since this vulnerability affects the security of toolchain downloads,
    setting GOTOOLCHAIN to a fixed version is not sufficient. You must upgrade
    your base Go toolchain.

    The go tool always validates the hash of a toolchain before executing it,
    so fixed versions will refuse to execute any cached, altered versions of the
    toolchain.

    The go tool trusts go.sum files to contain accurate hashes of the current
    module's dependencies. A malicious proxy exploiting this vulnerability to
    serve an altered module will have caused an incorrect hash to be recorded
    in the go.sum. Users who have configured a non-trusted GOPROXY can determine
    if they have been affected by running "rm go.sum ; go mod tidy ; go mod verify",
    which will revalidate all dependencies of the current module.

    The specific flaw in more detail:

    The go command consults the checksum database to validate downloaded modules,
    when a module is not listed in the go.sum file. It verifies that the module hash
    reported by the checksum database matches the hash of the downloaded module.
    If, however, the checksum database returns a successful response that contains
    no entry for the module, the go command incorrectly permitted validation to succeed.

    A module proxy may mirror or proxy the checksum database, in which case the go
    command will not connect to the checksum database directly. Checksums reported
    by the checksum database are cryptographically signed, so a malicious proxy
    cannot alter the reported checksum for a module. However, a proxy which returns
    an empty checksum response, or a checksum response for an unrelated module,
    could cause the go command to proceed as if a downloaded module has been validated.

    The go command now properly checks checksum database responses to ensure
    that the expected module signature is present, not just that if a signature is
    present it matches the expectation.

    Thanks to Mundur (https://github.com/M0nd0R) for reporting this issue.

    This is CVE-2026-42501 and Go issue https://go.dev/issue/79070.

- net/http/httputil: ReverseProxy forwards queries with more than urlmaxqueryparams parameters

    When used with a Rewrite function, or a Director function which parses query parameters,
    ReverseProxy sanitizes the forwarded request to remove query parameters which are not
    parsed by url.ParseQuery. ReverseProxy did not take ParseQuery's limit on the total number
    of query parameters (controlled by GODEBUG=urlmaxqueryparams=N) into account.
    This could permit ReverseProxy to forward a request containing a query parameter
    that was not visible to the Rewrite function.

    For example, the query "a1=x&a2=x&...&a10000=x&hidden=y" could forward the parameter
    "hidden=y" while hiding it from the proxy's Rewrite function.

    ReverseProxy now avoids forwarding parameters that exceed the ParseQuery limit.

    This is CVE-2026-39825 and Go issue https://go.dev/issue/78948.

- net: panic in Dial and LookupPort when handling NUL byte on Windows

    The Dial and LookupPort functions would panic on Windows when provided
    with an input containing a NUL (0). These functions now return an error
    rather than panicking.

    This is CVE-2026-39836 and Go issue https://go.dev/issue/79006.

- net/mail: quadratic string concatenation in consumePhrase

    Pathological inputs could cause DoS through consumePhrase
    when parsing an email address according to RFC 5322.

    This is CVE-2026-42499 and Go issue https://go.dev/issue/78987.

- net/mail: quadratic string concatentation in consumeComment

    Well-crafted inputs reaching ParseAddress, ParseAddressList,
    and ParseDate were able to trigger excessive CPU exhaustion
    and memory allocations.

    This is CVE-2026-39820 and Go issue https://go.dev/issue/78566.

- cmd/go: "go bug" follows symlinks in predictable temporary filenames

    The "go bug" command wrote to two files with predictable names in
    the system temporary directory (for example, "/tmp").

    An attacker with access to the temporary directory could create a
    symlink in one of these names, causing "go bug" to overwrite the
    target of the symlink.

    The "go bug" command now uses os.MkdirTemp to create a safe
    working directory.

    Thanks to Harshit Gupta (Mr HAX) for reporting this issue.

    This is CVE-2026-39819 and Go issue https://go.dev/issue/78584.

- cmd/go: "go tool pack" does not sanitize output paths

    The "go tool pack" subcommand is a minimal version of the Unix ar utility.
    It is used by the compiler as an internal tool with known-good inputs.

    The "pack" subcommand did not sanitize output filenames.
    When invoked to extract a malicious archive file, it could write
    files to arbitrary locations on the filesystem.

    The "pack" subcommand now refuses to extract files with names
    containing any directory components.

    Thanks to Harshit Gupta (Mr HAX) for reporting this issue.

    This is CVE-2026-39817 and Go issue https://go.dev/issue/78778.

- net/http: infinite loop in HTTP/2 transport when given bad SETTINGS_MAX_FRAME_SIZE

    When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of
    writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a
    value of 0.

    This allows potential DoS against a client by a malicious server. HTTP/2
    transport now properly checks that the received SETTINGS_MAX_FRAME_SIZE is
    valid.

    Thanks to Marwan Atia (marwansamir688@gmail.com) for reporting this issue.

    This is CVE-2026-33814 and Go issue https://go.dev/issue/78476.

- html/template: escaper bypass leads to XSS

    If a trusted template author were to write a
    tag containing an empty type attribute or a type
    attribute with an ASCII whitespace, the execution of
    the template would incorrectly escape any data passed
    into the block.

    Thanks to Mundur (https://github.com/M0nd0R) for reporting this issue.

    This is CVE-2026-39826 and Go issue https://go.dev/issue/78981.

- net: crash when handling long CNAME response

    When using LookupCNAME with the cgo DNS resolver,
    a very long CNAME response could trigger a double-free of C memory
    and a crash. The double-free has been fixed.

    Thanks to hamayanhamayan for reporting this issue.

    This is CVE-2026-33811 and Go issue https://go.dev/issue/78803.

- html/template: bypass of meta content URL escaping causes XSS

    CVE-2026-27142 fixed a vulnerability in which URLs were not
    correctly escaped inside of a tag's attribute.
    If the URL content were to insert ASCII whitespaces around the
    = rune inside of the attribute, the escaper would
    fail to similarly escape it, leading to XSS.

    Dynamic inputs to a tag's attribute are now
    whitespace sanitized prior to escaping.

    Thanks to Samy Ghannad for reporting this issue.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-05-07 19:13:15 +02:00
Sebastiaan van Stijn
a2d62b318e Merge pull request #52459 from thaJeztah/module_differ
ci: validate module-replace: ignore _test.go files
2026-04-27 15:03:00 +02:00
Akihiro Suda
ed50761bc4 Merge pull request #52463 from AkihiroSuda/rootlesskit-v3
hack/dockerfile/install: fix RootlessKit version
2026-04-26 05:20:20 +09:00
Akihiro Suda
eeec56601b hack/dockerfile/install: fix RootlessKit version
Follow-up to PR 52319, 52456

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2026-04-26 04:12:13 +09:00
Sebastiaan van Stijn
038086f408 ci: validate: remove old "default-seccomp" validation
The seccomp profile moved to github.com/moby/profiles/seccomp, so
is no longer generated here.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-25 18:33:45 +02:00
Sebastiaan van Stijn
e6b36ed6da ci: validate module-replace: ignore _test.go files
Test-files are not vendored, so when updated, it's not needed to
update vendoring.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-25 18:20:06 +02:00
Akihiro Suda
5249b1d165 Update RootlessKit (3.0.0)
- slirp4netns/vpnkit is no longer needed as gvisor-tap-vsock is now embedded in RootlessKit.
  slirp4netns/vpnkit is still used when installed.
- The `builtin` port driver can now correctly propagate the source IP, when
  `userland-proxy` is disabled.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2026-04-25 22:49:57 +09:00
Sebastiaan van Stijn
cdb3fc279d Dockerfile: update buildx to v0.33.0
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-16 00:45:09 +02:00
Sebastiaan van Stijn
3541b0d0fd update to Go 1.26.2
go1.26.2 (released 2026-04-07) includes security fixes to the go command,
the compiler, and the archive/tar, crypto/tls, crypto/x509, html/template,
and os packages, as well as bug fixes to the go command, the go fix command,
the compiler, the linker, the runtime, and the net, net/http, and net/url
packages. See the Go 1.26.2 milestone on our issue tracker for details;

- https://github.com/golang/go/issues?q=milestone%3AGo1.26.2+label%3ACherryPickApproved
- full diff: https://github.com/golang/go/compare/go1.26.1...go1.26.2

From the security announce:

We have just released Go versions 1.26.2 and 1.25.9, minor point releases.

These releases include 10 security fixes following the security policy:

- os: Root.Chmod can follow symlinks out of the root on Linux

  On Linux, if the target of Root.Chmod is replaced with a symlink while
  the chmod operation is in progress, Chmod could operate on the target
  of the symlink, even when the target lies outside the root.

  The Linux fchmodat syscall silently ignores the AT_SYMLINK_NOFOLLOW flag,
  which Root.Chmod uses to avoid symlink traversal. Root.Chmod checks its
  target before acting and returns an error if the target is a symlink
  lying outside the root, so the impact is limited to cases where the
  target is replaced with a symlink between the check and operation.

  On Linux, Root.Chmod now uses the fchmodat2 syscall when available, and
  an workaround using /proc/self/fd otherwise.

  Thanks to Uuganbayar Lkhamsuren for reporting this issue.

  This is CVE-2026-32282 and Go issue https://go.dev/issue/78293.

- html/template: JS template literal context incorrectly tracked

  Context was not properly tracked across template branches for JS template
  literals, leading to possibly incorrect escaping of content when branches were
  used.

  Additionally template actions within JS template literals did not properly
  track
  the brace depth, leading to incorrect escaping being applied.

  These issues could cause actions within JS template literals to be incorrectly
  or improperly escaped, leading to XSS vulnerabilities.

  This only affects templates that use template actions within JS template
  literals.

  This is CVE-2026-32289 and Go issue https://go.dev/issue/78331.

- crypto/x509: excluded DNS constraints not properly applied to wildcard domains

  When verifying a certificate chain containing excluded DNS constraints, these
  constraints are not correctly applied to wildcard DNS SANs which use a
  different
  case than the constraint.

  For example, if a certificate contains the DNS name "*.example.com" and the
  excluded DNS name "EXAMPLE.COM", the constraint will not be applied.

  This only affects validation of otherwise trusted certificate chains, issued
  by
  a root CA in the VerifyOptions.Roots CertPool, or in the system certificate
  pool.

  This issue only affects Go 1.26.

  Thank you to Riyas from Saintgits College of Engineering, k1rnt, @1seal for
  reporting this issue.

  This is CVE-2026-33810 and Go issue https://go.dev/issue/78332.

- cmd/compile: no-op interface conversion bypasses overlap checking

  Previously, the compiler failed to unwrap pointers contained within
  a no-op interface conversion leading to an incorrect determination
  of a non-overlapping move.

  To prevent unsafe move operations, the compiler will now unwrap all
  such conversions before considering a move non-overlapping.

  Thank you to Jakub Ciolek - https://ciolek.dev/ for reporting this issue.

  This is CVE-2026-27144 and Go issue https://go.dev/issue/78371.

- cmd/compile: possible memory corruption after bound check elimination

  Previously, slices and arrays accessed using induction variables
  were sometimes incorrectly proved in-bound. If the induction variable
  used for indexing were to overflow or underflow, it could allow access
  to memory beyond the scope of the original slice or array.

  To prevent this behavior, the compiler ensures that any mutated induction
  variable that overflows/underflows with respect to its loop condition
  is not used for bound check elimination.

  Thank you to Jakub Ciolek - https://ciolek.dev/ for reporting this issue.

  This is CVE-2026-27143 and Go issue https://go.dev/issue/78333.

- archive/tar: unbounded allocation when parsing old format GNU sparse map

  tar.Reader could allocate an unbounded amount of memory when reading
  a maliciously-crafted archive containing a large number of sparse
  regions encoded in the "old GNU sparse map" format.

  We now limit both the number of old GNU sparse map extension blocks,
  and the total number of sparse file entries, regardless of encoding.

  Thanks to Colin Walters (wal...@verbum.org) who initially reported this issue.
  Thanks also to Uuganbayar Lkhamsuren (https://github.com/uug4na) and Jakub
  Ciolek
  who additionally reported this issue.

  This is CVE-2026-32288 and Go issue https://go.dev/issue/78301.

- crypto/tls: multiple key update handshake messages can cause connection to
  deadlock

  If one side of the TLS connection sends multiple key update messages
  post-handshake in a single record, the connection can deadlock, causing
  uncontrolled consumption of resources. This can lead to a denial of service.

  This only affects TLS 1.3.

  Thank you to Jakub Ciolek - https://ciolek.dev/ for reporting this issue.

  This is CVE-2026-32283 and Go issue https://go.dev/issue/78334.

- cmd/go: trust layer bypass when using cgo and SWIG

  A well-crafted SWIG source file could take advantage
  of a file-naming convention used inside the trust
  boundary of the cgo compiler. Doing so could result
  in arbitrary code execution during build time.

  SWIG files are disallowed from using this convention.

  Thank you to Juho Forsén of Mattermost for reporting this issue.

  This is CVE-2026-27140 and Go issue https://go.dev/issue/78335.

- crypto/x509: unexpected work during chain building

  During chain building, the amount of work that is done is not correctly
  limited
  when a large number of intermediate certificates are passed in
  VerifyOptions.Intermediates, which can lead to a denial of service. This
  affects
  both direct users of crypto/x509 and users of crypto/tls.

  Thank you to Jakub Ciolek - https://ciolek.dev/ for reporting this issue.

  This is CVE-2026-32280 and Go issue https://go.dev/issue/78282.

- crypto/x509: inefficient policy validation

  Validating certificate chains which use policies is unexpectedly inefficient
  when certificates in the chain contain a very large number of policy mappings,
  possibly causing denial of service.

  This only affects validation of otherwise trusted certificate chains, issued
  by
  a root CA in the VerifyOptions.Roots CertPool, or in the system certificate
  pool.

  Thank you to Jakub Ciolek - https://ciolek.dev/ for reporting this issue.

  This is CVE-2026-32281 and Go issue https://go.dev/issue/78281.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-08 00:43:19 +02:00
Akihiro Suda
c286d4ce13 Dockerfile: go install: use Git SourceOp
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2026-04-03 19:04:05 +09:00
Sebastiaan van Stijn
e0999bd5ec update to go1.26.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-01 14:48:32 +02:00
Sebastiaan van Stijn
4e3929c00c fix "make validate"
The yamllint, swagger, and swagger-gen scripts are now part of the
api module since 0666108ebf.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-03-14 19:33:18 +01:00
Sebastiaan van Stijn
2b4f1d465c Merge pull request #52157 from gkapetanakis/master
hack/test/unit: avoid unbound pkg vars with set -u
2026-03-12 13:12:38 +01:00
Sebastiaan van Stijn
c266b4fe9b update to go1.25.8
go1.25.8 (released 2026-03-05) includes security fixes to the html/template,
net/url, and os packages, as well as bug fixes to the go command, the compiler,
and the os package. See the Go 1.25.8 milestone on our issue tracker for details.

- 1.25.8 https://github.com/golang/go/issues?q=milestone%3AGo1.25.8+label%3ACherryPickApproved
- diff: https://github.com/golang/go/compare/go1.25.7...go1.25.8
- 1.26.1 https://github.com/golang/go/issues?q=milestone%3AGo1.26.1+label%3ACherryPickApproved
- diff: https://github.com/golang/go/compare/go1.26.0...go1.26.1

---

We have just released Go versions 1.26.1 and 1.25.8, minor point releases.

These releases include 5 security fixes following the security policy:

crypto/x509: incorrect enforcement of email constraints

- When verifying a certificate chain which contains a certificate containing
  multiple email address constraints (composed of the full email address) which
  share common local portions (the portion of the address before the '@'
  character) but different domain portions (the portion of the address after the
  '@' character), these constraints will not be properly applied, and only the
  last constraint will be considered.

  This can allow certificates in the chain containing email addresses which are
  either not permitted or excluded by the relevant constraints to be returned by
  calls to Certificate.Verify. Since the name constraint checks happen after chain
  building is complete, this only applies to certificate chains which chain to
  trusted roots (root certificates either in VerifyOptions.Roots or in the system
  root certificate pool), requiring a trusted CA to issue certificates containing
  either not permitted or excluded email addresses.

  This issue only affects Go 1.26.

  Thanks to Jakub Ciolek for reporting this issue.

  This is CVE-2026-27137 and Go issue https://go.dev/issue/77952.

- crypto/x509: panic in name constraint checking for malformed certificates

  Certificate verification can panic when a certificate in the chain has an empty
  DNS name and another certificate in the chain has excluded name constraints.
  This can crash programs that are either directly verifying X.509 certificate
  chains, or those that use TLS.

  Since the name constraint checks happen after chain building is complete, this
  only applies to certificate chains which chain to trusted roots (root
  certificates either in VerifyOptions.Roots or in the system root certificate
  pool), requiring a trusted CA to issue certificates containing malformed DNS
  names.

  This issue only affects Go 1.26.

  Thanks to Jakub Ciolek for reporting this issue.

  This is CVE-2026-27138 and Go issue https://go.dev/issue/77953.

- html/template: URLs in meta content attribute actions are not escaped

  Actions which insert URLs into the content attribute of HTML meta tags are not
  escaped. This can allow XSS if the meta tag also has an http-equiv attribute
  with the value "refresh".

  A new GODEBUG setting has been added, htmlmetacontenturlescape, which can be
  used to disable escaping URLs in actions in the meta content attribute which
  follow "url=" by setting htmlmetacontenturlescape=0.

  This is CVE-2026-27142 and Go issue https://go.dev/issue/77954.

- net/url: reject IPv6 literal not at start of host

  The Go standard library function net/url.Parse insufficiently
  validated the host/authority component and accepted some invalid URLs
  by effectively treating garbage before an IP-literal as ignorable.
  The function should have rejected this as invalid.

  To prevent this behavior, net/url.Parse now rejects IPv6 literals
  that do not appear at the start of the host subcomponent of a URL.

  Thanks to Masaki Hara (https://github.com/qnighy) of Wantedly.

  This is CVE-2026-25679 and Go issue https://go.dev/issue/77578.

- os: FileInfo can escape from a Root

  On Unix platforms, when listing the contents of a directory using
  File.ReadDir or File.Readdir the returned FileInfo could reference
  a file outside of the Root in which the File was opened.

  The contents of the FileInfo were populated using the lstat system
  call, which takes the path to the file as a parameter. If a component
  of the full path of the file described by the FileInfo is replaced with
  a symbolic link, the target of the lstat can be directed to another
  location on the filesystem.

  The impact of this escape is limited to reading metadata provided by
  lstat from arbitrary locations on the filesystem. This could be used
  to probe for the presence or absence of files as well as gleaning
  metadata like file sizes, but does not permit reading or writing files
  outside the root.

  The FileInfo is now populated using fstatat.

  Thank you to Miloslav Trmač of Red Hat for reporting this issue.

  This is CVE-2026-27139 and Go issue https://go.dev/issue/77827.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-03-11 00:08:24 +01:00
George Kapetanakis
2f457226ae hack/test/unit: avoid unbound pkg vars with set -u
Signed-off-by: George Kapetanakis <github@kapetanak.is>
2026-03-09 17:01:27 -04:00
Sebastiaan van Stijn
e064824bbf ci: module-replace: ignore Dockerfile for api changes
The API Dockerfile should be ok to ignore for this check, as it's
not part of the module;

```
================================================
================================================
api diff:
-ARG GO_VERSION=1.25.7
+ARG GO_VERSION=1.25.8
================================================
Detected changes in ./api directory, checking for replace rule...
null
ERROR: Changes detected in ./api but go.mod is missing a replace rule for github.com/moby/moby/api
Please run ./hack/vendor.sh replace
================================================
```

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-03-06 14:58:38 +01:00
Sebastiaan van Stijn
02c0f96405 hack/dockerfile: fix tini build with newer CMake versions
The script is failing on Fedora 44, which ships with a newer version of
CMake that dropped removed compatibility with CMake < 3.5

    + install_tini
    + echo 'Install tini version v0.19.0'
    Install tini version v0.19.0
    + git clone https://github.com/krallin/tini.git /go/tini
    Cloning into '/go/tini'...
    + cd /go/tini
    + git checkout -q v0.19.0
    + cmake .
    CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
      Compatibility with CMake < 3.5 has been removed from CMake.

      Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
      to tell CMake that the project requires at least <min> but has been updated
      to work with policies introduced by <max> or earlier.

      Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-02-17 18:49:24 +01:00
Cory Snider
efc2f55cc1 .github: install buildx in Windows CI
Signed-off-by: Cory Snider <csnider@mirantis.com>
2026-02-06 15:47:48 -05:00
Cory Snider
5d963f26fe hack/make.ps1: respect $TEST_INTEGRATION_FAIL_FAST
Our Linux integration test harness continues to run tests for subsequent
packages after one package's tests fail unless the environment variable
TEST_INTEGRATION_FAIL_FAST is set to a nonempty value. Our Windows
integration test harness always fails fast.

Modify our integration test harness on Windows to follow the same
conventions as our Linux harness. Change `make.ps1 -TestIntegration` to
only skip testing the remaining packages on failure when the
TEST_INTEGRATON_FAIL_FAST environment variable is set.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2026-02-06 14:06:03 -05:00
Sebastiaan van Stijn
8f66e0c150 update to go1.25.7
go1.25.7 (released 2026-02-04) includes security fixes to the go command
and the crypto/tls package, as well as bug fixes to the compiler and the
crypto/x509 package. See the Go 1.25.7 milestone on our issue tracker for
details:
https://github.com/golang/go/issues?q=milestone%3AGo1.25.7+label%3ACherryPickApproved

full diff: https://github.com/golang/go/compare/go1.25.6...go1.25.7

From the security mailing list:

> Hello gophers,
>
> We have just released Go versions 1.25.7 and 1.24.13, minor point releases.
>
> These releases include 2 security fixes following the security policy:
>
> - cmd/cgo: remove user-content from doc strings in cgo ASTs
>
>   A discrepancy between how Go and C/C++ comments
>   were parsed allowed for code smuggling into the
>   resulting cgo binary.
>
>   To prevent this behavior, the cgo compiler
>   will no longer parse user-provided doc
>   comments.
>
>   Thank you to RyotaK (https://ryotak.net) of
>   GMO Flatt Security Inc. for reporting this issue.
>
>   This is CVE-2025-61732 and https://go.dev/issue/76697.
>
> - crypto/tls: unexpected session resumption when using Config.GetConfigForClient
>
>   Config.GetConfigForClient is documented to use the original Config's session
>   ticket keys unless explicitly overridden. This can cause unexpected behavior if
>   the returned Config modifies authentication parameters, like ClientCAs: a
>   connection initially established with the parent (or a sibling) Config can be
>   resumed, bypassing the modified authentication requirements.
>
>   If ClientAuth is VerifyClientCertIfGiven or RequireAndVerifyClientCert (on the
>   server) or InsecureSkipVerify is false (on the client), crypto/tls now checks
>   that the root of the previously-verified chain is still in ClientCAs/RootCAs
>   when resuming a connection.
>
>   Go 1.26 Release Candidate 2, Go 1.25.6, and Go 1.24.12 had fixed a similar issue
>   related to session ticket keys being implicitly shared by Config.Clone. Since
>   this fix is broader, the Config.Clone behavior change has been reverted.
>
>   Note that VerifyPeerCertificate still behaves as documented: it does not apply
>   to resumed connections. Applications that use Config.GetConfigForClient or
>   Config.Clone and do not wish to blindly resume connections established with the
>   original Config must use VerifyConnection instead (or SetSessionTicketKeys or
>   SessionTicketsDisabled).
>
>   Thanks to Coia Prant (github.com/rbqvq) for reporting this issue.
>
>   This updates CVE-2025-68121 and Go issue https://go.dev/issue/77217.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-02-05 10:31:32 +01:00
Sebastiaan van Stijn
3f9885fa1f hack/validate: golangci-lint: rm deprecated --print-resources-usage flag
This flag was deprecated in favor of the `--verbose` flag, which was
already set;

    Flag --print-resources-usage has been deprecated, use --verbose instead

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-02-02 17:20:49 +01:00
Paweł Gronowski
cebb12ddaf update to go1.25.6
This releases includes 6 security fixes following the security policy:

- archive/zip: denial of service when parsing arbitrary ZIP archives

    archive/zip used a super-linear file name indexing algorithm that is invoked the first time a file in an archive is opened. This can lead to a denial of service when consuming a maliciously constructed ZIP archive.

    Thanks to Thanks to Jakub Ciolek for reporting this issue.

    This is CVE-2025-61728 and Go issue https://go.dev/issue/77102.

- net/http: memory exhaustion in Request.ParseForm

    When parsing a URL-encoded form net/http may allocate an unexpected amount of
    memory when provided a large number of key-value pairs. This can result in a
    denial of service due to memory exhaustion.

    Thanks to jub0bs for reporting this issue.

    This is CVE-2025-61726 and Go issue https://go.dev/issue/77101.

- crypto/tls: Config.Clone copies automatically generated session ticket keys, session resumption does not account for the expiration of full certificate chain

    The Config.Clone methods allows cloning a Config which has already been passed
    to a TLS function, allowing it to be mutated and reused.

    If Config.SessionTicketKey has not been set, and Config.SetSessionTicketKeys has
    not been called, crypto/tls will generate random session ticket keys and
    automatically rotate them. Config.Clone would copy these automatically generated
    keys into the returned Config, meaning that the two Configs would share session
    ticket keys, allowing sessions created using one Config could be used to resume
    sessions with the other Config. This can allow clients to resume sessions even
    though the Config may be configured such that they should not be able to do so.

    Config.Clone no longer copies the automatically generated session ticket keys.
    Config.Clone still copies keys which are explicitly provided, either by setting
    Config.SessionTicketKey or by calling Config.SetSessionTicketKeys.

    This issue was discoverd by the Go Security team while investigating another
    issue reported by Coia Prant (github.com/rbqvq).

    Additionally, on the server side only the expiration of the leaf certificate, if
    one was provided during the initial handshake, was checked when considering if a
    session could be resumed. This allowed sessions to be resumed if an intermediate
    or root certificate in the chain had expired.

    Session resumption now takes into account of the full chain when determining if
    the session can be resumed.

    Thanks to Coia Prant (github.com/rbqvq) for reporting this issue.

    This is CVE-2025-68121 and Go issue https://go.dev/issue/77113.

- cmd/go: bypass of flag sanitization can lead to arbitrary code execution

    Usage of 'CgoPkgConfig' allowed execution of the pkg-config
    binary with flags that are not explicitly safe-listed.

    To prevent this behavior, compiler flags resulting from usage
    of 'CgoPkgConfig' are sanitized prior to invoking pkg-config.

    Thank you to RyotaK (https://ryotak.net) of GMO Flatt Security Inc.
    for reporting this issue.

    This is CVE-2025-61731 and go.dev/issue/77100.

- cmd/go: unexpected code execution when invoking toolchain

    The Go toolchain supports multiple VCS which are used retrieving modules and
    embedding build information into binaries.

    On systems with Mercurial installed (hg) downloading modules (e.g. via go get or
    go mod download) from non-standard sources (e.g. custom domains) can cause
    unexpected code execution due to how external VCS commands are constructed.

    On systems with Git installed, downloading and building modules with malicious
    version strings could allow an attacker to write to arbitrary files on the
    system the user has access to. This can only be triggered by explicitly
    providing the malicious version strings to the toolchain, and does not affect
    usage of @latest or bare module paths.

    The toolchain now uses safer VCS options to prevent misinterpretation of
    untrusted inputs. In addition, the toolchain now disallows module version
    strings prefixed with a "-" or "/" character.

    Thanks to splitline (@splitline) from DEVCORE Research Team for reporting this
    issue.

    This is CVE-2025-68119 and Go issue https://go.dev/issue/77099.

- crypto/tls: handshake messages may be processed at the incorrect encryption level

    During the TLS 1.3 handshake if multiple messages are sent in records that span
    encryption level boundaries (for instance the Client Hello and Encrypted
    Extensions messages), the subsequent messages may be processed before the
    encryption level changes. This can cause some minor information disclosure if a
    network-local attacker can inject messages during the handshake.

    Thanks to Coia Prant (github.com/rbqvq) for reporting this issue.

    This is CVE-2025-61730 and Go issue https://go.dev/issue/76443

View the release notes for more information:
https://go.dev/doc/devel/release#go1.25.6

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-01-16 09:28:24 +01:00
Sebastiaan van Stijn
0d27c51913 hack/validate: only search repo-dir for modules
Minor enhancement / follow-up to c8aaeea285c63f9add09e01bd8260d1bce61a97d;
make sure we never attempt to find `go.mod` files in other locations.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-01-06 14:56:37 +01:00
Austin Vazquez
c8aaeea285 ci: run golangci-lint for each Go module
Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>
2025-12-23 14:58:53 -06:00
Paweł Gronowski
7ddc5f609a hack: add nri_no_wasm build tag to static builds
Add the nri_no_wasm build tag to the BUILDFLAGS for static builds to
disable WASM plugins support in the NRI (Node Resource Interface)
component.

See: 1078130fa0/README.md (webassembly-support)

The NRI support is still minimal and disabling WASM plugins shaves off a
couple of MiB of the binary size.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-12-19 14:36:15 +01:00
Paweł Gronowski
05bbf3768b Merge pull request #51750 from vvoland/fix-validate-module-replace2
validate/module-replace: Also allow changing ref of the api module
2025-12-18 20:08:14 +00:00
Paweł Gronowski
1145b1def1 Merge pull request #51747 from vvoland/hack-dropreplace-ref
hack/vendor/dropreplace: Make more reliable
2025-12-18 20:07:59 +00:00
Akihiro Suda
c88c8a6547 Dockerfile: update RootlessKit to v2.3.6
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2025-12-18 11:03:52 +09:00
Sebastiaan van Stijn
81c170a696 Makefile: remove DOCKER_BUILD_GOGC
This option was added in 9672afa339 in 2016,
at which time tweaking GOGC showed a significant difference when building
the binary (`1m14.221s` vs `0m49.929s`).

Testing this Today doesn't show a real difference;

With GOGC=1000:

    rm -rf bundles/
    time hack/make.sh binary
    real	0m15.303s
    user	0m26.285s
    sys	0m6.383s

    real	0m4.931s
    user	0m3.103s
    sys	0m1.670s

    real	0m5.693s
    user	0m3.827s
    sys	0m2.384s

Without GOGC set;

    real	0m5.012s
    user	0m3.689s
    sys	0m1.549s

    real	0m5.298s
    user	0m3.997s
    sys	0m1.695s

    real	0m4.899s
    user	0m3.579s
    sys	0m1.423s

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-12-17 18:02:37 +01:00
Paweł Gronowski
9dd2936e04 validate/module-replace: Also allow changing ref of the api module
Remove the `replace` rule check as it's not needed because it will also
pass the second check.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-12-17 16:41:26 +01:00