Nintex Workflows starten nicht mehr nach .NET-Update

In einigen SharePoint Umgebungen kam es vor, dass Workflows nach einem Windows Update nicht mehr starteten und sich nicht mehr veröffentlichen ließen.

Die Fehlermeldung beim Veröffentlichen eines Nintex Workflows sieht dabei etwa wie folgt aus:

Ursache

Ursache des oben beschriebenen Verhaltens ist das .NET Update, das die Sicherheitslücke CVE-2018-8421 geschlossen hat. Diese Sicherheitslücke ermöglichte laut Microsoft eine Remote-Code-Ausführung[1].

Durch das Schließen der Sicherheitslücke funktioniert die Ausführung von Workflows nicht mehr.

Das betrifft sowohl SharePoint Workflows als auch Nintex Workflows. Obwohl dieses Update bereits im September veröffentlicht wurde, taucht dieses Problem immer wieder in SharePoint Umgebungen auf, in denen das Update installiert wird.

Lösung

Mit dem SharePoint CU von November 2018 wurde dieser Fehler für SharePoint Workflows behoben. Für manche Umgebungen in denen Nintex Workflows im Einsatz sind, bleibt der Fehler aber bestehen[2].

Microsoft hat in einem Blogeintrag bereits die Vorgehensweise beschrieben, die notwendig ist um das Problem zu beheben. Die Vorgehensweise hilft um SharePoint Workflows wieder zum Laufen zu bringen. Für Nintex Workflows muss diese Vorgehensweise jedoch leicht abgewandelt werden, deshalb wird in diesem Blogeintrag die Vorgehensweise mit dem Fokus auf Nintex Workflows beschrieben.

Um den Fehler zu beheben, müssen weitere Einträge zu den authorized Types in der web.config aller Web-Front-End Servern hinzugefügt werden.

Die web.config liegt auf den Front-End Servern im folgenden Ordner: C:\inetpub\wwwroot\wss\VirtualDirectories\Portal Home-80

Die Datei kann z.B. mit Notepad geöffnet und bearbeitet werden. Es wird empfohlen vorher ein Backup der web.config Datei anzufertigen.

In der web.config kann man nach den authorizedTypes suchen und die Änderungen unter die bestehenden Einträge einfügen.

Für SharePoint 2013 und 2016 müssen die folgenden Einträge hinzugefügt werden:

<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeBinaryOperatorExpression" Authorized="True" /> 
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePrimitiveExpression" Authorized="True" /> 
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodInvokeExpression" Authorized="True" />
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeFieldReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeThisReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePropertyReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeTypeReferenceExpression" Authorized="True" />

 

Für SharePoint 2007 und 2010 sind es die folgenden Einträge, die zur web.config hinzugefügt werden müssen:

<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeBinaryOperatorExpression" Authorized="True" /> 
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePrimitiveExpression" Authorized="True" /> 
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodInvokeExpression" Authorized="True" />
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeFieldReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeThisReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePropertyReferenceExpression" Authorized="True" />
<authorizedType Assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeTypeReferenceExpression" Authorized="True" />

Der letzte Eintrag mit dem TypeName “CodetypeReferenceExpression” wird dabei speziell für die Verwendung von Nintex Workflow benötigt.

Es wird empfohlen im Anschluss an die Änderungen einen IISReset durchzuführen.

Da der SharePoint dadurch für einen Moment nicht erreichbar ist und aktive Verbindungen unterbrochen werden, sollte diese Anpassung vorher mit den Anwendern abgestimmt und eventuell ein Wartungsfenster vereinbart werden.

Weitere Massnahmen

Sollte der Fehler im Anschluss immer noch auftauchen muss zusätzlich der Timer Service angepasst werden.

Die Konfigurationsdatei des Timer Services liegt im folgenden Verzeichnis auf allen SharePoint 2013 Servern:

C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\BIN

bzw. für SharePoint 2016:

C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\BIN

Machen Sie eine Sicherung der Datei OWSTIMER.EXE.config und fügen Sie die oben aufgelisteten Einträge zu den authorizedTypes hinzu.

Wenn es noch keinen Knoten mit dem Titel authorized Types gibt, muss dieser als Unterknoten vom System.Workflow.ComponentModel.WorkflowCompiler hinzugefügt werden. Zusätzlich muss der Knoten configSections erstellt bzw. erweitert werden:

Eine vervollständigte Konfiguration des Timer Service kann dann wie folgt aussehen:

<?xml version="1.0" encoding="utf-8" ?>
<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" /> 
		<section name="authorizedRuleTypes" type="System.Workflow.ComponentModel.Compiler.AuthorizedTypesSectionHandler, System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
	</sectionGroup>
	</configSections>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0.30319" />
  </startup>
  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true" />
    <appDomainManagerAssembly value="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
    <appDomainManagerType value="Microsoft.SharePoint.SPAppDomainManager" />
  </runtime>
<System.Workflow.ComponentModel.WorkflowCompiler>
	<authorizedTypes>
		<targetFx version="v4.0">
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeBinaryOperatorExpression" Authorized="True" /> 
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePrimitiveExpression" Authorized="True" /> 
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodInvokeExpression" Authorized="True" />
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeMethodReferenceExpression" Authorized="True" />
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeFieldReferenceExpression" Authorized="True" />
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeThisReferenceExpression" Authorized="True" />
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodePropertyReferenceExpression" Authorized="True" />
			<authorizedType Assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" NameSpace="System.CodeDom" TypeName="CodeTypeReferenceExpression" Authorized="True" />
		</targetFx>
	</authorizedTypes>
<System.Workflow.ComponentModel.WorkflowCompiler>	
</configuration>

Diese Anpassung muss auf allen SharePoint Servern erfolgen.

Anschließend muss z.B. per PowerShell ein IISReset und ein Neustart des Timer Services durchgeführt werden. Ein Neustart des Timer Services kann mit den Befehlen net stop sptimerv4 und net start sptimerv4 durchgeführt werden:

Sollten dann immer noch Probleme beim Veröffentlichen und Starten von Nintex Workflows auftreten, müssen alle authorizedTypes aus der web.config in die Konfigurationsdatei des Timer Services übernommen werden.

Anschließend sollten Workflows wieder starten und sich veröffentlichen lassen.

[1] Siehe auch: https://blogs.msdn.microsoft.com/rodneyviana/2018/09/13/after-installing-net-security-patches-to-address-cve-2018-8421-sharepoint-workflows-stop-working/

[2] Siehe auch: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-8421

 

Leave a Comment

Your email address will not be published. Required fields are marked *