diff --git a/core/lib/Drupal/Core/Extension/module.api.php b/core/lib/Drupal/Core/Extension/module.api.php
index 60e35eecf2a2b7f58f75d531f4a180b755713795..582ba318d7d4b7e818e108fd21904574f14c795e 100644
--- a/core/lib/Drupal/Core/Extension/module.api.php
+++ b/core/lib/Drupal/Core/Extension/module.api.php
@@ -1022,6 +1022,29 @@ function hook_requirements($phase) {
   return $requirements;
 }
 
+/**
+ * Alters requirements data.
+ *
+ * Implementations are able to alter the title, value, description or the
+ * severity of certain requirements defined by hook_requirements()
+ * implementations or even remove such entries.
+ *
+ * @param array $requirements
+ *   The requirements data to be altered.
+ *
+ * @see hook_requirements()
+ */
+function hook_requirements_alter(array &$requirements): void {
+  // Change the title from 'PHP' to 'PHP version'.
+  $requirements['php']['title'] = t('PHP version');
+
+  // Decrease the 'update status' requirement severity from warning to warning.
+  $requirements['update status']['severity'] = REQUIREMENT_INFO;
+
+  // Remove a requirements entry.
+  unset($requirements['foo']);
+}
+
 /**
  * @} End of "addtogroup hooks".
  */
diff --git a/core/modules/system/src/SystemManager.php b/core/modules/system/src/SystemManager.php
index d8fc9d36ee4c5bf06bafe0c506dcb12e0107c182..7c88d95c3e7785b82193619dcb5835b0f3dd9564 100644
--- a/core/modules/system/src/SystemManager.php
+++ b/core/modules/system/src/SystemManager.php
@@ -107,6 +107,7 @@ public function listRequirements() {
 
     // Check run-time requirements and status information.
     $requirements = $this->moduleHandler->invokeAll('requirements', ['runtime']);
+    $this->moduleHandler->alter('requirements', $requirements);
     uasort($requirements, function ($a, $b) {
       if (!isset($a['weight'])) {
         if (!isset($b['weight'])) {
diff --git a/core/modules/system/tests/modules/requirements1_test/requirements1_test.install b/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
index e8121617adc38393509c67fd4abb6e8fbc28537e..611d2d49b87eb6766d5ff025c82d91e318d10e15 100644
--- a/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
+++ b/core/modules/system/tests/modules/requirements1_test/requirements1_test.install
@@ -20,5 +20,17 @@ function requirements1_test_requirements($phase) {
     ];
   }
 
+  $requirements['requirements1_test_alterable'] = [
+    'title' => t('Requirements 1 Test Alterable'),
+    'severity' => REQUIREMENT_ERROR,
+    'description' => t('A requirement that will be altered.'),
+  ];
+
+  $requirements['requirements1_test_deletable'] = [
+    'title' => t('Requirements 1 Test Deletable'),
+    'severity' => REQUIREMENT_INFO,
+    'description' => t('A requirement that will be deleted.'),
+  ];
+
   return $requirements;
 }
diff --git a/core/modules/system/tests/modules/requirements1_test/requirements1_test.module b/core/modules/system/tests/modules/requirements1_test/requirements1_test.module
new file mode 100644
index 0000000000000000000000000000000000000000..615c578df32907e6b76f0e1be7018835713b11ae
--- /dev/null
+++ b/core/modules/system/tests/modules/requirements1_test/requirements1_test.module
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @file
+ * Hook implementations for requirements1_test module.
+ */
+
+/**
+ * Implements hook_requirements_alter().
+ */
+function requirements1_test_requirements_alter(array &$requirements): void {
+  // Change the title.
+  $requirements['requirements1_test_alterable']['title'] = t('Requirements 1 Test - Changed');
+  // Decrease the severity.
+  $requirements['requirements1_test_alterable']['severity'] = REQUIREMENT_WARNING;
+  // Delete 'requirements1_test_deletable',
+  unset($requirements['requirements1_test_deletable']);
+}
diff --git a/core/modules/system/tests/src/Kernel/Module/RequirementsTest.php b/core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f44442417fd236c4cd6718880be2febed1583f5e
--- /dev/null
+++ b/core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\Tests\system\Kernel\Module;
+
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @covers \hook_requirements
+ * @covers \hook_requirements_alter
+ * @group Module
+ */
+class RequirementsTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'requirements1_test',
+    'system',
+  ];
+
+  /**
+   * Tests requirements data altering.
+   */
+  public function testRequirementsAlter(): void {
+    $requirements = $this->container->get('system.manager')->listRequirements();
+    // @see requirements1_test_requirements_alter()
+    $this->assertEquals('Requirements 1 Test - Changed', $requirements['requirements1_test_alterable']['title']);
+    $this->assertEquals(REQUIREMENT_WARNING, $requirements['requirements1_test_alterable']['severity']);
+    $this->assertArrayNotHasKey('requirements1_test_deletable', $requirements);
+  }
+
+}