diff --git a/vendor/magento/module-bundle/Model/Inventory/ChangeParentStockStatus.php b/vendor/magento/module-bundle/Model/Inventory/ChangeParentStockStatus.php
new file mode 100644
index 000000000000..023893d7317e
--- /dev/null
+++ b/vendor/magento/module-bundle/Model/Inventory/ChangeParentStockStatus.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+declare(strict_types=1);
+
+namespace Magento\Bundle\Model\Inventory;
+
+use Magento\Bundle\Model\Product\Type;
+use Magento\CatalogInventory\Api\Data\StockItemInterface;
+use Magento\CatalogInventory\Api\StockConfigurationInterface;
+use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory;
+use Magento\CatalogInventory\Api\StockItemRepositoryInterface;
+
+/***
+ * Update stock status of bundle products based on children products stock status
+ */
+class ChangeParentStockStatus
+{
+    /**
+     * @var Type
+     */
+    private $bundleType;
+
+    /**
+     * @var StockItemCriteriaInterfaceFactory
+     */
+    private $criteriaInterfaceFactory;
+
+    /**
+     * @var StockItemRepositoryInterface
+     */
+    private $stockItemRepository;
+
+    /**
+     * @var StockConfigurationInterface
+     */
+    private $stockConfiguration;
+
+    /**
+     * @param StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory
+     * @param StockItemRepositoryInterface $stockItemRepository
+     * @param StockConfigurationInterface $stockConfiguration
+     * @param Type $bundleType
+     */
+    public function __construct(
+        StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory,
+        StockItemRepositoryInterface $stockItemRepository,
+        StockConfigurationInterface $stockConfiguration,
+        Type $bundleType
+    ) {
+        $this->bundleType = $bundleType;
+        $this->criteriaInterfaceFactory = $criteriaInterfaceFactory;
+        $this->stockItemRepository = $stockItemRepository;
+        $this->stockConfiguration = $stockConfiguration;
+    }
+
+    /**
+     * Update stock status of bundle products based on children products stock status
+     *
+     * @param array $childrenIds
+     * @return void
+     */
+    public function execute(array $childrenIds): void
+    {
+        $parentIds = $this->bundleType->getParentIdsByChild($childrenIds);
+        foreach (array_unique($parentIds) as $productId) {
+            $this->processStockForParent((int)$productId);
+        }
+    }
+
+    /**
+     * Update stock status of bundle product based on children products stock status
+     *
+     * @param int $productId
+     * @return void
+     */
+    private function processStockForParent(int $productId): void
+    {
+        $stockItems = $this->getStockItems([$productId]);
+        $parentStockItem = $stockItems[$productId] ?? null;
+        if ($parentStockItem) {
+            $childrenIsInStock = $this->isChildrenInStock($productId);
+            if ($this->isNeedToUpdateParent($parentStockItem, $childrenIsInStock)) {
+                $parentStockItem->setIsInStock($childrenIsInStock);
+                $parentStockItem->setStockStatusChangedAuto(1);
+                $this->stockItemRepository->save($parentStockItem);
+            }
+        }
+    }
+
+    /**
+     * Returns stock status of bundle product based on children stock status
+     *
+     * Returns TRUE if any of the following conditions is true:
+     * - At least one product is in-stock in each required option
+     * - Any product is in-stock (if all options are optional)
+     *
+     * @param int $productId
+     * @return bool
+     */
+    private function isChildrenInStock(int $productId) : bool
+    {
+        $childrenIsInStock = false;
+        $childrenIds = $this->bundleType->getChildrenIds($productId, true);
+        $stockItems = $this->getStockItems(array_merge(...array_values($childrenIds)));
+        foreach ($childrenIds as $childrenIdsPerOption) {
+            $childrenIsInStock = false;
+            foreach ($childrenIdsPerOption as $id) {
+                $stockItem = $stockItems[$id] ?? null;
+                if ($stockItem && $stockItem->getIsInStock()) {
+                    $childrenIsInStock = true;
+                    break;
+                }
+            }
+            if (!$childrenIsInStock) {
+                break;
+            }
+        }
+
+        return $childrenIsInStock;
+    }
+
+    /**
+     * Check if parent item should be updated
+     *
+     * @param StockItemInterface $parentStockItem
+     * @param bool $childrenIsInStock
+     * @return bool
+     */
+    private function isNeedToUpdateParent(
+        StockItemInterface $parentStockItem,
+        bool $childrenIsInStock
+    ): bool {
+        return $parentStockItem->getIsInStock() !== $childrenIsInStock &&
+            ($childrenIsInStock === false || $parentStockItem->getStockStatusChangedAuto());
+    }
+
+    /**
+     * Get stock items for provided product IDs
+     *
+     * @param array $productIds
+     * @return StockItemInterface[]
+     */
+    private function getStockItems(array $productIds): array
+    {
+        $criteria = $this->criteriaInterfaceFactory->create();
+        $criteria->setScopeFilter($this->stockConfiguration->getDefaultScopeId());
+        $criteria->setProductsFilter(array_unique($productIds));
+        $stockItemCollection = $this->stockItemRepository->getList($criteria);
+
+        $stockItems = [];
+        foreach ($stockItemCollection->getItems() as $stockItem) {
+            $stockItems[$stockItem->getProductId()] = $stockItem;
+        }
+
+        return $stockItems;
+    }
+}
diff --git a/vendor/magento/module-bundle/Model/Inventory/ParentItemProcessor.php b/vendor/magento/module-bundle/Model/Inventory/ParentItemProcessor.php
new file mode 100644
index 000000000000..5e013ced75c3
--- /dev/null
+++ b/vendor/magento/module-bundle/Model/Inventory/ParentItemProcessor.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+declare(strict_types=1);
+
+namespace Magento\Bundle\Model\Inventory;
+
+use Magento\Catalog\Api\Data\ProductInterface as Product;
+use Magento\CatalogInventory\Observer\ParentItemProcessorInterface;
+
+/**
+ * Bundle product stock item processor
+ */
+class ParentItemProcessor implements ParentItemProcessorInterface
+{
+    /**
+     * @var ChangeParentStockStatus
+     */
+    private $changeParentStockStatus;
+
+    /**
+     * @param ChangeParentStockStatus $changeParentStockStatus
+     */
+    public function __construct(
+        ChangeParentStockStatus $changeParentStockStatus
+    ) {
+        $this->changeParentStockStatus = $changeParentStockStatus;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function process(Product $product)
+    {
+        $this->changeParentStockStatus->execute([$product->getId()]);
+    }
+}
diff --git a/vendor/magento/module-bundle/etc/di.xml b/vendor/magento/module-bundle/etc/di.xml
index 17b6d228e88e..5224151f306c 100644
--- a/vendor/magento/module-bundle/etc/di.xml
+++ b/vendor/magento/module-bundle/etc/di.xml
@@ -271,4 +271,11 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\CatalogInventory\Observer\SaveInventoryDataObserver">
+        <arguments>
+            <argument name="parentItemProcessorPool" xsi:type="array">
+                <item name="bundle" xsi:type="object">Magento\Bundle\Model\Inventory\ParentItemProcessor</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/vendor/magento/module-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php b/vendor/magento/module-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php
new file mode 100644
index 000000000000..45013372a440
--- /dev/null
+++ b/vendor/magento/module-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+declare(strict_types=1);
+
+namespace Magento\BundleImportExport\Plugin\Import\Product;
+
+use Magento\CatalogImportExport\Model\StockItemImporterInterface;
+use Magento\Bundle\Model\Inventory\ChangeParentStockStatus;
+
+/**
+ * Update bundle products stock item status based on children products stock status after import
+ */
+class UpdateBundleProductsStockItemStatusPlugin
+{
+    /**
+     * @var ChangeParentStockStatus
+     */
+    private $changeParentStockStatus;
+
+    /**
+     * @param ChangeParentStockStatus $changeParentStockStatus
+     */
+    public function __construct(
+        ChangeParentStockStatus $changeParentStockStatus
+    ) {
+        $this->changeParentStockStatus = $changeParentStockStatus;
+    }
+
+    /**
+     * Update bundle products stock item status based on children products stock status after import
+     *
+     * @param StockItemImporterInterface $subject
+     * @param mixed $result
+     * @param array $stockData
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function afterImport(
+        StockItemImporterInterface $subject,
+        $result,
+        array $stockData
+    ): void {
+        if ($stockData) {
+            $this->changeParentStockStatus->execute(array_column($stockData, 'product_id'));
+        }
+    }
+}
diff --git a/vendor/magento/module-bundle-import-export/etc/di.xml b/vendor/magento/module-bundle-import-export/etc/di.xml
index 2bcbbedcc910..d697b52f628a 100644
--- a/vendor/magento/module-bundle-import-export/etc/di.xml
+++ b/vendor/magento/module-bundle-import-export/etc/di.xml
@@ -13,4 +13,9 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\CatalogImportExport\Model\StockItemImporterInterface">
+        <plugin name="update_bundle_products_stock_item_status"
+                type="Magento\BundleImportExport\Plugin\Import\Product\UpdateBundleProductsStockItemStatusPlugin"
+                sortOrder="200"/>
+    </type>
 </config>
