Le bug TCP de 49 jours sous macOS : comment vérifier le temps de fonctionnement et éviter le minuteur fatal réseau
Découvrez le bug du noyau XNU de macOS qui interrompt toutes les connexions réseau après 49,7 jours de fonctionnement. Apprenez à vérifier le temps de fonctionnement de votre Mac et à vous protéger.
Début 2026, un chercheur indépendant en sécurité connu sous le pseudonyme Photon a publié une analyse détaillée sur son blog (photon.codes) qui a secoué la communauté macOS : un bug tapi au cœur du noyau XNU d'Apple interrompt silencieusement toutes les nouvelles connexions TCP sur tout Mac fonctionnant sans redémarrage depuis exactement 49,7 jours. Aucune boîte de dialogue d'avertissement. Aucun message d'erreur. Votre Mac cesse simplement de se connecter à Internet, aux partages réseau locaux, à tout ce qui repose sur TCP — et le seul remède est un redémarrage complet. La découverte a ensuite été relayée par Tom's Hardware, analysée en profondeur par TidBITS, et débattue sur Reddit, les forums MacRumors et Hacker News, générant des milliers de commentaires et une vive inquiétude. Cet article propose un guide complet pour comprendre le bug, déterminer si vous en êtes affecté, vous protéger immédiatement, et savoir ce qu'Apple entreprend à ce sujet.
Points clés
- Un bug critique de débordement d'entier dans le noyau XNU de macOS provoque l'échec silencieux de toutes les nouvelles connexions TCP après environ 49,7 jours (49 jours, 17 heures, 2 minutes et 47 secondes) de fonctionnement continu.
- Ce bug ne peut pas être résolu en basculant le Wi-Fi, en réinitialisant les paramètres réseau ou en redémarrant des applications individuelles — seul un redémarrage complet du système restaure la connectivité réseau.
- Les utilisateurs les plus exposés sont ceux qui utilisent des Mac mini comme serveurs, des machines de développement toujours allumées, des serveurs multimédias, des hubs domotiques, et tout Mac rarement redémarré.
- Apple devrait publier un correctif dans macOS 26.5, actuellement en bêta 2, mais aucun patch n'existe dans les versions de production actuelles.
- Vous pouvez vous protéger immédiatement en vérifiant votre temps de fonctionnement avec une simple commande Terminal et en planifiant des redémarrages périodiques avant le seuil de 49 jours.
Qu'est-ce que le bug TCP de 49 jours ?
Le bug TCP de 49 jours est un défaut logiciel dans le noyau XNU d'Apple — le noyau central du système d'exploitation qui sous-tend macOS, iOS, iPadOS et toutes les autres plateformes Apple. Le bug a été découvert par Photon grâce à une analyse minutieuse du code source XNU (qu'Apple publie en open source), qui a retracé un mystérieux schéma de pannes réseau sur des Mac fonctionnant depuis longtemps jusqu'à une opération de comparaison spécifique dans la pile TCP du noyau.
À sa base, le bug est un débordement d'entier. Le noyau XNU maintient un minuteur interne qui suit le temps de fonctionnement du système en millisecondes à l'aide d'un entier non signé 32 bits (uint32_t). Un entier non signé 32 bits peut contenir une valeur maximale de 4 294 967 295. Lorsque vous convertissez ce nombre de millisecondes en jours, vous obtenez environ 49,71 jours :
4,294,967,295 milliseconds
= 4,294,967.295 seconds
= 71,582.788 minutes
= 1,193.046 hours
= 49.71 days
Passé ce seuil, la valeur du minuteur repasse de sa valeur maximale à zéro. Ce phénomène n'est pas inhabituel en informatique — le débordement de minuteur est bien connu, et un code robuste est écrit pour le gérer. Cependant, la pile TCP dans XNU contient une opération de comparaison qui ne gère pas correctement ce débordement. Quand le minuteur déborde, la comparaison produit des résultats incorrects, amenant le noyau à croire que les paramètres de temporisation de chaque nouvelle connexion TCP sont invalides. Le noyau abandonne alors silencieusement toutes les nouvelles tentatives de connexion TCP.
De manière cruciale, les connexions TCP existantes établies avant le débordement peuvent continuer à fonctionner un certain temps (puisque leur handshake est déjà terminé), mais toute nouvelle connexion — ouvrir une nouvelle page web, démarrer une nouvelle session SSH, se connecter à une API, consulter ses e-mails — échouera. Dans un court laps de temps après le débordement, même les connexions existantes expirent et échouent, laissant le Mac totalement incapable de communiquer via TCP.
Le bug affecte spécifiquement la couche du protocole TCP. D'autres protocoles réseau qui ne dépendent pas de TCP (comme le ping ICMP basique) peuvent continuer à fonctionner, ce qui peut rendre le problème particulièrement déroutant à diagnostiquer : votre Mac semble être « connecté » au réseau, il peut même répondre aux pings, mais aucune communication réseau au niveau applicatif ne fonctionne.

Comment cela affecte-t-il votre Mac ?
L'impact concret du bug TCP de 49 jours dépend entièrement d'un facteur : combien de temps votre Mac fonctionne entre deux redémarrages. Si vous redémarrez ou éteignez votre Mac au moins une fois tous les 49 jours, vous ne rencontrerez jamais ce bug. Le minuteur se remet à zéro à chaque démarrage.
Comme l'a noté TidBITS dans son analyse, la plupart des utilisateurs ordinaires de Mac ont peu de chances d'être affectés. Les mises à jour logicielles d'Apple nécessitent généralement un redémarrage, et beaucoup d'utilisateurs éteignent ou redémarrent leur Mac au moins une fois par semaine. Pour ces utilisateurs, le bug est essentiellement invisible.
Cependant, certaines catégories d'utilisateurs de Mac sont exposées à un risque opérationnel sérieux :
Serveurs Mac Mini et Mac sans écran
Le Mac mini est de plus en plus populaire en tant que serveur compact et économe en énergie. Les utilisateurs déploient des Mac mini comme serveurs web, serveurs de build CI/CD, serveurs multimédias (sous Plex ou Jellyfin), contrôleurs domotiques et machines de développement à distance. Ces machines sont spécifiquement conçues pour fonctionner en continu sans redémarrage. Un serveur Mac mini installé en janvier et laissé en fonctionnement atteindra le cap des 49 jours fin février — et perdra toute connectivité réseau sans avertissement.
Machines de développement toujours allumées
De nombreux développeurs laissent leur Mac fonctionner en continu, souvent avec des dizaines de sessions terminal, de serveurs de développement, de connexions à des bases de données et de fenêtres d'IDE ouvertes. Redémarrer signifie reconstruire tout cet environnement, ce qui peut prendre un temps considérable. Ces utilisateurs accumulent souvent des durées de fonctionnement bien supérieures à 49 jours.
Professionnels créatifs avec de longs travaux de rendu
Les monteurs vidéo, les artistes 3D et les producteurs de musique lancent parfois des rendus ou des traitements qui s'étendent sur plusieurs jours ou semaines. Ils évitent de redémarrer pendant ces travaux, et si le projet commence sur une machine ayant déjà un temps de fonctionnement important, le seuil de 49 jours pourrait être franchi en plein rendu.
Déploiements en entreprise et dans l'éducation
Les organisations qui déploient des Mac en mode kiosque, en signalétique numérique, dans des environnements de laboratoire ou sur des postes partagés peuvent configurer ces machines pour fonctionner indéfiniment. Les administrateurs informatiques qui gèrent des parcs de Mac doivent être particulièrement vigilants face à ce bug.
Mac hubs domotiques et IoT
Les utilisateurs qui font tourner des serveurs HomeKit, Home Assistant ou d'autres plateformes domotiques sur des Mac toujours allumés sont exposés. Une panne réseau sur la machine hub peut paralyser toute l'infrastructure maison intelligente.
Comment savoir si vous êtes actuellement exposé
Le test le plus simple consiste à vérifier le temps de fonctionnement de votre Mac. Si ce temps approche ou dépasse 49 jours, planifiez un redémarrage. La section suivante explique exactement comment procéder.
Comment vérifier le temps de fonctionnement de votre Mac
Plusieurs méthodes permettent de savoir depuis combien de temps votre Mac tourne depuis son dernier redémarrage. Chacune fournit des informations légèrement différentes, et toutes sont fiables.
Méthode 1 : la commande uptime dans Terminal
Ouvrez Terminal (Applications > Utilitaires > Terminal, ou via Spotlight avec Cmd+Espace et tapez « Terminal ») et saisissez :
uptime
Cela renvoie une sortie similaire à :
10:32 up 43 days, 7:14, 2 users, load averages: 1.82 2.01 1.97
Dans cet exemple, le Mac fonctionne depuis 43 jours et environ 7 heures. Cette machine approche de la zone de danger et devrait être redémarrée dans les prochains jours.
Pour un guide plus complet sur l'utilisation efficace des commandes Terminal, consultez notre guide de maîtrise du Terminal.
Méthode 2 : la commande system_profiler
Pour des informations plus détaillées sur le temps de démarrage, utilisez :
system_profiler SPSoftwareDataType
Cela renvoie une sortie comprenant :
Software:
System Software Overview:
System Version: macOS 26.4 (26E252)
Kernel Version: Darwin 25.5.0
Boot Volume: Macintosh HD
...
Time since boot: 43 days, 7:14
La ligne « Time since boot » vous indique exactement depuis combien de temps votre système tourne.
Méthode 3 : temps de démarrage précis avec sysctl
Pour l'information la plus précise sur la date du dernier démarrage de votre Mac, utilisez :
sysctl kern.boottime
Cela affiche :
kern.boottime: { sec = 1709812345, usec = 0 } Mon Mar 7 14:32:25 2026
Cela vous indique la date et l'heure exactes du dernier démarrage, vous permettant de calculer précisément quand le seuil de 49 jours sera atteint.
Méthode 4 : un script de calcul rapide
Vous pouvez créer un script simple qui vous indique exactement quand le cap des 49 jours sera franchi :
#!/bin/bash
boot_time=$(sysctl -n kern.boottime | awk '{print $4}' | tr -d ',')
danger_time=$((boot_time + 4294967))
current_time=$(date +%s)
remaining=$((danger_time - current_time))
if [ $remaining -le 0 ]; then
echo "WARNING: Your Mac has EXCEEDED the 49-day threshold!"
echo "You should restart immediately."
else
days=$((remaining / 86400))
hours=$(((remaining % 86400) / 3600))
echo "Days until 49-day TCP bug: ${days} days, ${hours} hours"
echo "Danger date: $(date -r $danger_time)"
fi
Enregistrez ce fichier sous check_tcp_bug.sh, rendez-le exécutable avec chmod +x check_tcp_bug.sh, puis lancez-le avec ./check_tcp_bug.sh.
Méthode 5 : le Moniteur d'activité
Si vous préférez une approche graphique, vous pouvez utiliser le Moniteur d'activité :
- Ouvrez le Moniteur d'activité (Applications > Utilitaires > Moniteur d'activité, ou recherchez-le dans Spotlight)
- Cliquez sur l'onglet « CPU »
- Cherchez « Durée de fonctionnement du système » en bas de la fenêtre (dans certaines versions, il peut être nécessaire d'utiliser le menu « Fenêtre » pour afficher les informations système)
Pour un guide complet du Moniteur d'activité et de toutes ses fonctionnalités, consultez notre guide du Moniteur d'activité.
Comment corriger et prévenir le bug
Aucun correctif logiciel n'étant disponible dans les versions de production actuelles de macOS, le seul remède au bug TCP de 49 jours est de redémarrer votre Mac avant d'atteindre le seuil. Plusieurs approches existent, du simple redémarrage manuel aux solutions entièrement automatisées.
Remède immédiat : redémarrer votre Mac
Si votre Mac connaît actuellement des pannes réseau et fonctionne depuis 49 jours ou plus, redémarrez-le immédiatement :
- Depuis le menu Apple : cliquez sur le logo Apple en haut à gauche et sélectionnez « Redémarrer… »
- Depuis Terminal : exécutez
sudo shutdown -r now - Redémarrage forcé (si le Mac ne répond plus) : maintenez le bouton d'alimentation enfoncé pendant 10 secondes, puis appuyez à nouveau pour démarrer
Après le redémarrage, toute la connectivité réseau est immédiatement restaurée. Le compteur de temps de fonctionnement repart de zéro, vous accordant 49 jours supplémentaires avant que le bug ne puisse se reproduire.
Stratégie de prévention 1 : planifier un redémarrage mensuel
La stratégie de prévention la plus simple est de redémarrer votre Mac selon un calendrier fixe — une fois par mois est largement suffisant. Créez un rappel dans votre agenda pour le premier jour de chaque mois (ou le jour de votre choix) pour redémarrer votre Mac. Un redémarrage mensuel maintient le temps de fonctionnement bien en deçà du seuil de danger de 49 jours et garantit également que les mises à jour système et le nettoyage de la mémoire s'effectuent régulièrement.
Stratégie de prévention 2 : redémarrage automatisé avec pmset
macOS inclut un outil de gestion de l'alimentation intégré appelé pmset qui permet de planifier des redémarrages automatiques. C'est l'approche automatisée la plus simple :
# Schedule a restart every Sunday at 3:00 AM
sudo pmset repeat restart MTWRFSU 03:00:00
Pour planifier un redémarrage un jour précis chaque semaine :
# Restart every Sunday at 4:00 AM
sudo pmset repeat restart U 04:00:00
Pour vérifier votre redémarrage planifié :
pmset -g sched
Pour supprimer un redémarrage planifié :
sudo pmset repeat cancel
L'approche pmset est idéale car elle utilise le système de gestion de l'alimentation intégré de macOS et fonctionne même si aucun utilisateur n'est connecté, ce qui la rend parfaite pour les serveurs sans écran et les Mac toujours allumés.
Stratégie de prévention 3 : redémarrage automatisé avec launchd
Pour un contrôle plus sophistiqué, vous pouvez créer un plist launchd qui déclenche un redémarrage selon un calendrier précis. Cette approche offre plus de flexibilité que pmset :
Créez un fichier à /Library/LaunchDaemons/com.local.scheduled-restart.plist :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.scheduled-restart</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/shutdown</string>
<string>-r</string>
<string>now</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key>
<integer>7</integer>
<key>Hour</key>
<integer>4</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>
Chargez-le avec :
sudo launchctl load /Library/LaunchDaemons/com.local.scheduled-restart.plist
Cela redémarrera votre Mac tous les dimanches à 4h00 du matin. Vous pouvez ajuster les valeurs de Weekday, Hour et Minute selon vos besoins. Les valeurs de Weekday sont : 1 (lundi) à 7 (dimanche).
Stratégie de prévention 4 : script de surveillance du temps de fonctionnement
Pour les utilisateurs qui préfèrent recevoir une alerte avant le seuil plutôt qu'un redémarrage automatique, vous pouvez configurer un script de surveillance qui vous avertit quand le temps de fonctionnement approche des 40 jours :
#!/bin/bash
# Save as /usr/local/bin/uptime_monitor.sh
THRESHOLD_DAYS=40
UPTIME_SECONDS=$(( $(date +%s) - $(sysctl -n kern.boottime | awk '{print $4}' | tr -d ',') ))
UPTIME_DAYS=$(( UPTIME_SECONDS / 86400 ))
if [ $UPTIME_DAYS -ge $THRESHOLD_DAYS ]; then
osascript -e "display notification \"Your Mac has been running for ${UPTIME_DAYS} days. Please restart soon to avoid the TCP bug.\" with title \"Uptime Warning\" subtitle \"49-Day TCP Bug Prevention\""
fi
Combinez ce script avec un plist launchd qui l'exécute quotidiennement, et vous recevrez une notification macOS quand il sera temps de redémarrer.
Stratégie de prévention 5 : utiliser la commande shutdown directement
Pour un redémarrage ponctuel rapide, vous pouvez utiliser la commande shutdown :
# Restart in 30 minutes
sudo shutdown -r +30
# Restart at a specific time today
sudo shutdown -r 23:00
# Cancel a pending restart
sudo shutdown -c
Ceci est utile pour planifier un redémarrage plus tard dans la journée, quand vous savez que vous n'utiliserez pas activement votre Mac.
Si votre Mac présente des problèmes réseau plus larges au-delà de ce bug spécifique, notre guide de dépannage Wi-Fi macOS Tahoe couvre d'autres diagnostics et correctifs.
Un correctif est-il en préparation ?
Oui. Apple a reconnu le problème, et un correctif devrait être inclus dans macOS 26.5. Au moment de la rédaction de cet article, macOS 26.5 est en deuxième bêta (bêta 2), disponible pour les développeurs et les bêta-testeurs publics via le programme bêta d'Apple.
État actuel
- macOS 26.4 et versions antérieures : le bug est présent dans toutes les versions de production. Il n'existe aucun contournement hormis redémarrer avant 49 jours.
- macOS 26.5 bêta 1 : la bêta initiale n'incluait pas le correctif.
- macOS 26.5 bêta 2 : les rapports des bêta-testeurs indiquent qu'Apple a résolu le débordement d'entier sous-jacent dans la pile TCP. Cependant, comme le bug nécessite 49 jours de fonctionnement pour se manifester, il est difficile de vérifier rapidement le correctif par les tests bêta habituels.
- Publication prévue : selon le cycle bêta habituel d'Apple, macOS 26.5 devrait être disponible en fin de printemps ou début d'été 2026.
Pourquoi Apple n'a-t-il pas publié de correctif plus tôt ?
Plusieurs facteurs ont probablement contribué au délai :
Moment de la découverte : le bug a été divulgué publiquement début 2026. Bien qu'il ait pu être signalé à Apple via des canaux de divulgation responsable avant la publication du blog de Photon, le calendrier pour développer, tester et livrer des correctifs au niveau du noyau se mesure en mois, pas en jours.
Complexité au niveau du noyau : le noyau XNU est le fondement de chaque plateforme Apple. Un correctif dans la pile TCP doit être soigneusement testé pour s'assurer qu'il n'introduit pas de régressions pouvant affecter des millions d'appareils. Les correctifs de débordement d'entier dans les comparaisons de minuteurs peuvent avoir des interactions subtiles avec d'autres sous-systèmes du noyau.
Difficulté de test : comme le bug nécessite près de 50 jours de fonctionnement continu pour être reproduit, tester le correctif est intrinsèquement lent. Apple doit probablement utiliser des techniques de manipulation du temps dans son environnement de test pour vérifier le correctif, puis confirmer qu'il ne perturbe pas les opérations TCP normales.
Le contournement est simple : du point de vue de l'évaluation des risques d'Apple, le contournement (un redémarrage de routine) est simple et non destructif. Cela réduit l'urgence par rapport à, par exemple, une vulnérabilité d'exécution de code à distance.
Pour en savoir plus sur la mise à jour de macOS et les problèmes connus, consultez notre guide de dépannage macOS Tahoe.
Analyse technique approfondie : débordement d'entier dans le noyau XNU
Cette section s'adresse aux développeurs, aux administrateurs système et à toute personne souhaitant comprendre techniquement comment et pourquoi ce bug se produit au niveau du code.
La mécanique du débordement
Le noyau XNU utilise un compteur de ticks pour suivre le temps de fonctionnement du système. Ce compteur est stocké dans une variable de type uint32_t — un entier non signé 32 bits pouvant contenir des valeurs de 0 à 4 294 967 295.
Le noyau incrémente ce compteur à intervalles de millisecondes. La pile TCP utilise ce compteur pour diverses opérations de temporisation, notamment :
- Minuteurs de retransmission : combien de temps attendre avant de renvoyer un paquet non acquitté
- Calculs de délai d'expiration de connexion : quand considérer qu'une tentative de connexion a échoué
- Temporisation keep-alive : quand envoyer des sondes keep-alive périodiques sur les connexions inactives
- Comparaisons d'horodatage : validation des options d'horodatage TCP dans les en-têtes de paquets
La faille critique se trouve dans une opération de comparaison. En pseudocode simplifié, la logique problématique ressemble à ceci :
// Simplified representation of the buggy comparison
uint32_t current_time = get_system_uptime_ms();
uint32_t connection_timestamp = tcp_header->timestamp;
// This comparison fails when current_time has wrapped around
if (current_time - connection_timestamp > MAX_ALLOWED_DELTA) {
// Drop the connection as "too old" or "invalid"
drop_packet();
}
Quand le système fonctionne depuis moins de 49,7 jours, current_time est une valeur en augmentation simple, et la comparaison fonctionne correctement. Mais quand current_time déborde au-delà de 4 294 967 295 et revient à une petite valeur (disons 1 000), la soustraction current_time - connection_timestamp produit un résultat étonnamment grand en raison du sous-dépassement des entiers non signés, amenant le noyau à interpréter les données de temporisation de chaque nouvelle connexion comme invalides.
Pourquoi n'a-t-on pas détecté ce bug ?
Ce type de bug est notoirement difficile à détecter pour plusieurs raisons :
1. Reproduction dépendante du temps : le bug n'apparaît qu'après 49,7 jours. La plupart des tests automatisés, y compris les pipelines CI/CD d'Apple, n'exécutent pas de cycles de test individuels sur cette durée. Les tests unitaires de la pile TCP vérifient probablement la correction à diverses valeurs temporelles, mais peuvent ne pas tester spécifiquement la transition au-delà de la limite de débordement.
2. Le code semble correct au premier abord : l'opération de comparaison est syntaxiquement valide et fonctionne correctement pendant les 49 premiers jours. Un relecteur de code devrait spécifiquement envisager le cas de débordement pour repérer le bug. Dans une base de code aussi vaste que XNU (des millions de lignes de code), ce type de problème subtil peut facilement passer au travers des révisions.
3. Les Mac modernes redémarrent fréquemment : les mises à jour de macOS nécessitent généralement des redémarrages, et la plupart des Mac grand public sont redémarrés assez régulièrement pour que le bug ne se manifeste jamais. C'est la population croissante de serveurs Mac toujours allumés (notamment les Mac mini) qui a créé suffisamment d'exposition pour que le schéma soit remarqué.
4. Symptômes trompeurs : quand le bug se déclenche, il ressemble à un problème d'infrastructure réseau, pas à un bug du système d'exploitation. Les utilisateurs (même les administrateurs expérimentés) enquêtent typiquement sur leurs routeurs, serveurs DNS, connexions FAI et commutateurs réseau avant de soupçonner le noyau du Mac. De nombreux utilisateurs touchés par ce bug l'ont probablement « résolu » en redémarrant leur Mac sans jamais réaliser que c'était le redémarrage lui-même qui était le remède, attribuant le problème à une autre cause.
Le correctif approprié
La correction standard d'une comparaison avec débordement de minuteur en C est bien établie. Au lieu de comparer des valeurs de minuteur brutes, la comparaison doit être effectuée en utilisant de l'arithmétique signée qui gère correctement le débordement :
// Correct wraparound-safe comparison
// Cast the difference to a signed type
int32_t time_delta = (int32_t)(current_time - connection_timestamp);
if (time_delta > MAX_ALLOWED_DELTA || time_delta < 0) {
drop_packet();
}
Le noyau pourrait également utiliser un minuteur 64 bits (uint64_t), qui ne déborderait pas pendant environ 584 millions d'années, éliminant effectivement toute préoccupation de débordement. Cependant, changer la largeur du minuteur a des implications plus larges dans tout le noyau et nécessiterait des modifications et des tests plus étendus.

Qu'en est-il des autres plateformes Apple ?
Puisque XNU est le noyau partagé de toutes les plateformes Apple (macOS, iOS, iPadOS, watchOS, tvOS, visionOS), la question se pose naturellement : les iPhone et iPad sont-ils également affectés ?
En théorie, le même code vulnérable existe sur toutes les plateformes Apple. En pratique, les appareils iOS et iPadOS redémarrent bien plus fréquemment que les Mac — les mises à jour système, l'épuisement de la batterie et les schémas d'utilisation normaux font qu'un iPhone n'atteint presque jamais 49 jours de fonctionnement continu. Les appareils Apple Watch et Apple TV ont également tendance à redémarrer régulièrement. Cependant, si un iPad était maintenu en fonctionnement continu pendant 50 jours sans redémarrage, il serait théoriquement affecté par le même bug.
Contexte historique : ce n'est pas la première fois
Le bug TCP de 49 jours de macOS a un précédent historique saisissant que les vétérans de l'informatique reconnaîtront immédiatement : l'infâme bug de 49 jours de Windows des années 1990.
Le bug Windows de 49,7 jours
Microsoft Windows 95, Windows 98 et Windows ME contenaient tous un bug presque identique. La fonction du noyau Windows GetTickCount() retournait un DWORD (entier non signé 32 bits) représentant le nombre de millisecondes depuis le démarrage du système. Après 49,7 jours, cette valeur débordait et repassait à zéro.
Les conséquences sous Windows étaient sans doute plus graves que le bug macOS actuel. Sous Windows 95, le débordement pouvait provoquer :
- Des blocages et crashs système (écran bleu de la mort)
- Des plantages d'applications et de la corruption de données
- Une instabilité système complète nécessitant un redémarrage
Le bug Windows était bien connu et largement documenté tout au long de la fin des années 1990. Il est devenu un exemple standard dans les manuels de programmation expliquant pourquoi le débordement d'entier doit être soigneusement géré. Microsoft a finalement introduit GetTickCount64() dans Windows Vista (2007), qui utilise un compteur 64 bits et ne déborde pas pendant environ 584 millions d'années.
L'ironie
L'ironie qu'Apple ait maintenant livré essentiellement la même classe de bug — un débordement de minuteur millisecondes 32 bits — près de 30 ans après que cela était un problème bien documenté sous Windows n'a pas échappé à la communauté des développeurs. Les discussions Hacker News autour du bug macOS font fréquemment référence au précédent Windows, de nombreux commentateurs exprimant leur surprise qu'une classe d'erreur aussi bien connue puisse se retrouver dans un noyau de système d'exploitation moderne.
Cependant, il convient de noter que le noyau XNU est une base de code immense et complexe avec des décennies de code accumulé. L'opération de comparaison spécifique contenant le bug a peut-être été écrite il y a longtemps (peut-être à l'époque NeXTSTEP ou aux débuts d'OS X) et simplement jamais exercée dans des conditions qui révéleraient le défaut jusqu'à la tendance récente à faire fonctionner des Mac comme serveurs toujours allumés.
Autres bugs notables de débordement de minuteur dans l'histoire de l'informatique
Le débordement de 49 jours s'inscrit dans un schéma plus large de bugs liés aux minuteurs tout au long de l'histoire de l'informatique :
- Boeing 787 Dreamliner (2015) : la FAA a publié une directive de navigabilité exigeant que les avions Boeing 787 soient remis sous tension tous les 248 jours pour éviter un débordement de minuteur 32 bits dans les unités de contrôle des générateurs pouvant causer une perte totale d'alimentation électrique.
- Bug de l'année bissextile PlayStation 3 (2010) : un calcul erroné dans l'horloge interne de la PS3 a amené le système à croire que la date était le 29 février 2010 (qui n'existe pas), bloquant les consoles du monde entier pendant 24 heures.
- Mars Pathfinder (1997) : bien qu'il ne s'agisse pas strictement d'un débordement de minuteur, le bug d'inversion de priorité du Pathfinder a été découvert sur le terrain après que le rover fonctionnait déjà sur Mars, démontrant comment des bugs dépendant du temps peuvent échapper aux tests préalables au déploiement.
- Y2K (2000) : le bug de calcul de date/heure le plus célèbre de l'histoire informatique, où les représentations d'années à deux chiffres menaçaient de provoquer des défaillances généralisées au passage du siècle.
Ces exemples illustrent un thème récurrent : les bugs liés au temps sont parmi les plus insidieux en informatique car ils échappent aux tests qui ne tiennent pas compte spécifiquement des durées extrêmes ou des conditions limites.
Dépannage : signes que votre Mac a été touché par le bug
Si vous suspectez que votre Mac a été touché par le bug TCP de 49 jours, voici les symptômes spécifiques à rechercher et comment distinguer ce bug d'autres problèmes réseau.
Symptômes principaux
1. Toutes les nouvelles connexions TCP échouent simultanément
C'est le symptôme caractéristique. Ce n'est pas une application ou un site web — c'est tout ce qui utilise TCP :
- Les navigateurs web ne peuvent charger aucune page (Safari, Chrome, Firefox — tous en échec)
- Les clients de messagerie ne peuvent pas se connecter aux serveurs de messagerie
- Les connexions SSH expirent
- iMessage et FaceTime cessent de fonctionner
- La synchronisation iCloud s'arrête
- L'App Store ne peut pas se connecter
- Le partage de fichiers et AirDrop peuvent échouer
- Homebrew, npm, pip et autres gestionnaires de paquets ne peuvent rien télécharger
2. Wi-Fi ou Ethernet semble connecté
La barre de menus de votre Mac affiche toujours un signal Wi-Fi connecté ou une connexion Ethernet. L'interface réseau fonctionne aux couches 1 et 2 (physique et liaison de données) — seule la couche 4 (transport/TCP) est défaillante.
3. Le ping peut encore fonctionner
Comme le ping ICMP n'utilise pas TCP, vous pouvez réussir à pinger des hôtes externes :
ping google.com
Si le ping fonctionne mais que les navigateurs web et les applications ne fonctionnent pas, c'est un fort indicateur du bug TCP plutôt qu'un problème réseau général ou DNS.
4. La résolution DNS peut encore fonctionner
Les requêtes DNS utilisant UDP (par défaut pour la plupart des résolutions DNS) peuvent continuer à fonctionner :
nslookup google.com
Si le DNS résout mais que les connexions TCP échouent, le bug TCP est le coupable probable.
5. Le temps de fonctionnement est à 49 jours ou plus
Vérifiez votre temps de fonctionnement comme décrit dans la section précédente. Si votre temps de fonctionnement est à 49 jours ou plus et que vous présentez les symptômes ci-dessus, le bug est presque certainement la cause.
Comment distinguer des autres problèmes réseau
Le bug TCP de 49 jours peut être confondu avec plusieurs autres problèmes réseau courants. Voici comment les différencier :
| Symptôme | Bug TCP | Problème Wi-Fi | Problème DNS | Blocage pare-feu | Panne FAI |
|---|---|---|---|---|---|
| Toutes les connexions TCP échouent | Oui | Possible | Non | Possible | Possible |
| Le ping fonctionne | Oui | Non | Oui | Possible | Non |
| Le DNS résout | Oui | Non | Non | Oui | Possible |
| Wi-Fi affiche connecté | Oui | Non | Oui | Oui | Oui |
| Temps de fonct. > 49 jours | Oui | Sans rapport | Sans rapport | Sans rapport | Sans rapport |
| Autres appareils affectés | Non | Peut-être | Peut-être | Non | Oui |
| Le redémarrage corrige | Oui | Peut-être | Non | Non | Non |
Le test le plus concluant est la combinaison : temps de fonctionnement supérieur à 49 jours + toutes les connexions TCP en échec + ping fonctionnel + redémarrage qui corrige le problème. Si les quatre conditions sont réunies, vous avez rencontré le bug.
Pour le dépannage spécifique au Wi-Fi pouvant aider à écarter d'autres causes, consultez notre guide de dépannage Wi-Fi macOS Tahoe.
Commandes de diagnostic réseau
Exécutez ces commandes dans Terminal pour recueillir des informations de diagnostic :
# Check uptime
uptime
# Test TCP connection to a known-good server
nc -zv google.com 443
# Test DNS resolution
nslookup apple.com
# Test ICMP connectivity
ping -c 4 8.8.8.8
# Check network interfaces
ifconfig | grep "status"
# View active TCP connections
netstat -an | grep ESTABLISHED | head -20
# Check for TCP connection errors
netstat -s | grep -i "error\|fail\|drop\|overflow"
Si nc -zv google.com 443 échoue (délai de connexion dépassé) mais que ping -c 4 8.8.8.8 réussit, et que votre temps de fonctionnement est à 49 jours ou plus, vous avez de fortes preuves du bug TCP.
Si votre Mac présente également des blocages ou des problèmes de performances en plus des problèmes réseau, notre guide de correction des blocages macOS Tahoe peut apporter un contexte utile supplémentaire.
Que faire quand vous confirmez le bug
- Enregistrez tout travail non sauvegardé dans les applications ouvertes
- Fermez correctement les applications qui ont des opérations de fichiers actives (bases de données, encodage vidéo, etc.)
- Redémarrez votre Mac avec
sudo shutdown -r nowou le menu Apple - Vérifiez la connectivité après le redémarrage en chargeant une page web et en exécutant
uptimepour confirmer que le compteur s'est réinitialisé - Mettez en place une stratégie de prévention de la section ci-dessus pour vous assurer de ne plus rencontrer le bug
Foire aux questions
Mon Mac est-il affecté par le bug TCP de 49 jours ?
Chaque Mac sous macOS est potentiellement affecté, quel que soit le modèle matériel, le type de processeur ou la version de macOS. Le bug existe dans le noyau XNU, qui est le fondement de toutes les installations macOS. Cependant, vous ne rencontrerez le bug que si votre Mac fonctionne en continu pendant plus de 49,7 jours sans redémarrage. Si vous redémarrez votre Mac au moins une fois par mois — que ce soit manuellement ou via des mises à jour système — vous ne rencontrerez jamais le bug.
À quelle fréquence dois-je redémarrer mon Mac pour éviter le bug ?
Redémarrer une fois tous les 30 jours offre une marge de sécurité confortable en dessous du seuil de 49,7 jours. Pour les Mac serveurs critiques, un redémarrage hebdomadaire (idéalement pendant les heures creuses) offre une marge de sécurité encore plus large. Vous pouvez automatiser cela en utilisant pmset, launchd ou une commande shutdown -r planifiée comme décrit dans la section de prévention ci-dessus. Il n'y a aucun inconvénient à redémarrer plus fréquemment — au contraire, les redémarrages réguliers aident à éliminer les fuites mémoire, à appliquer les mises à jour en attente et à maintenir la santé globale du système.
Apple va-t-il corriger ce bug ?
Oui, Apple devrait corriger le bug dans macOS 26.5, actuellement en bêta 2 en avril 2026. Selon le cycle bêta habituel d'Apple, la version publique est attendue fin printemps ou début été 2026. Le correctif impliquera probablement de corriger la comparaison entière dans la pile TCP du noyau XNU pour gérer correctement le débordement du minuteur 32 bits, ou potentiellement de mettre à niveau le minuteur vers un entier 64 bits. Jusqu'à ce que le correctif soit intégré dans une version de production, la seule atténuation est de redémarrer votre Mac avant d'atteindre le seuil de 49 jours de fonctionnement.
Le bug affecte-t-il les Mac Apple Silicon et Intel ?
Oui. Le bug se trouve dans la pile TCP du noyau XNU, qui est un code indépendant de l'architecture fonctionnant aussi bien sur Apple Silicon (séries M1, M2, M3, M4 et M5) que sur les processeurs Intel. Le débordement d'entier se produit de la même façon quelle que soit l'architecture matérielle sous-jacente. Que vous ayez un MacBook Pro de 2015 avec un processeur Intel ou un Mac Studio de 2026 avec un M5 Ultra, le bug se comporte de manière identique.
Puis-je vérifier le temps de fonctionnement de mon Mac à distance ?
Oui, si vous avez accès SSH à votre Mac (activé via Réglages Système > Général > Partage > Connexion à distance), vous pouvez vérifier le temps de fonctionnement à distance :
ssh username@your-mac-ip "uptime"
Pour gérer plusieurs Mac, vous pourriez créer un script qui vérifie le temps de fonctionnement sur toutes les machines :
#!/bin/bash
# check_all_macs.sh
MACS=("mac1.local" "mac2.local" "mac3.local")
for mac in "${MACS[@]}"; do
echo "--- $mac ---"
ssh user@$mac "uptime" 2>/dev/null || echo " Connection failed"
done
Vous pouvez également utiliser Apple Remote Desktop (ARD) ou des solutions de gestion d'appareils mobiles (MDM) pour surveiller le temps de fonctionnement sur un parc de Mac gérés.
Si vous gérez des Mac qui se connectent à des lecteurs réseau ou des appareils NAS, le bug de 49 jours peut également perturber les connexions de partage de fichiers SMB. Consultez notre guide de dépannage SMB/NAS macOS Tahoe pour le dépannage du stockage réseau associé.
Conclusion
Le bug TCP de 49 jours de macOS est une étude de cas fascinante sur la façon dont un débordement d'entier subtil — l'une des classes de bugs logiciels les plus anciennes et les mieux documentées — peut persister indétecté dans un noyau de système d'exploitation moderne et mature pendant des années, pour n'émerger qu'au fur et à mesure que des utilisateurs de plus en plus nombreux adoptent des configurations de serveur Mac toujours allumé.
Pour la plupart des utilisateurs de Mac, le bug est une curiosité technique intéressante qui n'affectera jamais leur informatique quotidienne. Mais pour la communauté grandissante d'utilisateurs qui s'appuient sur des Mac comme serveurs, machines de développement et infrastructure toujours allumée, c'est un véritable danger opérationnel qui requiert attention et mesures d'atténuation.
La bonne nouvelle est que la mesure d'atténuation est simple : vérifiez votre temps de fonctionnement, redémarrez avant 49 jours, et idéalement automatisez le processus pour ne plus jamais avoir à y penser. Et avec macOS 26.5 à l'horizon, un correctif permanent est à portée de main.
En attendant, considérez ceci comme un excellent rappel que même les plateformes informatiques les plus abouties et les plus fiables sont construites par des humains, et que le code écrit par des humains n'est jamais parfait. Les redémarrages réguliers ne sont pas qu'un cliché paresseux du support informatique — ils constituent une véritable bonne pratique qui protège exactement contre ce type de défaut latent.
Ressources connexes
Si vous résolvez d'autres problèmes macOS Tahoe en même temps que le bug TCP, ces guides peuvent vous être utiles :
- Guide de dépannage Wi-Fi macOS Tahoe — Pour les problèmes de connectivité Wi-Fi au-delà du bug TCP
- Guide complet de dépannage macOS Tahoe — Pour un aperçu complet des problèmes macOS Tahoe connus
- Guide complet du Moniteur d'activité — Pour surveiller les ressources système et diagnostiquer les problèmes de performances
- Guide de correction des blocages macOS Tahoe — Pour les problèmes de performances et de blocage
- Dépannage SMB/NAS macOS Tahoe — Pour les problèmes de connectivité du stockage réseau
- Guide de maîtrise du Terminal — Pour apprendre les commandes Terminal utilisées dans cet article
