Podsumowanie
Jeśli plik XOML (Extensible obiektu Markup Language) odwołuje się do niektórych typów i powoduje losowe kodu do uruchomienia, gdy plik jest otwarty w Visual to luka umożliwiająca wykonanie zdalnego kodu istnieje w programie Microsoft Visual Studio 2019 i Visual Studio 2017 Studio.
Obecnie istnieje ograniczenie, w którym typy mogą być używane w plikach xoml. Po otwarciu pliku xoml, który zawiera jeden z typów nowo nieautoryzowanych, zostanie wyświetlony komunikat o błędzie, informujący, że typ jest nieautoryzowany.
To Dowiedz się więcej na temat luki w zabezpieczeniach, przejdź do CVE-2019-1113.
Obejście
Jeśli plik xoml otwarty nie powoduje problemów z zabezpieczeniami, można wyłączyć proces sprawdzania zgodności typów nieautoryzowanych. Aby to zrobić, należy dodać klucz do<appSettings>sekcja pliku devenv.exe.config , w następujący sposób:
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerTypeChecking" value="true"/>
</appSettings>
...
Ten appSetting wartość całkowicie wyłącza typ sprawdzania w serializatora XOML (Extensible obiektu Markup Language). Jeśli wartość jest ustawiona na wartość true, to ma pierwszeństwo przed następującą nową wartość AppSetting klucza dla wykluczający tylko określonych typów.
Tylko do odrzucenia niektórych określonych typów, należy wprowadzić następujące zmiany w pliku devenv.exe.config :
...
<appSettings>
<add key="microsoft:WorkflowComponentModel:DisableXOMLSerializerDefaultUnauthorizedTypes" value="true"/>
</appSettings>
...
Ta zmiana pozwala wszystkich typów, które są nieautoryzowane domyślnie. Aby oznaczyć określonych typów jako nieautoryzowane, należy również wprowadzić następujące zmiany w pliku 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>
...
Te zmiany znaku typu w WorkflowDesigner w zestawie System.Activities.Presentation jako nieautoryzowany, w następujący sposób:
-
Wersja: 4.0.0.0
-
Kultury: neutralne
-
PublicKeyToken: 31bf3856ad364e35
Aby oznaczyć inne typy jako nieautoryzowane, można dodać wpisy podobne do tych typów.