diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index d6438ca8e..30dd8e66a 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -46,6 +46,7 @@ on: - '.github/workflows/appimage.yml' - 'dist/linux/appimage/**' - 'dist/linux/common/**' + - 'dist/common/**' - 'dist/linux/resources/**' permissions: @@ -137,6 +138,8 @@ jobs: --compress zip-0 env: JMOD_PATHS: ${{ steps.jep-493-check.outputs.jmod_paths }} + - name: Remove distrusted CA certificates from runtime + run: ${JAVA_HOME}/bin/java dist/common/RemoveDistrustedCaCerts.java runtime/lib/security/cacerts - name: Run jpackage run: > ${JAVA_HOME}/bin/jpackage diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index a14b1a76d..5237faf6c 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -21,6 +21,7 @@ on: - '.github/workflows/debian.yml' - 'dist/linux/debian/**' - 'dist/linux/common/**' + - 'dist/common/**' - 'dist/linux/resources/**' env: @@ -113,6 +114,7 @@ jobs: cp -r target/mods pkgdir cp -r jmods pkgdir cp -r dist/linux/common/ pkgdir + cp dist/common/RemoveDistrustedCaCerts.java pkgdir/common cp target/cryptomator-*.jar pkgdir/mods tar -cJf cryptomator_${{ steps.deb-version.outputs.debVersion }}.orig.tar.xz -C pkgdir . - name: Patch and rename pkgdir diff --git a/.github/workflows/linux-flatpak.yml b/.github/workflows/linux-flatpak.yml index cf48a46c8..83d65a9ba 100644 --- a/.github/workflows/linux-flatpak.yml +++ b/.github/workflows/linux-flatpak.yml @@ -21,6 +21,7 @@ on: - '.github/workflows/linux-flatpak.yml' - 'dist/linux/flatpak/**' - 'dist/linux/common/**' + - 'dist/common/**' - 'dist/linux/resources/**' permissions: diff --git a/.github/workflows/linux-makepkg.yml b/.github/workflows/linux-makepkg.yml index 8d771bc45..8dee11cbc 100644 --- a/.github/workflows/linux-makepkg.yml +++ b/.github/workflows/linux-makepkg.yml @@ -21,6 +21,7 @@ on: - '.github/workflows/linux-makepkg.yml' - 'dist/linux/makepkg/**' - 'dist/linux/common/**' + - 'dist/common/**' - 'dist/linux/resources/**' permissions: diff --git a/.github/workflows/mac-dmg-x64.yml b/.github/workflows/mac-dmg-x64.yml index f43a38b2a..45c8382e7 100644 --- a/.github/workflows/mac-dmg-x64.yml +++ b/.github/workflows/mac-dmg-x64.yml @@ -140,6 +140,8 @@ jobs: --no-man-pages --strip-debug --compress zip-0 + - name: Remove distrusted CA certificates from runtime + run: ${JAVA_HOME}/bin/java dist/common/RemoveDistrustedCaCerts.java runtime/lib/security/cacerts - name: Run jpackage run: > ${JAVA_HOME}/bin/jpackage diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index c92f20154..2fb216459 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -51,6 +51,7 @@ on: paths: - '.github/workflows/mac-dmg.yml' - 'dist/mac/**' + - 'dist/common/**' env: JAVA_DIST: 'temurin' @@ -138,6 +139,8 @@ jobs: --no-man-pages --strip-debug --compress zip-0 + - name: Remove distrusted CA certificates from runtime + run: ${JAVA_HOME}/bin/java dist/common/RemoveDistrustedCaCerts.java runtime/lib/security/cacerts - name: Run jpackage run: > ${JAVA_HOME}/bin/jpackage diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index d955aa069..96e6befed 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -54,6 +54,7 @@ on: paths: - '.github/workflows/win-exe.yml' - 'dist/win/**' + - 'dist/common/**' env: @@ -159,6 +160,8 @@ jobs: --no-man-pages --strip-debug --compress zip-0 + - name: Remove distrusted CA certificates from runtime + run: ${JAVA_HOME}/bin/java dist/common/RemoveDistrustedCaCerts.java runtime/lib/security/cacerts - name: Run jpackage run: > ${JAVA_HOME}/bin/jpackage diff --git a/CHANGELOG.md b/CHANGELOG.md index a5dd3cc25..2a0ce9f76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,11 @@ Changes to prior versions can be found on the [Github release page](https://gith - `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.21.4 to 2.21.6 +## [1.19.4](https://github.com/cryptomator/cryptomator/releases/1.19.4) - 2026-10-21 +### Security +* Removed compromised eMudhra certs from app internal CA store ([62a0f41](https://github.com/cryptomator/cryptomator/commit/62a0f41523d5e1818d76ef3e9b6f4560053f2445)) + + ## [1.19.3](https://github.com/cryptomator/cryptomator/releases/1.19.3) - 2026-06-29 ### Added * New error dialog if importing a vault fails ([#4243](https://github.com/cryptomator/cryptomator/pull/4243)) diff --git a/dist/common/RemoveDistrustedCaCerts.java b/dist/common/RemoveDistrustedCaCerts.java new file mode 100644 index 000000000..f261114fb --- /dev/null +++ b/dist/common/RemoveDistrustedCaCerts.java @@ -0,0 +1,58 @@ +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyStore; +import java.security.MessageDigest; +import java.security.Security; +import java.util.Collections; +import java.util.HexFormat; +import java.util.Map; + +/** + * Removes distrusted root CA certificates from a JDK {@code cacerts} trust store, matching by SHA-256 fingerprint so that vendor-specific alias names don't matter. + *
+ * Run after {@code jlink} and before {@code jpackage} on the runtime image, e.g. {@code $JAVA_HOME/bin/java dist/common/RemoveDistrustedCaCerts.java runtime/lib/security/cacerts}.
+ * The trust store is written back password-less, as the JDK expects for {@code cacerts}.
+ */
+public class RemoveDistrustedCaCerts {
+
+ // Roots affected by the eMudhra intermediate CA key compromise (2026-10-17), see https://emudhra.we-have-a-problem.com/roots.json and https://bugzilla.mozilla.org/show_bug.cgi?id=2083449
+ private static final Map