mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00

go1.20.8 (released 2023-09-06) includes two security fixes to the html/template package, as well as bug fixes to the compiler, the go command, the runtime, and the crypto/tls, go/types, net/http, and path/filepath packages. See the Go 1.20.8 milestone on our issue tracker for details: https://github.com/golang/go/issues?q=milestone%3AGo1.20.8+label%3ACherryPickApproved full diff: https://github.com/golang/go/compare/go1.20.7...go1.20.8 From the security mailing: [security] Go 1.21.1 and Go 1.20.8 are released Hello gophers, We have just released Go versions 1.21.1 and 1.20.8, minor point releases. These minor releases include 4 security fixes following the security policy: - cmd/go: go.mod toolchain directive allows arbitrary execution The go.mod toolchain directive, introduced in Go 1.21, could be leveraged to execute scripts and binaries relative to the root of the module when the "go" command was executed within the module. This applies to modules downloaded using the "go" command from the module proxy, as well as modules downloaded directly using VCS software. Thanks to Juho Nurminen of Mattermost for reporting this issue. This is CVE-2023-39320 and Go issue https://go.dev/issue/62198. - html/template: improper handling of HTML-like comments within script contexts The html/template package did not properly handle HMTL-like "<!--" and "-->" comment tokens, nor hashbang "#!" comment tokens, in <script> contexts. This may cause the template parser to improperly interpret the contents of <script> contexts, causing actions to be improperly escaped. This could be leveraged to perform an XSS attack. Thanks to Takeshi Kaneko (GMO Cybersecurity by Ierae, Inc.) for reporting this issue. This is CVE-2023-39318 and Go issue https://go.dev/issue/62196. - html/template: improper handling of special tags within script contexts The html/template package did not apply the proper rules for handling occurrences of "<script", "<!--", and "</script" within JS literals in <script> contexts. This may cause the template parser to improperly consider script contexts to be terminated early, causing actions to be improperly escaped. This could be leveraged to perform an XSS attack. Thanks to Takeshi Kaneko (GMO Cybersecurity by Ierae, Inc.) for reporting this issue. This is CVE-2023-39319 and Go issue https://go.dev/issue/62197. - crypto/tls: panic when processing post-handshake message on QUIC connections Processing an incomplete post-handshake message for a QUIC connection caused a panic. Thanks to Marten Seemann for reporting this issue. This is CVE-2023-39321 and CVE-2023-39322 and Go issue https://go.dev/issue/62266. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
145 lines
4.5 KiB
Docker
145 lines
4.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG GO_VERSION=1.20.8
|
|
ARG XX_VERSION=1.2.1
|
|
|
|
ARG DOCKER_VERSION=24.0.2
|
|
ARG GOTESTSUM_VERSION=v1.9.0
|
|
ARG REGISTRY_VERSION=2.8.0
|
|
ARG BUILDKIT_VERSION=v0.11.6
|
|
|
|
# xx is a helper for cross-compilation
|
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
|
|
|
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS golatest
|
|
|
|
FROM golatest AS gobase
|
|
COPY --from=xx / /
|
|
RUN apk add --no-cache file git
|
|
ENV GOFLAGS=-mod=vendor
|
|
ENV CGO_ENABLED=0
|
|
WORKDIR /src
|
|
|
|
FROM registry:$REGISTRY_VERSION AS registry
|
|
|
|
FROM moby/buildkit:$BUILDKIT_VERSION AS buildkit
|
|
|
|
FROM gobase AS docker
|
|
ARG TARGETPLATFORM
|
|
ARG DOCKER_VERSION
|
|
WORKDIR /opt/docker
|
|
RUN DOCKER_ARCH=$(case ${TARGETPLATFORM:-linux/amd64} in \
|
|
"linux/amd64") echo "x86_64" ;; \
|
|
"linux/arm/v6") echo "armel" ;; \
|
|
"linux/arm/v7") echo "armhf" ;; \
|
|
"linux/arm64") echo "aarch64" ;; \
|
|
"linux/ppc64le") echo "ppc64le" ;; \
|
|
"linux/s390x") echo "s390x" ;; \
|
|
*) echo "" ;; esac) \
|
|
&& echo "DOCKER_ARCH=$DOCKER_ARCH" \
|
|
&& wget -qO- "https://download.docker.com/linux/static/stable/${DOCKER_ARCH}/docker-${DOCKER_VERSION}.tgz" | tar xvz --strip 1
|
|
RUN ./dockerd --version && ./containerd --version && ./ctr --version && ./runc --version
|
|
|
|
FROM gobase AS gotestsum
|
|
ARG GOTESTSUM_VERSION
|
|
ENV GOFLAGS=
|
|
RUN --mount=target=/root/.cache,type=cache \
|
|
GOBIN=/out/ go install "gotest.tools/gotestsum@${GOTESTSUM_VERSION}" && \
|
|
/out/gotestsum --version
|
|
|
|
FROM gobase AS buildx-version
|
|
RUN --mount=type=bind,target=. <<EOT
|
|
set -e
|
|
mkdir /buildx-version
|
|
echo -n "$(./hack/git-meta version)" | tee /buildx-version/version
|
|
echo -n "$(./hack/git-meta revision)" | tee /buildx-version/revision
|
|
EOT
|
|
|
|
FROM gobase AS buildx-build
|
|
ARG TARGETPLATFORM
|
|
RUN --mount=type=bind,target=. \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=bind,from=buildx-version,source=/buildx-version,target=/buildx-version <<EOT
|
|
set -e
|
|
xx-go --wrap
|
|
DESTDIR=/usr/bin VERSION=$(cat /buildx-version/version) REVISION=$(cat /buildx-version/revision) GO_EXTRA_LDFLAGS="-s -w" ./hack/build
|
|
xx-verify --static /usr/bin/docker-buildx
|
|
EOT
|
|
|
|
FROM gobase AS test
|
|
ENV SKIP_INTEGRATION_TESTS=1
|
|
RUN --mount=type=bind,target=. \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
go test -v -coverprofile=/tmp/coverage.txt -covermode=atomic ./... && \
|
|
go tool cover -func=/tmp/coverage.txt
|
|
|
|
FROM scratch AS test-coverage
|
|
COPY --from=test /tmp/coverage.txt /coverage.txt
|
|
|
|
FROM scratch AS binaries-unix
|
|
COPY --link --from=buildx-build /usr/bin/docker-buildx /buildx
|
|
|
|
FROM binaries-unix AS binaries-darwin
|
|
FROM binaries-unix AS binaries-linux
|
|
|
|
FROM scratch AS binaries-windows
|
|
COPY --link --from=buildx-build /usr/bin/docker-buildx /buildx.exe
|
|
|
|
FROM binaries-$TARGETOS AS binaries
|
|
# enable scanning for this stage
|
|
ARG BUILDKIT_SBOM_SCAN_STAGE=true
|
|
|
|
FROM gobase AS integration-test-base
|
|
# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies
|
|
RUN apk add --no-cache \
|
|
btrfs-progs \
|
|
e2fsprogs \
|
|
e2fsprogs-extra \
|
|
ip6tables \
|
|
iptables \
|
|
openssl \
|
|
shadow-uidmap \
|
|
xfsprogs \
|
|
xz
|
|
COPY --link --from=gotestsum /out/gotestsum /usr/bin/
|
|
COPY --link --from=registry /bin/registry /usr/bin/
|
|
COPY --link --from=docker /opt/docker/* /usr/bin/
|
|
COPY --link --from=buildkit /usr/bin/buildkitd /usr/bin/
|
|
COPY --link --from=buildkit /usr/bin/buildctl /usr/bin/
|
|
COPY --link --from=binaries /buildx /usr/bin/
|
|
|
|
FROM integration-test-base AS integration-test
|
|
COPY . .
|
|
|
|
# Release
|
|
FROM --platform=$BUILDPLATFORM alpine AS releaser
|
|
WORKDIR /work
|
|
ARG TARGETPLATFORM
|
|
RUN --mount=from=binaries \
|
|
--mount=type=bind,from=buildx-version,source=/buildx-version,target=/buildx-version <<EOT
|
|
set -e
|
|
mkdir -p /out
|
|
cp buildx* "/out/buildx-$(cat /buildx-version/version).$(echo $TARGETPLATFORM | sed 's/\//-/g')$(ls buildx* | sed -e 's/^buildx//')"
|
|
EOT
|
|
|
|
FROM scratch AS release
|
|
COPY --from=releaser /out/ /
|
|
|
|
# Shell
|
|
FROM docker:$DOCKER_VERSION AS dockerd-release
|
|
FROM alpine AS shell
|
|
RUN apk add --no-cache iptables tmux git vim less openssh
|
|
RUN mkdir -p /usr/local/lib/docker/cli-plugins && ln -s /usr/local/bin/buildx /usr/local/lib/docker/cli-plugins/docker-buildx
|
|
COPY ./hack/demo-env/entrypoint.sh /usr/local/bin
|
|
COPY ./hack/demo-env/tmux.conf /root/.tmux.conf
|
|
COPY --from=dockerd-release /usr/local/bin /usr/local/bin
|
|
WORKDIR /work
|
|
COPY ./hack/demo-env/examples .
|
|
COPY --from=binaries / /usr/local/bin/
|
|
VOLUME /var/lib/docker
|
|
ENTRYPOINT ["entrypoint.sh"]
|
|
|
|
FROM binaries
|