Description détaillée
Lorsque des fichiers sont envoyés au client, Internet Explorer utilise les informations suivantes pour décider de la façon de les traiter :
-
Extension du nom de fichier, identificateur de programme correspondant et CLSID du gestionnaire inscrit de cette extension.
-
Type de contenu extrait de l'en-tête HTTP (type MIME), identificateur de programme correspondant et CLSID du gestionnaire inscrit de ce contenu ou type MIME.
-
Disposition du contenu extraite de l'en-tête HTTP.
-
Résultat de la détection MIME.
Internet Explorer est plus restrictif que dans Windows Server 2003 quant à l'exécution d'un fichier téléchargé potentiellement dangereux.
Internet Explorer applique le principe de cohérence entre le mode de gestion d'un fichier dans le navigateur et son mode de gestion dans le shell Windows. Lorsque le fichier est téléchargé dans le cache, Internet Explorer compare le type MIME de ce fichier avec son extension. Si ces informations ne correspondent pas, il tente de renommer le fichier qui se trouve dans le cache.
Avant qu'un fichier ne soit chargé dans son gestionnaire MIME ou exécuté par son gestionnaire d'extension, Internet Explorer compare les CLSID de ces deux gestionnaires. S'il existe toujours une incohérence, Internet Explorer impose une invite obligatoire demandant à l'utilisateur de confirmer qu'il souhaite charger le fichier dans le gestionnaire MIME. Si celui-ci rejette le fichier incohérent, Internet Explorer affiche une boîte de dialogue d'erreur de téléchargement et n'exécute pas automatiquement le fichier dans le gestionnaire d'extension du shell Windows, mais propose de sauvegarder le fichier.
Il existe un changement associé mais distinct destiné à empêcher l'exécution de fichiers potentiellement endommagés dans leurs gestionnaires d'extension de l'environnement. Internet Explorer affiche la boîte de dialogue d'erreur de téléchargement pour tout fichier rejeté par son gestionnaire MIME avec le code d'erreur suivant : E_Cannot_Load_Data. Il n'exécute pas ce fichier dans son gestionnaire d'extension d'environnement, quel que soit le type MIME ou l'extension du nom de fichier.
Ces modifications n'affectent pas les cas où un en-tête HTTP "Content-disposition=attachment" est utilisé pour le fichier. Dans ce cas en effet, le nom ou l'extension de fichier proposé par le serveur est considéré comme final. Le fichier peut alors être exécuté, quelle que soit l'incohérence entre le type MIME et l'extension, si l'utilisateur choisit d'accepter le téléchargement du fichier lorsqu'il y est invité.
Pourquoi cette modification est-elle importante ?
Lorsque les informations concernant le type de fichier ne sont pas transmises correctement par le serveur et qu'elles sont enregistrées sur l'ordinateur, un fichier dangereux peut être exécuté ultérieurement. Par exemple, Internet Explorer peut télécharger un fichier ayant l'aspect d'un fichier texte. Si ce fichier ne peut pas être chargé par son gestionnaire MIME et qu'il possède une extension .doc, il risque d'être exécuté dans une application telle que Microsoft Word sans que l'utilisateur en soit averti. Dans Microsoft Word, le fichier peut alors utiliser un contenu actif, tel qu'une macro, pour exécuter un programme (par exemple un virus) sur l'ordinateur de l'utilisateur.
Quels sont les changements observés ?
Internet Explorer tente désormais de renommer les fichiers téléchargés dans le cache d'Internet Explorer de façon à faire correspondre les types de contenu et les extensions, afin de protéger l'utilisateur contre les fichiers qui trompent l'utilisateur quant à leur type.
Internet Explorer invite l'utilisateur à télécharger le fichier et n'exécute plus les fichiers pour lesquels le type MIME et l'extension ne sont pas cohérents et qui sont rejetés par le gestionnaire MIME inscrit.
Internet Explorer n'exécute pas non plus les fichiers dans leur gestionnaire d'environnement si le code d'erreur E_Cannot_Load_Data est renvoyé par leur gestionnaire MIME.
Plutôt que d'exécuter un tel fichier dans le gestionnaire d'environnement, Internet Explorer affiche une boîte de dialogue d'erreur et propose à l'utilisateur de sauvegarder ce fichier.
Les développeurs Web peuvent isoler les applications qui ne fonctionnent pas en raison de ce comportement : il leur suffit de désactiver cette fonctionnalité comme indiqué dans la section Paramètres, plus loin dans ce document.
Comment contourner ces problèmes ?
Les développeurs Web doivent modifier leurs serveurs Web afin qu'ils hébergent des fichiers utilisant des en-têtes de types de contenu et des extensions de noms de fichiers cohérents. Si cela n'est pas possible, ils peuvent avoir recours à l'en-tête HTTP "Content-disposition=attachment" afin que les fichiers soient directement envoyés vers leur gestionnaire d'extension plutôt que vers le gestionnaire MIME. Notez que les téléchargements de fichiers contenant l'en-tête "Content-disposition=attachment" provoquent l'affichage de l'invite demandant à l'utilisateur s'il souhaite ouvrir ou enregistrer le fichier.
Si vous avez développé un gestionnaire MIME et que vous comptez volontairement sur Internet Explorer pour l'exécution des fichiers que votre gestionnaire MIME rejette, vous devez modifier ce dernier en conséquence. La modification la plus sûre consiste à faire en sorte que le fichier soit traité de façon native directement dans le gestionnaire MIME, plutôt que d'être rejeté.
Il arrive cependant qu'il soit impossible de modifier le comportement du gestionnaire MIME de telle sorte qu'il gère les fichiers téléchargés de façon native. Dans ces différents scénarios, il y a plusieurs options possibles.
Vous pouvez développer un gestionnaire MIME et un gestionnaire d'extension de nom de fichier faisant tous deux partie du même CLSID, afin qu'Internet Explorer accepte la correspondance de CLSID. Il n'invitera donc pas l'utilisateur à télécharger le fichier et ne bloquera pas son exécution dans le gestionnaire d'extension.
Si le gestionnaire MIME n'a pas besoin d'être chargé et qu'il provoque des erreurs de non correspondance entre le type MIME et l'extension, le développeur peut le marquer de telle sorte qu'il soit ignoré par Internet Explorer en cas de non-correspondance. Par exemple, si le gestionnaire MIME d'un type MIME multimédia présente une extension incohérente et doit être exécuté directement pour être lu correctement, le développeur peut marquer le ProgID de son gestionnaire MIME de telle sorte qu'il soit ignoré en cas d'incohérence lorsque l'extension du nom du fichier multimédia appartient à un ProgID différent. Pour ce faire, il doit définir la valeur suivante du Registre avec le gestionnaire MIME à ignorer :
HKEY_CLASSES_ROOT\PROG_ID_OF_MIMEHANDLER_TO_IGNORE\"PreferExecuteOnMismatch"=DWORD:00000001
Si aucune de ces solutions ne résout le problème, il est conseillé au développeur de signaler cette incompatibilité aux utilisateurs et de leur expliquer comment enregistrer le fichier incohérent dans le système de fichiers pour le lancer ensuite manuellement.
Si votre scénario est affecté par des invites de téléchargement de fichiers en raison d'une incohérence MIME/extension inconciliable, vous pouvez inscrire le ProgID de votre gestionnaire MIME de façon à contourner toutes les invites de téléchargement, y compris la nouvelle invite déclenchée par ce type d'incohérence.
Auparavant, vérifiez que votre gestionnaire MIME est capable de traiter les fichiers qui lui sont délégués en toute sécurité. Par exemple, assurez-vous qu'il ne permettrait pas à un utilisateur malintentionné d'obtenir plus de privilèges que ceux autorisés par la zone d'où provient le fichier. Cette vérification s'effectue au moyen du modelage de menaces, de la révision du code qui doit contenir des modes de défaillance sécurisés, et de la saturation de tampons. Si vous déterminez que votre gestionnaire MIME est capable de gérer de façon sécurisée tous les types de fichiers susceptibles de lui être délégués, vous pouvez l'inscrire de façon à contourner les invites de téléchargement en ajoutant une nouvelle clé à l'un des paramètres de Registre suivants :
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Secure_Mime_Handlers
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Secure_Mime_Handlers
Cette clé doit être nommée avec le ProgID de votre gestionnaire MIME et posséder le DWORD=00000001.
Description détaillée
L'un des critères de sauvegarde permettant de déterminer le type d'un fichier est le résultat de la détection MIME. En examinant un fichier, Internet Explorer peut en effet reconnaître les signatures de bits de certains types de fichiers. Dans Windows Server 2003 Service Pack 1, la détection MIME d'Internet Explorer ne promeut jamais un fichier de type « texte/en clair » vers d'autres types de fichier plus dangereux dans la zone des sites sensibles. Par exemple, les fichiers reçus en tant que fichiers de texte brut, mais qui contiennent du code HTML, ne sont pas élevés au type HTML, qui peut contenir du contenu actif.
Pourquoi cette modification est-elle importante ?
Ce changement constitue un moyen de défense supplémentaire contre les contenus malveillants publiés sur un serveur Web de confiance : il arrive en effet qu'un fichier portant l'en-tête content-type=text\plain soit transmis par le serveur mais qu'un utilisateur malintentionné ait chargé dans ce fichier du code HTML avec un contenu actif.
Quels sont les changements observés ?
Lorsqu'un serveur Web n'inclut pas l'en-tête Content-Type approprié dans ses fichiers et utilise des extensions de noms de fichiers non standard pour des pages HTML, ces pages risquent d'être affichées en tant que texte brut au lieu du format HTML.
Comment contourner ces problèmes ?
Configurez les serveurs Web de telle sorte qu'ils utilisent les en-têtes Content-Type adéquats, ou nommez les fichiers en leur attribuant l'extension appropriée pour l'application destinée à les gérer.