diff --git a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
index b2824f8f5a..c37ca50902 100644
--- a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
@@ -20,6 +20,7 @@ class ProfileExtensionList extends ExtensionList {
     'themes' => ['stark'],
     'hidden' => FALSE,
     'base profile' => '',
+    'exclude' => [],
   ];
 
   /**
@@ -144,8 +145,11 @@ protected function doList() {
 
         // Add the current profile as a child of the ancestor.
         $ancestor->children[] = $profile_name;
-        $info['install'] = array_merge($info['install'], $ancestor->info['install']);
-        $info['themes'] = array_merge($info['themes'], $ancestor->info['themes']);
+
+        // Inherit all of the ancestor's modules and themes except for the ones
+        // in the 'exclude' list.
+        $info['install'] = array_diff(array_merge($info['install'], $ancestor->info['install']), $info['exclude']);
+        $info['themes'] = array_diff(array_merge($info['themes'], $ancestor->info['themes']), $info['exclude']);
       }
       $info['install'] = array_unique($info['install']);
       $info['themes'] = array_unique($info['themes']);
