diff --git a/Marlin/src/gcode/eeprom/M500-M504.cpp b/Marlin/src/gcode/eeprom/M500-M504.cpp
index 6da1d1cbd73..31da2c5adf8 100644
--- a/Marlin/src/gcode/eeprom/M500-M504.cpp
+++ b/Marlin/src/gcode/eeprom/M500-M504.cpp
@@ -66,11 +66,19 @@ void GcodeSuite::M502() {
 
     #if ENABLED(CONFIGURATION_EMBEDDING)
       if (parser.seen_test('C')) {
-        SdBaseFile file;
-        const uint16_t size = sizeof(mc_zip);
+        MediaFile file;
         // Need to create the config size on the SD card
-        if (file.open(card.getroot(), "mc.zip", O_WRITE|O_CREAT) && file.write(pgm_read_ptr(mc_zip), size) != -1 && file.close())
-          SERIAL_ECHO_MSG("Configuration saved as 'mc.zip'");
+        MediaFile root = card.getroot();
+        if (file.open(&root, "mc.zip", O_WRITE|O_CREAT)) {
+          bool success = true;
+          for (uint16_t i = 0; success && i < sizeof(mc_zip); ++i) {
+            const uint8_t c = pgm_read_byte(&mc_zip[i]);
+            file.write(c);
+          }
+          success = file.close() && success;
+
+          if (success) SERIAL_ECHO_MSG("Configuration saved as 'mc.zip'");
+        }
       }
     #endif
   }
diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py
index 4fc0084e575..0da02f837b2 100644
--- a/buildroot/share/PlatformIO/scripts/signature.py
+++ b/buildroot/share/PlatformIO/scripts/signature.py
@@ -56,13 +56,14 @@ def compute_build_signature(env):
     files_to_keep = [ 'Marlin/Configuration.h', 'Marlin/Configuration_adv.h' ]
 
     build_path = Path(env['PROJECT_BUILD_DIR'], env['PIOENV'])
+    build_path_relative = Path('.pio', 'build', env['PIOENV'])
 
     # Check if we can skip processing
     hashes = ''
     for header in files_to_keep:
         hashes += get_file_sha256sum(header)[0:10]
 
-    marlin_json = build_path / 'marlin_config.json'
+    marlin_json = build_path_relative / 'marlin_config.json'
     marlin_zip = build_path / 'mc.zip'
 
     # Read existing config file