Resumo
Depois de aplicar as atualizações de segurança de abril de 2017 descritas na orientação de atualização de segurança da Microsoft CVE-2017-0160, o comando stop-computer do PowerShell v3.0+ falha. Além disso, se os aplicativos usarem os métodos de gerenciamento de energia, como desligamento ou reinicialização, da classe Win32_OperatingSystem e definirem o atributo EnablePrivileges como true, eles poderão observar a mesma falha. É retornada uma mensagem de erro de "Privilégio não mantido".
Mais informações
Sintomas do problema 1
Os clientes que tentarem desligar ou reiniciar um sistema, local ou remoto, usando o comando stop-computer no PowerShell v3.0 e versões posteriores verão o seguinte erro:
stop-computer : Privilégio não mantido.
Na linha:1 char:1
+ stop-computer
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (<COMPUTERNAME>:String) [Stop-Computer], ManagementE
+ FullyQualifiedErrorId : StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
Solução alternativa para o problema 1
Para contornar esse problema, execute o seguinte comando “shutdown.exe” para executar o desligamento e reiniciar as operações em sistemas locais ou remotos:
shutdown.exe [-r] [-s] [-m \\computer]
Para obter mais informações e ajuda com o comando, execute:
shutdown.exe -?
Sintomas do problema 2
Aplicativos de cliente que usam métodos de gerenciamento de energia, como desligamento ou reinicialização, da classe Win32_OperatingSystem e definem o atributo EnablePrivileges como true, podem observar o mesmo erro de “Privilégio não”mantido.
-
O exemplo 1 (PowerShell) retorna o erro“Privilégio não”mantido:
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
O exemplo 2 (código C#) retorna o erro “Privilégio não mantido”:
[STAThread] static void Main(string[] args) { ManagementClass mgmtObject = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject iterMgmtObject in mgmtObject.GetInstances()) { iterMgmtObject.Scope.Options.EnablePrivileges = true; iterMgmtObject.InvokeMethod("Reboot", null, null); } }
-
Solução alternativa para o problema 2
-
Para o exemplo 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
Para o exemplo 2 (código C#):
using System; using System.Collections.Generic; using System.Linq; using System.Management; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { public class Program { static void Main(string[] args) { var mgmtScope = new ManagementScope( ManagementPath.DefaultPath, new ConnectionOptions() { EnablePrivileges = true }); var mgmtClass = new ManagementClass(mgmtScope, new ManagementPath("Win32_OperatingSystem"), null); foreach (ManagementObject mgmtInst in mgmtClass.GetInstances()) { var mgmtCallResult = mgmtInst.InvokeMethod("Reboot", null, null); Console.Out.WriteLine("Reboot() Return Value: {0}", mgmtCallResult["ReturnValue"]); } } } }
Resolução
Solução para o problema 1
Para resolver esse problema, instale a atualização na tabela abaixo de acordo com seu sistema.
Sistema operacional |
Atualização |
Windows Server 2008 |
Para o .NET Framework 2.0, instale a atualização 4020511 Para o .NET Framework 4.5.2, instale a atualização 4020507 Para o .NET Framework 4.6.2, instale a atualização 4020503 |
Windows 7 e Windows Server 2008 R2 |
Para o .NET Framework 3.5.1, instale a atualização 4020513 Para o .NET Framework 4.5.2, instale a atualização 4020507 Para o .NET Framework 4.6 ou 4.6.1, instale a atualização 4020503 Para o .NET Framework 4.6.2, instale a atualização 4020500 |
Windows Server 2012 |
Para o .NET Framework 3.5, instale a atualização 4020512 Para o .NET Framework 4.5.2, instale a atualização 4020506 Para o .NET Framework 4.6 ou 4.6.1, instale a atualização 4020501 Para o .NET Framework 4.6.2, instale a atualização 4020498 |
Windows 8.1 e Windows Server 2012 R2 |
Para o .NET Framework 3.5, instale a atualização 4020514 Para o .NET Framework 4.5.2, instale a atualização 4020505 Para o .NET Framework 4.6 ou 4.6.1, instale a atualização 4020502 Para o .NET Framework 4.6.2, instale a atualização 4020499 |
Windows 10 RTM |
Instale a atualização 4019474 |
Windows 10 versão 1511 |
Instale a atualização 4019473 |
Windows 10 Versão 1607 e Windows Server 2016 |
Instale a atualização 4019472 |
Windows 10 versão 1703 |
Instale a atualização 4016871 |
Solução para o problema 2
Para resolver esse problema, instale a atualização na tabela abaixo de acordo com seu sistema.
Versão do Produto |
Prévia do pacote cumulativo de qualidade KB |
---|---|
Windows 10 Atualização 1703 (RS2) |
|
.NET Framework 4,7 |
|
Windows 10 Atualização 1607 |
|
.NET Framework 3.5 |
Catálogo
|
.NET Framework 4.6.2 e 4.7 |
Catálogo
|
Windows 8.1 |
|
.NET Framework 3.5 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows Server 2012 |
|
.NET Framework 3.5 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows 7 |
|
.NET Framework 3.5.1 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7 |
|
Windows Server 2008 |
|
.NET Framework 2.0 |
|
.NET Framework 4.5.2 |
|
.NET Framework 4,6 |
Observação Uma atualização para o .NET Framework 3.5 para Windows 10 Versão 1703 está agendada no futuro.
Aplicável a
Este artigo é aplicável aos seguintes produtos, conforme descrito na seção Produtos afetados da CVE-2017-0160:
Microsoft .NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 em todas as versões com suporte do Windows executando o PowerShell 3.0 e versões posteriores.