Slide 1

Slide 1 text

Whose Day is It?

Slide 2

Slide 2 text

Odin’s Day Thor’s Day Frigg’s Day

Slide 3

Slide 3 text

Whose Day is It? Odin’s Day Thor’s Day Freya’s Day

Slide 4

Slide 4 text

Whose Day is It on Tuesday?

Slide 5

Slide 5 text

Whose Day is It on Tuesday? Tyr

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Beyond SBOMs Mohammad-Ali A’râbi WAD, Berlin, Switzerland v1.1.0 The Future of Container Supply Chain Security

Slide 11

Slide 11 text

Mohammad-Ali A’râbi Software Engineer @ JobRad Docker Captain Author of “Docker and Kubernetes Security” Books: DockerSecurity.io LinkedIn, Twitter, Medium: @aerabi BlueSky, website: aerabi.com

Slide 12

Slide 12 text

Let’s fight CVEs together

Slide 13

Slide 13 text

CVE Common Vulnerabilities and Exposures They lurk in the shadows, awaiting an opportunity to attack! Which CVEs do you know?

Slide 14

Slide 14 text

CVE Common Vulnerabilities and Exposures They lurk in the shadows, awaiting an opportunity to attack! Meet: - React2Shell CVE-2025-55182 - Log4Shell CVE-2021-44228

Slide 15

Slide 15 text

Log4Shell Log4Shell was a zero-day vulnerability discovered in November 2021. In early 2022, everyone was talking about SBOMs .

Slide 16

Slide 16 text

SBOM Software Bill of Material is a list of all of the packages on a Docker image. It became more popular after the Log4Shell incident. Docker added the SBOM CLI plugin in mid 2022.

Slide 17

Slide 17 text

September 1st, 2022 Docker announced the SBOM CLI plugin Docker Community All Hands September 29th, 2022 Docker Meetup Black Forest SBOM: What’s the Hype About?

Slide 18

Slide 18 text

$ docker sbom This command is available on Docker Desktop. For Docker CE, you need to install sbom-cli-plugin. The SBOM CLI plugin basically runs Syft.

Slide 19

Slide 19 text

$ docker scout sbom Just to see: --format list To save it: docker scout sbom --format spdx --output <file>

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Docker Scout 1 Send a squad to scout the region

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

$ docker scout cves Checks the Docker image for CVEs. Will use SBOM attestations if available.

Slide 28

Slide 28 text

SBOM Attestations 2 What are attestations?

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

$ docker buildx build --sbom=true -t . This command builds the image and generate SBOM. The SBOM attestation is pushed with the image by setting the --push flag.

Slide 32

Slide 32 text

FROM ubuntu:latest AS build RUN apt-get update && apt-get install -y build-essential WORKDIR /app COPY hello.cpp . RUN g++ -o hello hello.cpp -static # -------------------- FROM scratch COPY --from=build /app/hello /hello CMD ["/hello"]

Slide 33

Slide 33 text

FROM ubuntu:latest AS build ARG BUILDKIT_SBOM_SCAN_STAGE=true RUN apt-get update && apt-get install -y build-essential WORKDIR /app COPY hello.cpp . RUN g++ -o hello hello.cpp -static # -------------------- FROM scratch COPY --from=build /app/hello /hello CMD ["/hello"]

Slide 34

Slide 34 text

- name: Build and push uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max

Slide 35

Slide 35 text

- name: Build and push uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max provenance: mode=max sbom: true

Slide 36

Slide 36 text

Selfie Say CVE!

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Norse runes A B C D E F G H I J K L M N O P R S T U TH Y Z EE U

Slide 39

Slide 39 text

Hardened Images 3 How hard can it be?

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

DHI Docker Hardened Images are a set of near-zero-CVE that were open-sourced in December 2025. These images are available for dev (installation stages) and production (final stage of a production image).

Slide 42

Slide 42 text

# Not hardened FROM node:24 AS build # For build stage FROM dhi.io/node:24-dev AS build # For production stage FROM dhi.io/node:24 Guess what’s the CVE difference?

Slide 43

Slide 43 text

# Not hardened FROM node:24 AS build # For build stage FROM dhi.io/node:24-dev AS build # For production stage FROM dhi.io/node:24 Node 24 has 9 high CVEs, 17 medium, and 169 low. DHI Node has 8 low CVEs. 95% fewer CVEs 95%

Slide 44

Slide 44 text

Learn more: ContainerSecurity.dev/blog

Slide 45

Slide 45 text

Exempted CVEs 4 Some CVEs are harmless

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

VEX Attestations 5 The attestations of being useless

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

vexctl create \ --author="[email protected]" \ --product="pkg:docker/$IMAGE" \ --subcomponents="pkg:deb/debian/openssl@x"\ --vuln="CVE-2026-28390" \ --status="not_affected" \ --justification="vulnerable_code_not_in_ execute_path" \ --file="CVE-2026-28390.vex.json" docker scout attestation add \ --file CVE-2026-28390.vex.json \ --predicate-type https://openvex.dev/ns/v0.2.0 \ $IMAGE

Slide 51

Slide 51 text

The Signature 6 Here is Evie

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

OCI Referrers 7 You need a referral letter for the MRI

Slide 54

Slide 54 text

docker buildx build \ --sbom=true \ --output type=local,dest=out . cosign attest \ --type spdxjson \ --predicate out/sbom-build.spdx.json \ --key cosign.key \ $IMAGE

Slide 55

Slide 55 text

oras discover dhi.io/node:25 \ --platform linux/amd64 To check hardened images using Oras, first you need to log into Docker Hub account.

Slide 56

Slide 56 text

The Zero-Day 0 Count from zero

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

Let’s Dance! II.0 Zumba, rumba, or salsa?

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

SLSA v1.2 Build Track L1. Provenance exists Builds don’t influence each other. Sign key is not accessible in build steps. Provenance is generated Build is done on a hosted environment, provenance is generated and signed L2. Hosted build platform L3. Hardened build slsa.dev

Slide 63

Slide 63 text

docker buildx build \ --sbom=true \ --attest type=provenance,mode=min,version=v1 . On min: ● Build timestamps ● Build materials ● Source repository and revision ● Build platform On max: ● The Dockerfile ● Exact steps taken to build the image

Slide 64

Slide 64 text

If sorrow gathers to overwhelm the hearts of lovers, The cupbearer and I will unite to dismantle its very foundations. —Hafez, the Lissan al-Ghayb (1315–1390)

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

Shai Hulud There are 1.0, 2.0, and Mini Shai Hulud. Self-propagating worm compromising pre-install and post-install script.

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

November 2025 Uses preinstall instead of postinstall September 2025 Autonomous, harvests PATs and API keys Shai Hulud 2.0 Shai Hulud 1.0 $ npm ci --ignore-scripts

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

Mini Shai Hulud So cute and tiny! 29th of April. Compromised SAP Cloud Application Programming. Targets coding agents and IDE lifecycles.

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

How to Kill a Shai Hulud?

Slide 73

Slide 73 text

$ sbx run claude Docker Sandbox puts your AI agent in a microVM and doesn’t give it access to the tokens.

Slide 74

Slide 74 text

TanStack Poisoning CI cache poisoning! May 11th, 2026. The worm is blocking sunshine, you can’t get tanned. Rendered SLSA level 3 insufficient.

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

Miasma Wave 1 June 1st The worm of Shai Hulud family compromised 32 packages in @redhat-cloud-services namespace.

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

Miasma Wave 2: Phantom Gyp June 3rd Exploits the gyp binding. Bypasses --ignore-scripts.

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Checklist Put your AI coding agents into a Sandbox Implement SLSA L3 to protect your keys Use pinned dependencies Use keyless signing to avoid stolen keys Have a cool-down period before installing Disable lifecycle scripts by default Harden Build Pin Your Version Cool Down Don’t Trust AI Short-Lived Key Disable Scripts

Slide 81

Slide 81 text

Checklist When the next React2Shell happens, you need to delete caches, rebuild, redistribute, and act fast Have an Incident Playbook

Slide 82

Slide 82 text

Outro # Get out! —Arnold Schwarzenegger

Slide 83

Slide 83 text

REDDUCK2026 at: ContainerSecurity.dev 50%

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

No content

Slide 86

Slide 86 text

buy.DockerSecurity.io Slides DKS BFS Comic

Slide 87

Slide 87 text

CREDITS: This presentation template was created by Slidesgo , and includes icons by Flaticon , and infographics & images by Freepik Thanks! Do you have any questions? [email protected] aerabi.com

Slide 88

Slide 88 text

The duality between Thor and Loki His hand can hold swords or big jars of beer Bravery Attribute Effective against giant serpents, but not CVEs Hammer, Mjolnir Jfokus organizer also gave me horns Cunning and malice Green cloak is also very useful in dark forests Defender of Asgard Loki can shapeshift and turn into Jfokus speaker Ability to transform The gods is with small G, so lesser gods like Baldur. Deceiver of gods