diff --git a/composer.json b/composer.json
index 39bd1249722bb6d3d3b3315b3c35da7e844c595d..4e4fb70d26235fbcb601907bef7a83029dd23518 100644
--- a/composer.json
+++ b/composer.json
@@ -14,17 +14,11 @@
     "ext-json": "*",
     "drupal/core": "^9.2",
     "php-tuf/composer-stager": "0.3.0",
-    "composer/composer": "^2"
+    "composer/composer": "^2.2.12 || ^2.3.5"
   },
   "config": {
     "platform": {
       "php": "7.3.0"
     }
-  },
-  "repositories": [
-    {
-      "type": "vcs",
-      "url": "https://github.com/php-tuf/composer-stager"
-    }
-  ]
+  }
 }
diff --git a/drupalci.yml b/drupalci.yml
index 8fac0e8b1e16cdcfb12c81724e3d5ef746c30749..83aee2d764c2d702456effb5101a13e6cff269e0 100644
--- a/drupalci.yml
+++ b/drupalci.yml
@@ -43,7 +43,7 @@ build:
           # to work correctly, and disabling it is a known workaround.
           # @see pcre.ini
           - sudo cp modules/contrib/automatic_updates/pcre.ini /usr/local/etc/php/conf.d
-          - composer self-update 2.2.4
+          - composer self-update 2.3.5
         halt-on-fail: true
       # run_tests task is executed several times in order of performance speeds.
       # halt-on-fail can be set on the run_tests tasks in order to fail fast.
diff --git a/package_manager/src/Validator/ComposerExecutableValidator.php b/package_manager/src/Validator/ComposerExecutableValidator.php
index 06c7104e222d7f068e4571e86a6ceaff47a79d9b..410c747b46522257cd2e87dcea7e9093d8f6390c 100644
--- a/package_manager/src/Validator/ComposerExecutableValidator.php
+++ b/package_manager/src/Validator/ComposerExecutableValidator.php
@@ -25,7 +25,7 @@ class ComposerExecutableValidator implements PreOperationStageValidatorInterface
    *
    * @var string
    */
-  public const MINIMUM_COMPOSER_VERSION = '2.2.4';
+  public const MINIMUM_COMPOSER_VERSION = '2.3.5';
 
   /**
    * The Composer runner.