diff --git a/composer.lock b/composer.lock
index facce1f3b4afd96b99e8e6e6e4eb652001adeef8..8b8cea746dcde852d58b119d4670c71bb8f12857 100644
--- a/composer.lock
+++ b/composer.lock
@@ -496,7 +496,7 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "7369e7a4e89825b0e5c1c8c3a4beaa3a18e5f3ef"
+                "reference": "60fa149dea68d06e2de45c93bf07d1d94b5394e7"
             },
             "require": {
                 "asm89/stack-cors": "^2.1",
@@ -541,7 +541,7 @@
                 "symfony/serializer": "^6.4",
                 "symfony/validator": "^6.4",
                 "symfony/yaml": "^6.4",
-                "twig/twig": "^3.15.0"
+                "twig/twig": "^3.14.2"
             },
             "conflict": {
                 "drush/drush": "<12.4.3"
@@ -4347,16 +4347,16 @@
         },
         {
             "name": "twig/twig",
-            "version": "v3.15.0",
+            "version": "v3.14.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02"
+                "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02",
-                "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a",
+                "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a",
                 "shasum": ""
             },
             "require": {
@@ -4410,7 +4410,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.15.0"
+                "source": "https://github.com/twigphp/Twig/tree/v3.14.2"
             },
             "funding": [
                 {
@@ -4422,7 +4422,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-11-17T15:59:19+00:00"
+            "time": "2024-11-07T12:36:22+00:00"
         }
     ],
     "packages-dev": [
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 5deb8570d3eade83363036e99562289c53d2ff1c..06009f823ab2d5193d118c072e76c8210ca70978 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -61,6 +61,6 @@
         "symfony/var-dumper": "~v6.4.15",
         "symfony/var-exporter": "~v6.4.13",
         "symfony/yaml": "~v6.4.13",
-        "twig/twig": "~v3.15.0"
+        "twig/twig": "~v3.14.2"
     }
 }
diff --git a/core/composer.json b/core/composer.json
index 52681368e31fb1a17093ad269fb6462897cd5a3b..d4ae3a935efd0494bc41e62db455ee33576af1bc 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -33,7 +33,7 @@
         "symfony/process": "^6.4",
         "symfony/polyfill-iconv": "^1.26",
         "symfony/yaml": "^6.4",
-        "twig/twig": "^3.15.0",
+        "twig/twig": "^3.14.2",
         "doctrine/annotations": "^1.14",
         "guzzlehttp/guzzle": "^7.5",
         "guzzlehttp/psr7": "^2.4.5",
diff --git a/core/lib/Drupal/Core/Template/ComponentNodeVisitor.php b/core/lib/Drupal/Core/Template/ComponentNodeVisitor.php
index 2d55d0c427599ac1ecfd57aed626f6b46e7324b9..6b67035a7a5ff4f7226a98687e64b93e3de8a844 100644
--- a/core/lib/Drupal/Core/Template/ComponentNodeVisitor.php
+++ b/core/lib/Drupal/Core/Template/ComponentNodeVisitor.php
@@ -9,7 +9,6 @@
 use Drupal\Core\Render\Component\Exception\InvalidComponentException;
 use Drupal\Core\Theme\ComponentPluginManager;
 use Twig\Environment;
-use Twig\Node\Nodes;
 use Twig\TwigFunction;
 use Twig\Node\Expression\ConstantExpression;
 use Twig\Node\Expression\FunctionExpression;
@@ -58,24 +57,24 @@ public function leaveNode(Node $node, Environment $env): ?Node {
     }
     $print_nodes[] = new PrintNode(new FunctionExpression(
       new TwigFunction('attach_library', [$env->getExtension(TwigExtension::class), 'attachLibrary']),
-      new Nodes([new ConstantExpression($component->getLibraryName(), $line)]),
+      new Node([new ConstantExpression($component->getLibraryName(), $line)]),
       $line
     ), $line);
     $print_nodes[] = new PrintNode(new FunctionExpression(
       new TwigFunction('add_component_context', [$env->getExtension(ComponentsTwigExtension::class), 'addAdditionalContext'], ['needs_context' => TRUE]),
-      new Nodes([new ConstantExpression($component_id, $line)]),
+      new Node([new ConstantExpression($component_id, $line)]),
       $line
     ), $line);
     $print_nodes[] = new PrintNode(new FunctionExpression(
       new TwigFunction('validate_component_props', [$env->getExtension(ComponentsTwigExtension::class), 'validateProps'], ['needs_context' => TRUE]),
-      new Nodes([new ConstantExpression($component_id, $line)]),
+      new Node([new ConstantExpression($component_id, $line)]),
       $line
     ), $line);
 
     // Append the print nodes to the display_start node.
     $node->setNode(
       'display_start',
-      new Nodes([
+      new Node([
         $node->getNode('display_start'),
         ...$print_nodes,
       ]),
@@ -85,7 +84,7 @@ public function leaveNode(Node $node, Environment $env): ?Node {
       // Append the closing comment to the display_end node.
       $node->setNode(
         'display_end',
-        new Nodes([
+        new Node([
           new PrintNode(new ConstantExpression(sprintf('<!-- %s Component end: %s -->', $emoji, $component_id), $line), $line),
           $node->getNode('display_end'),
         ])
diff --git a/core/lib/Drupal/Core/Template/TwigNodeTrans.php b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
index 801fd7ec48a16b946ccda4d0647bcb5d4e913efa..0ac6b93ed5a8fc788bb68d1e122a923adac929e4 100644
--- a/core/lib/Drupal/Core/Template/TwigNodeTrans.php
+++ b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
@@ -13,9 +13,7 @@
 use Twig\Node\Expression\GetAttrExpression;
 use Twig\Node\Expression\NameExpression;
 use Twig\Node\Expression\TempNameExpression;
-use Twig\Node\Expression\Variable\ContextVariable;
 use Twig\Node\Node;
-use Twig\Node\Nodes;
 use Twig\Node\PrintNode;
 
 /**
@@ -180,7 +178,7 @@ protected function compileString(Node $body) {
             if (!is_null($args)) {
               $argName = $args->getAttribute('name');
             }
-            $expr = new ContextVariable($argName, $n->getTemplateLine());
+            $expr = new NameExpression($argName, $n->getTemplateLine());
           }
           $placeholder = sprintf('%s%s', $argPrefix, $argName);
           $text .= $placeholder;
@@ -200,7 +198,7 @@ protected function compileString(Node $body) {
     }
 
     return [
-      new Nodes([new ConstantExpression(trim($text), $body->getTemplateLine())]),
+      new Node([new ConstantExpression(trim($text), $body->getTemplateLine())]),
       $tokens,
     ];
   }
diff --git a/core/lib/Drupal/Core/Template/TwigNodeVisitor.php b/core/lib/Drupal/Core/Template/TwigNodeVisitor.php
index 64ed90fa4803e08398fb24d1d205732bf3e56883..e4755fcdec2bde8650e15246ce8f757f03d6a835 100644
--- a/core/lib/Drupal/Core/Template/TwigNodeVisitor.php
+++ b/core/lib/Drupal/Core/Template/TwigNodeVisitor.php
@@ -3,7 +3,6 @@
 namespace Drupal\Core\Template;
 
 use Twig\Environment;
-use Twig\Node\Nodes;
 use Twig\TwigFunction;
 use Twig\Node\Expression\FilterExpression;
 use Twig\Node\Expression\FunctionExpression;
@@ -51,7 +50,7 @@ public function leaveNode(Node $node, Environment $env): ?Node {
       return new $class(
         new FunctionExpression(
           new TwigFunction('render_var', [$env->getExtension(TwigExtension::class), 'renderVar']),
-          new Nodes([$node->getNode('expr')]),
+          new Node([$node->getNode('expr')]),
           $line
         ),
         $line
diff --git a/core/lib/Drupal/Core/Template/TwigNodeVisitorCheckDeprecations.php b/core/lib/Drupal/Core/Template/TwigNodeVisitorCheckDeprecations.php
index 5f8e17572b4aa243e150043ed050dd12176f1b2c..1ee7efa5d8c3c3343766668894be87f7bcce3e01 100644
--- a/core/lib/Drupal/Core/Template/TwigNodeVisitorCheckDeprecations.php
+++ b/core/lib/Drupal/Core/Template/TwigNodeVisitorCheckDeprecations.php
@@ -7,7 +7,6 @@
 use Twig\Node\Expression\NameExpression;
 use Twig\Node\ModuleNode;
 use Twig\Node\Node;
-use Twig\Node\Nodes;
 use Twig\NodeVisitor\NodeVisitorInterface;
 
 /**
@@ -60,7 +59,7 @@ public function leaveNode(Node $node, Environment $env): ?Node {
     // At the end of the template, check the used variables are not deprecated.
     if ($node instanceof ModuleNode) {
       if (!empty($this->usedNames)) {
-        $checkNode = new Nodes([new TwigNodeCheckDeprecations($this->usedNames), $node->getNode('display_end')]);
+        $checkNode = new Node([new TwigNodeCheckDeprecations($this->usedNames), $node->getNode('display_end')]);
         $node->setNode('display_end', $checkNode);
       }
     }
diff --git a/core/modules/system/tests/modules/sdc_other_node_visitor/src/Twig/NodeVisitor/TestNodeVisitor.php b/core/modules/system/tests/modules/sdc_other_node_visitor/src/Twig/NodeVisitor/TestNodeVisitor.php
index 0224554073af2727b4542ba376566783e332a4b7..8e3305b83315e7bf724d7665c7ea9632d1b6c1cc 100644
--- a/core/modules/system/tests/modules/sdc_other_node_visitor/src/Twig/NodeVisitor/TestNodeVisitor.php
+++ b/core/modules/system/tests/modules/sdc_other_node_visitor/src/Twig/NodeVisitor/TestNodeVisitor.php
@@ -7,7 +7,6 @@
 use Twig\Environment;
 use Twig\Node\ModuleNode;
 use Twig\Node\Node;
-use Twig\Node\Nodes;
 use Twig\NodeVisitor\NodeVisitorInterface;
 
 /**
@@ -45,11 +44,11 @@ public function enterNode(Node $node, Environment $env): Node {
    */
   public function leaveNode(Node $node, Environment $env): ?Node {
     if ($node instanceof ModuleNode) {
-      $node->setNode('display_start', new Nodes([
+      $node->setNode('display_start', new Node([
         new EnterProfileNode($this->extensionName, $this->varName),
         $node->getNode('display_start'),
       ]));
-      $node->setNode('display_end', new Nodes([
+      $node->setNode('display_end', new Node([
         new LeaveProfileNode($this->varName),
         $node->getNode('display_end'),
       ]));