Résumé
Il existe une vulnérabilité d’exécution de code à distance dans Microsoft Visual Studio 2019 et Visual Studio 2017 si un fichier XOML (Extensible Object Markup Language) fait référence à certains types entraîne l'exécution de code aléatoire lors de l'ouverture du fichier dans Visual Studio.
Il existe maintenant une restriction sur les types autorisés à être utilisés dans les fichiers .xoml. Si un fichier.xoml contenant l'un des types nouvellement non autorisés est ouvert, vous recevez un message d'erreur indiquant que le type n'est pas autorisé.
Pour en savoir plus sur cette vulnérabilité, consultez la page CVE-2019-1113.
Solution de contournement
Si un fichier .xoml ouvert ne pose pas de problème de sécurité, vous pouvez désactiver le processus de recherche de types non autorisés. Pour ce faire, ajoutez une clé à la section <appSettings> du fichier devenv.exe.config, comme suit :
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerTypeChecking" value="true"/>
</appSettings>
...
Cette valeur appSetting entraîne la désactivation de la vérification de type dans le sérialiseur XOML (Extensible Object Markup Language). Si la valeur est définie sur vrai, elle est prioritaire sur la nouvelle valeur appSetting pour désactiver uniquement certains types.
Si vous souhaitez uniquement interdire certains types spécifiques, vous devez apporter les modifications suivantes au fichier devenv.exe.config :
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerDefaultUnauthorizedTypes" value="true"/>
</appSettings>
...
Cette modification autorise tous les types non autorisés par défaut. Pour marquer des types spécifiques comme non autorisés, vous devez également apporter les modifications suivantes au fichier devenv.exe.config :
...
<configuration>
...
<configSections>
<sectionGroup name="System.Workflow.ComponentModel.WorkflowCompiler" type="System.Workflow.ComponentModel.Compiler.WorkflowCompilerConfigurationSectionGroup, System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="authorizedTypes" type="System.Workflow.ComponentModel.Compiler.AuthorizedTypesSectionHandler, System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</sectionGroup>
</configSections>
...
<System.Workflow.ComponentModel.WorkflowCompiler>
<authorizedTypes>
<foo version="v4.0">
<authorizedType Assembly="System.Activities.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Activities.Presentation" TypeName="WorkflowDesigner" Authorized="false"/>
</foo>
</authorizedTypes>
</System.Workflow.ComponentModel.WorkflowCompiler>
...
</configuration>
...
Ces modifications marquent uniquement le type WorkflowDesigner dans l’assemblage System.Activities.Presentation comme non autorisé, comme suit :
-
Version : 4.0.0.0
-
Culture : neutre
-
PublicKeyToken: 31bf3856ad364e35
Pour marquer d'autres types comme non autorisés, vous pouvez ajouter des entrées similaires pour ces types.