diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ca2f147b..950084607 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file.
- hadoop: Add `3.5.0` and `3.4.3` ([#1511]).
- airflow: Add `3.2.2` ([#1519], [#1541]).
- druid: Add `37.0.0` ([#1535]).
+- spark: Add `4.1.2` ([#1550]).
### Changed
@@ -82,6 +83,7 @@ All notable changes to this project will be documented in this file.
[#1539]: https://github.com/stackabletech/docker-images/pull/1539
[#1541]: https://github.com/stackabletech/docker-images/pull/1541
[#1548]: https://github.com/stackabletech/docker-images/pull/1548
+[#1550]: https://github.com/stackabletech/docker-images/pull/1550
## [26.3.0] - 2026-03-16
diff --git a/spark-k8s/boil-config.toml b/spark-k8s/boil-config.toml
index 5aa25fff4..3a5082f5b 100644
--- a/spark-k8s/boil-config.toml
+++ b/spark-k8s/boil-config.toml
@@ -21,9 +21,7 @@ jmx-exporter-version = "1.3.0"
tini-version = "0.19.0"
hbase-connector-version = "1.0.1_3.5.8"
-
-
-# LTS since 26.7.0
+# Deprecated since 26.7
[versions."4.1.1"]
containerfile = "Dockerfile.4"
@@ -39,3 +37,20 @@ stax2-api-version = "4.2.2" # Needs to match https://mvnrepository
woodstox-core-version = "7.1.1" # Needs to match https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.20.0
jmx-exporter-version = "1.3.0"
tini-version = "0.19.0"
+
+# LTS since 26.7.0
+[versions."4.1.2"]
+containerfile = "Dockerfile.4"
+
+[versions."4.1.2".local-images]
+"hadoop/hadoop" = "3.4.3"
+java-base = "21"
+java-devel = "21"
+
+[versions."4.1.2".build-arguments]
+python-version = "3.12"
+jackson-dataformat-xml-version = "2.21.2" # Needs to match https://mvnrepository.com/artifact/org.apache.spark/spark-parent_2.13/4.1.2
+stax2-api-version = "4.2.2" # Needs to match https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.21.2
+woodstox-core-version = "7.1.1" # Needs to match https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.21.2
+jmx-exporter-version = "1.3.0"
+tini-version = "0.19.0"
diff --git a/spark-k8s/stackable/patches/4.1.2/0001-Update-CycloneDX-plugin.patch b/spark-k8s/stackable/patches/4.1.2/0001-Update-CycloneDX-plugin.patch
new file mode 100644
index 000000000..74480cc10
--- /dev/null
+++ b/spark-k8s/stackable/patches/4.1.2/0001-Update-CycloneDX-plugin.patch
@@ -0,0 +1,38 @@
+From 202ac6e7a2f3183702bdfeb2ea45528a125856d0 Mon Sep 17 00:00:00 2001
+From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com>
+Date: Thu, 15 Jan 2026 14:27:23 +0100
+Subject: Update CycloneDX plugin
+
+---
+ dev/make-distribution.sh | 1 -
+ pom.xml | 5 +++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/dev/make-distribution.sh b/dev/make-distribution.sh
+index 16598bda87..327fa76314 100755
+--- a/dev/make-distribution.sh
++++ b/dev/make-distribution.sh
+@@ -185,7 +185,6 @@ else
+ -Dmaven.javadoc.skip=true \
+ -Dmaven.scaladoc.skip=true \
+ -Dmaven.source.skip \
+- -Dcyclonedx.skip=true \
+ $@)
+ fi
+
+diff --git a/pom.xml b/pom.xml
+index dc20115199..b2fbb0d58f 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -3333,6 +3333,11 @@
+ org.cyclonedx
+ cyclonedx-maven-plugin
+ 2.9.1
++
++ application
++ 1.5
++ false
++
+
+
+ package
diff --git a/spark-k8s/stackable/patches/4.1.2/patchable.toml b/spark-k8s/stackable/patches/4.1.2/patchable.toml
new file mode 100644
index 000000000..f81adeb94
--- /dev/null
+++ b/spark-k8s/stackable/patches/4.1.2/patchable.toml
@@ -0,0 +1,2 @@
+mirror = "https://github.com/stackabletech/spark.git"
+base = "f0bb2e6a47d0ebda424ffd633fcea8644a597954"