# Backported from https://github.com/NabuCasa/hass-nabucasa/pull/1083
diff -ur a/hass_nabucasa/acme.py b/hass_nabucasa/acme.py
--- a/hass_nabucasa/acme.py	2026-01-28 06:40:05.000000000 -0600
+++ b/hass_nabucasa/acme.py	2026-03-15 19:13:31.633233089 -0500
@@ -12,7 +12,6 @@
 import urllib
 
 from acme import challenges, client, crypto_util, errors, messages
-import async_timeout
 from atomicwrites import atomic_write
 import attr
 from cryptography import x509
@@ -503,7 +502,7 @@
                 # Update DNS
                 self._update_status(CertificateStatus.CHALLENGE_DNS_UPDATING)
                 try:
-                    async with async_timeout.timeout(30):
+                    async with asyncio.timeout(30):
                         await self.cloud.instance.create_dns_challenge_record(
                             value=challenge.validation
                         )
@@ -541,7 +540,7 @@
             # Cleanup DNS challenge records
             self._update_status(CertificateStatus.CHALLENGE_CLEANUP)
             try:
-                async with async_timeout.timeout(30):
+                async with asyncio.timeout(30):
                     # We only need to cleanup for the last entry
                     await self.cloud.instance.cleanup_dns_challenge_record(
                         value=dns_challenges[-1].validation,
diff -ur a/hass_nabucasa/auth/cognito.py b/hass_nabucasa/auth/cognito.py
--- a/hass_nabucasa/auth/cognito.py	2026-01-28 06:40:05.000000000 -0600
+++ b/hass_nabucasa/auth/cognito.py	2026-03-15 19:13:46.122932076 -0500
@@ -8,7 +8,6 @@
 import random
 from typing import TYPE_CHECKING, Any
 
-import async_timeout
 import boto3
 import botocore
 from botocore.exceptions import BotoCoreError, ClientError, EndpointConnectionError
@@ -217,7 +216,7 @@
                     partial(self._create_cognito_client, username=email),
                 )
 
-                async with async_timeout.timeout(30):
+                async with asyncio.timeout(30):
                     await self.cloud.run_executor(
                         partial(cognito.authenticate, password=password),
                     )
@@ -267,7 +266,7 @@
                     partial(self._create_cognito_client, username=email),
                 )
 
-                async with async_timeout.timeout(30):
+                async with asyncio.timeout(30):
                     await self.cloud.run_executor(
                         partial(
                             cognito.respond_to_software_token_mfa_challenge,
diff -ur a/hass_nabucasa/cloudhooks.py b/hass_nabucasa/cloudhooks.py
--- a/hass_nabucasa/cloudhooks.py	2026-01-28 06:40:05.000000000 -0600
+++ b/hass_nabucasa/cloudhooks.py	2026-03-15 19:13:17.353529565 -0500
@@ -4,8 +4,6 @@
 
 from typing import TYPE_CHECKING, Any, TypedDict
 
-import async_timeout
-
 from .api import ApiBase, CloudApiError, api_exception_handler
 
 if TYPE_CHECKING:
@@ -54,7 +52,7 @@
             raise ValueError("Cloud is not connected")
 
         # Create cloud hook
-        async with async_timeout.timeout(10):
+        async with asyncio.timeout(10):
             data = await self.generate()
 
         cloudhook_id = data["cloudhook_id"]
diff -ur a/hass_nabucasa/remote.py b/hass_nabucasa/remote.py
--- a/hass_nabucasa/remote.py	2026-01-28 06:40:05.000000000 -0600
+++ b/hass_nabucasa/remote.py	2026-03-15 19:14:13.662359486 -0500
@@ -11,7 +11,6 @@
 from typing import TYPE_CHECKING
 
 import aiohttp
-import async_timeout
 import attr
 from snitun.exceptions import SniTunConnectionError
 from snitun.utils.aes import generate_aes_keyset
@@ -221,7 +220,7 @@
     async def load_backend(self) -> bool:
         """Load backend details."""
         try:
-            async with async_timeout.timeout(30):
+            async with asyncio.timeout(30):
                 data = await self.cloud.instance.register()
         except (TimeoutError, InstanceApiError) as err:
             msg = "Can't update remote details from Home Assistant cloud"
@@ -396,7 +395,7 @@
         # Generate session token
         aes_key, aes_iv = generate_aes_keyset()
         try:
-            async with async_timeout.timeout(30):
+            async with asyncio.timeout(30):
                 data = await self.cloud.instance.snitun_token(
                     aes_key=aes_key, aes_iv=aes_iv
                 )
@@ -429,14 +428,14 @@
         forbidden = False
         try:
             _LOGGER.debug("Refresh snitun token")
-            async with async_timeout.timeout(30):
+            async with asyncio.timeout(30):
                 await self._refresh_snitun_token()
 
             # We can not get here without this being set, but mypy does not know that.
             assert self._token is not None
 
             _LOGGER.debug("Attempting connection to %s", self._snitun_server)
-            async with async_timeout.timeout(30):
+            async with asyncio.timeout(30):
                 await self._snitun.connect(
                     self._token.fernet,
                     self._token.aes_key,
diff -ur a/pyproject.toml b/pyproject.toml
--- a/pyproject.toml	2026-01-28 06:40:10.000000000 -0600
+++ b/pyproject.toml	2026-03-15 19:14:21.422198035 -0500
@@ -20,7 +20,6 @@
 dependencies = [
     "acme==5.2.2",
     "aiohttp>=3.6.1",
-    "async_timeout>=4",
     "atomicwrites-homeassistant==1.4.1",
     "attrs>=19.3",
     "ciso8601>=2.3.0",
