En 2022, Microsoft tente un remake du bug de l’an 2000

Hello World! Et si on débutait cette nouvelle année d’articles sur Les Joies du Code avec le partage d’un bon gros fail des familles signé Microsoft ? 👀

Qui l’eût cru ? Tel un (mauvais) remake du bug de l’an 2000, les équipes de Microsoft ont été confrontées en ce début d’année à un dysfonctionnement on ne peut plus gênant pour leur solution Exchange Server.

À compter du 1er janvier de cette année 2022, absolument plus aucun e-mail ne pouvait être délivré pour toutes les entreprises reposant sur la solution Exchange installée sur site, dans ses versions 2016 et 2019 : les messages restaient tout bonnement bloqués en file d’attente sans qu’aucun envoi ne soit possible.

En checkant les logs d’événements Windows, les administrateurs Exchange ont ainsi pu découvrir les messages d’erreur suivants :

Log Name: Application
Source: FIPFS
Logged: 1/1/2022 1:03:42 AM
Event ID: 5300
Level: Error
Computer: server1.contoso.com
Description: The FIP-FS "Microsoft" Scan Engine failed to load. PID: 23092, Error Code: 0x80004005. Error Description: Can't convert "2201010001" to long.

Log Name: Application
Source: FIPFS
Logged: 1/1/2022 11:47:16 AM
Event ID: 1106
Level: Error
Computer: server1.contoso.com
Description: The FIP-FS Scan Process failed initialization. Error: 0x80004005. Error Details: Unspecified error.

Alors que le bug se situe — comme le font comprendre les logs — au niveau du moteur d’analyse antivirus FIP-FS de la solution, c’est plutôt sa raison qui fait mal : l’usage d’une variable int32 signée pour stocker une date pour vérifier la version du moteur.

Oui, c’est assez sale. Très, très, très sale même.

Alors que la valeur maximale du long int est de 2 147 483 647, Microsoft proposait pour les dates de 2022 des valeurs comme 2 201 010 001 (pour le 1er janvier 2022 par exemple), les couples de digits correspondant dans l’ordre à l’année, au mois puis au jour en cours.

Et forcément, quand on essaie de faire passer ce genre de valeur dans un type de donnée absolument incapable de l’encaisser...

La suite est simple : à chaque initialisation de vérification de mail par l’utilitaire FIP-FS, le scan antivirus tombait sur ce bug qui faisait crasher son moteur, empêchant tout départ de mail.

Assez réactif sur ce coup, Microsoft a rapidement partagé un correctif d’urgence temporaire nécessitant une action de la part des administrateurs Exchange, par des étapes manuelles ou l’usage plus automatisé d’un script PowerShell.

Dans le correctif, la nouvelle valeur transmise pour la version du moteur antivirus sera 2 112 330 001 (à priori, le 33 décembre 2021 ne posera plus problème 👀).

Pour celles et ceux que ça pourrait intéresser, les différentes étapes correctives sont décrites dans ce billet sur le blog de l’équipe Exchange de Microsoft.

La firme de Redmond précise que l’opération peut prendre plus ou moins de temps en fonction du nombre de mails en attente d’envoi dans l’organisation.