Skip to content

Commit c8e0036

Browse files
authored
fix: Fix CVE-2023-44487 in mmlspark/release Docker image (#2520)
- Upgrade base from Ubuntu 20.04 to 22.04 (MCR mirror) - Bump Spark from 3.5.0 to 3.5.4 (eliminates vulnerable jetty-io) - Update conda installer URL and add TOS acceptance - Add -y flag to conda update for non-interactive builds - Fix PATH to match conda install prefix (/usr/local) - Upgrade PyJWT >= 2.12.0 (CVE-2026-32597) - Fix minimal Dockerfile with same security updates - Restructure pipeline: build always, push only on release Resolves IcM incident 31000000570827 / MSRC case 110886
1 parent 895752c commit c8e0036

3 files changed

Lines changed: 47 additions & 42 deletions

File tree

pipeline.yaml

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,8 @@ jobs:
243243
failTaskOnFailedTests: true
244244
condition: and(eq(variables.runTests, 'True'), succeededOrFailed())
245245
#
246-
- job: PublishDocker
247-
condition: eq('${{ parameters.publishDockerImages }}', true)
248-
displayName: PublishDocker
246+
- job: BuildDocker
247+
displayName: BuildDocker
249248
pool:
250249
vmImage: ubuntu-22.04
251250
steps:
@@ -259,55 +258,53 @@ jobs:
259258
VERSION=$(sbt "core/version" | tail -1 | cut -d' ' -f2 | sed 's/\x1b\[[0-9;]*m//g')
260259
echo '##vso[task.setvariable variable=version]'$VERSION
261260
echo '##vso[task.setvariable variable=gittag]'$(git tag -l --points-at HEAD)
261+
# Build all images (runs on every build to validate Dockerfiles)
262262
- task: Docker@2
263263
displayName: Demo Image Build
264264
inputs:
265-
containerRegistry: 'SynapseML MCR MSI'
266-
repository: 'public/mmlspark/build-demo'
267265
command: 'build'
268266
buildContext: "."
269267
Dockerfile: 'tools/docker/demo/Dockerfile'
270-
tags: $(version)
271-
arguments: --build-arg SYNAPSEML_VERSION=$(version)
272-
- task: Docker@2
273-
displayName: Demo Image Push
274-
inputs:
275-
containerRegistry: 'SynapseML MCR MSI'
276-
repository: 'public/mmlspark/build-demo'
277-
command: 'push'
278-
tags: $(version)
268+
arguments: --build-arg SYNAPSEML_VERSION=$(version) -t mmlspark-demo:$(version)
279269
- task: Docker@2
280270
displayName: Minimal Image Build
281271
inputs:
282-
containerRegistry: 'SynapseML MCR MSI'
283-
repository: 'public/mmlspark/build-minimal'
284272
command: 'build'
285273
buildContext: "."
286274
Dockerfile: 'tools/docker/minimal/Dockerfile'
287-
tags: $(version)
288-
arguments: --build-arg SYNAPSEML_VERSION=$(version)
275+
arguments: --build-arg SYNAPSEML_VERSION=$(version) -t mmlspark-minimal:$(version)
276+
# Push demo and minimal on every master build
277+
- bash: |
278+
set -e
279+
docker tag mmlspark-demo:$(version) mmlsparkmcr.azurecr.io/public/mmlspark/build-demo:$(version)
280+
docker tag mmlspark-minimal:$(version) mmlsparkmcr.azurecr.io/public/mmlspark/build-minimal:$(version)
281+
condition: and(eq(variables.isMaster, true), eq('${{ parameters.publishDockerImages }}', true))
282+
displayName: Tag Dev Images for ACR
289283
- task: Docker@2
290-
displayName: Minimal Image Push
284+
condition: and(eq(variables.isMaster, true), eq('${{ parameters.publishDockerImages }}', true))
285+
displayName: Demo Image Push
291286
inputs:
292287
containerRegistry: 'SynapseML MCR MSI'
293-
repository: 'public/mmlspark/build-minimal'
288+
repository: 'public/mmlspark/build-demo'
294289
command: 'push'
295290
tags: $(version)
296291
- task: Docker@2
297-
condition: and(eq(variables.isMaster, true), startsWith(variables['gittag'], 'v'))
298-
displayName: Release Image Build
292+
condition: and(eq(variables.isMaster, true), eq('${{ parameters.publishDockerImages }}', true))
293+
displayName: Minimal Image Push
299294
inputs:
300295
containerRegistry: 'SynapseML MCR MSI'
301-
repository: 'public/mmlspark/release'
302-
command: 'build'
303-
buildContext: "."
304-
Dockerfile: 'tools/docker/demo/Dockerfile'
305-
tags: |
306-
$(version)
307-
latest
308-
arguments: --build-arg SYNAPSEML_VERSION=$(version)
296+
repository: 'public/mmlspark/build-minimal'
297+
command: 'push'
298+
tags: $(version)
299+
# Push release only on tagged releases
300+
- bash: |
301+
set -e
302+
docker tag mmlspark-demo:$(version) mmlsparkmcr.azurecr.io/public/mmlspark/release:$(version)
303+
docker tag mmlspark-demo:$(version) mmlsparkmcr.azurecr.io/public/mmlspark/release:latest
304+
condition: and(eq('${{ parameters.publishDockerImages }}', true), eq(variables.isMaster, true), startsWith(variables['gittag'], 'v'))
305+
displayName: Tag Release Image for ACR
309306
- task: Docker@2
310-
condition: and(eq(variables.isMaster, true), startsWith(variables['gittag'], 'v'))
307+
condition: and(eq('${{ parameters.publishDockerImages }}', true), eq(variables.isMaster, true), startsWith(variables['gittag'], 'v'))
311308
displayName: Release Image Push
312309
inputs:
313310
containerRegistry: 'SynapseML MCR MSI'

tools/docker/demo/Dockerfile

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM mcr.microsoft.com/oss/mirror/docker.io/library/ubuntu:20.04
1+
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
22

33
ARG SYNAPSEML_VERSION=1.1.2
44
ARG DEBIAN_FRONTEND=noninteractive
55

6-
ENV SPARK_VERSION=3.5.0
6+
ENV SPARK_VERSION=3.5.4
77
ENV HADOOP_VERSION=3
88
ENV SYNAPSEML_VERSION=${SYNAPSEML_VERSION}
99
ENV JAVA_HOME /usr/lib/jvm/java-1.11.0-openjdk-amd64
@@ -23,14 +23,18 @@ RUN apt-get -qq update \
2323
&& rm -rf /var/lib/apt/lists/* /var/log/dpkg.log
2424

2525
# Install conda and required dependencies
26-
RUN curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
26+
RUN curl -sSL https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
2727
&& bash /tmp/miniconda.sh -bfp /usr/local \
2828
&& rm -rf /tmp/miniconda.sh \
29-
&& conda update conda \
29+
&& conda config --set auto_activate_base false \
30+
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main \
31+
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r \
32+
&& conda update -y conda \
3033
&& conda install -y python=3 jupyter pyspark \
34+
&& pip install --upgrade "PyJWT>=2.12.0" \
3135
&& conda clean --all --yes
3236

33-
ENV PATH /opt/conda/bin:$PATH
37+
ENV PATH /usr/local/bin:$PATH
3438

3539
# Download and install Spark
3640
RUN wget https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \

tools/docker/minimal/Dockerfile

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM mcr.microsoft.com/oss/mirror/docker.io/library/ubuntu:20.04
1+
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
22

33
ARG SYNAPSEML_VERSION=1.1.2
44
ARG DEBIAN_FRONTEND=noninteractive
55

6-
ENV SPARK_VERSION=3.5.0
6+
ENV SPARK_VERSION=3.5.4
77
ENV HADOOP_VERSION=3
88
ENV SYNAPSEML_VERSION=${SYNAPSEML_VERSION}
99
ENV JAVA_HOME /usr/lib/jvm/java-1.11.0-openjdk-amd64
@@ -23,14 +23,18 @@ RUN apt-get -qq update \
2323
&& rm -rf /var/lib/apt/lists/* /var/log/dpkg.log
2424

2525
# Install conda and required dependencies
26-
RUN curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
26+
RUN curl -sSL https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
2727
&& bash /tmp/miniconda.sh -bfp /usr/local \
2828
&& rm -rf /tmp/miniconda.sh \
29-
&& conda update conda \
30-
&& conda install -y python=3 jupyter pyspark \
29+
&& conda config --set auto_activate_base false \
30+
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main \
31+
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r \
32+
&& conda update -y conda \
33+
&& conda install -y python=3 pyspark \
34+
&& pip install --upgrade "PyJWT>=2.12.0" \
3135
&& conda clean --all --yes
3236

33-
ENV PATH /opt/conda/bin:$PATH
37+
ENV PATH /usr/local/bin:$PATH
3438

3539
# Download and install Spark
3640
RUN wget https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \

0 commit comments

Comments
 (0)