diff --git a/core/modules/path/path.permissions.yml b/core/modules/path/path.permissions.yml
index c194de44bc..c5149cd9e1 100644
--- a/core/modules/path/path.permissions.yml
+++ b/core/modules/path/path.permissions.yml
@@ -2,3 +2,5 @@ administer url aliases:
   title: 'Administer URL aliases'
 create url aliases:
   title: 'Create and edit URL aliases'
+override url aliases:
+  title: 'Override system aliases'
diff --git a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
index ba57f2467c..65a2e3a8bb 100644
--- a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
+++ b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
@@ -18,7 +18,10 @@
  *   no_ui = TRUE,
  *   default_widget = "path",
  *   list_class = "\Drupal\path\Plugin\Field\FieldType\PathFieldItemList",
- *   constraints = {"PathAlias" = {}},
+ *   constraints = {
+ *    "PathAlias" = {},
+ *    "PathAliasOverride" = {}
+ *   },
  * )
  */
 class PathItem extends FieldItemBase {
diff --git a/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraint.php b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraint.php
new file mode 100644
index 0000000000..6c3620caea
--- /dev/null
+++ b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraint.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Drupal\path\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * Validation constraint for changing path aliases in pending revisions.
+ *
+ * @Constraint(
+ *   id = "PathAliasOverride",
+ *   label = @Translation("Path alias override"),
+ * )
+ */
+class PathAliasOverrideConstraint extends Constraint {
+
+  public $message = 'The alias overrides an existing URL.';
+
+}
diff --git a/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraintValidator.php b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraintValidator.php
new file mode 100644
index 0000000000..2d7a5f3398
--- /dev/null
+++ b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasOverrideConstraintValidator.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\path\Plugin\Validation\Constraint;
+
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Session\AccountProxyInterface;
+use Drupal\Core\Site\Settings;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+
+/**
+ * Constraint validator for changing path aliases in pending revisions.
+ */
+class PathAliasOverrideConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * Current user.
+   *
+   * @var \Drupal\Core\Session\AccountProxyInterface
+   */
+  protected $currentUser;
+
+  /**
+   * Settings.
+   *
+   * @var \Drupal\Core\Site\Settings
+   */
+  protected $settings;
+
+  /**
+   * Creates a new PathAliasConstraintValidator instance.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
+   *   Current user.
+   * @param \Drupal\Core\Site\Settings $settings
+   *   Drupal settings.
+   */
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, AccountProxyInterface $current_user, Settings $settings) {
+    $this->entityTypeManager = $entity_type_manager;
+    $this->currentUser = $current_user;
+    $this->settings = $settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('entity_type.manager'),
+      $container->get('current_user'),
+      $container->get('settings')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validate($value, Constraint $constraint) {
+    if (empty($value->alias)) {
+      return;
+    }
+    if ($this->currentUser->hasPermission('override url aliases')) {
+      return;
+    }
+    $path_parts = explode('/', $value->alias, 2);
+    if (empty($path_parts[1])) {
+      // This path would probably fail validation in other ways than this one.
+      return;
+    }
+    $restricted_paths = $this->settings->get('path_restricted_paths',
+      [
+        'node',
+        'taxonomy',
+        'user',
+      ],
+    );
+    if (in_array($path_parts[1], $restricted_paths)) {
+      return;
+    }
+    $this->context->addViolation($constraint->message);
+  }
+
+}
diff --git a/core/modules/path/tests/src/Functional/PathAliasTest.php b/core/modules/path/tests/src/Functional/PathAliasTest.php
index 82037ba171..9333059d5a 100644
--- a/core/modules/path/tests/src/Functional/PathAliasTest.php
+++ b/core/modules/path/tests/src/Functional/PathAliasTest.php
@@ -36,6 +36,7 @@ protected function setUp(): void {
       'administer url aliases',
       'create url aliases',
       'access content overview',
+      'override url aliases',
     ]);
     $this->drupalLogin($web_user);
   }
