Zusammenfassung
In Visual Studio 2019 und Visual Studio 2017 besteht eine Sicherheitsanfälligkeit bezüglich Remotecodeausführung, wenn in einer XOML-Datei (Extensible Object Markup Language) bestimmte Typen angegeben sind. Dadurch wird zufälliger Code ausgeführt, wenn die Datei in Visual Studio geöffnet wird.
Es gibt keine Beschränkung bezüglich der Typen, die in XOML-Dateien verwendet werden dürfen. Wenn eine XOML-Datei geöffnet wird, die nur einen der neu als nicht autorisiert festgelegten Typen enthält, wird eine Fehlermeldung angezeigt, dass dieser Typ nicht zulässig ist.
Weitere Informationen zu dieser Sicherheitsanfälligkeit finden Sie unter CVE-2019-1113.
Problemumgehung
Wenn eine geöffnete XOML-Datei keine Sicherheitsprobleme verursacht, können Sie die Überprüfung auf nicht autorisierte Typen deaktivieren. Fügen Sie dazu im Abschnitt <appSettings> der Datei devenv.exe.config wie folgt einen Schlüssel hinzu:
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerTypeChecking" value="true"/>
</appSettings>
...
Mit diesem appSetting-Wert wird die Typüberprüfung im XOML-Serialisierungsmodul (Extensible Object Markup Language) vollständig deaktiviert. Ist der Wert auf true gesetzt, hat dies Vorrang vor dem folgenden neuen appSetting-Wert, mit dem nur bestimmte Typen nicht zugelassen werden.
Wenn Sie bestimmte Typen nicht zulassen möchten, müssen Sie die folgenden Änderungen in der Datei devenv.exe.config vornehmen:
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerDefaultUnauthorizedTypes" value="true"/>
</appSettings>
...
Durch diese Änderung werden alle Typen zugelassen, die standardmäßig nicht zulässig sind. Um bestimmte Typen als nicht zulässig zu kennzeichnen, müssen Sie auch die folgenden Änderungen in der Datei devenv.exe.config vornehmen:
...
<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>
...
Durch diese Änderungen wird wie folgt nur der Typ WorkflowDesigner in der System.Activities.Presentation-Assembly als nicht zulässig gekennzeichnet:
-
Version: 4.0.0.0
-
Culture: neutral
-
PublicKeyToken: 31bf3856ad364e35
Um andere Typen als unzulässig zu kennzeichnen, können Sie ähnliche Einträge für diese Typen hinzufügen.