ちょっと話題の記事

[PowerShell] セキュリティ更新によるPowerShellの挙動の変更について

2019.01.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。
本日非常に珍しい内容でPowerShell Team Blogが更新されたので紹介します。

セキュリティ更新によるPowerShellの挙動の変更

上記ブログ記事の内容としては、CVE-2019-0543に対応したセキュリティ更新(2019年1月9日のWindows Update)を適用すると、非常にレアなケースでWindows PowerShellおよびPowerShell Coreの挙動に破壊的変更が生じるというものです。

実際どの様な破壊的変更かについて以下で説明します。

このセキュリティ更新による破壊的変更

このセキュリティ更新で影響を受けるのは

非管理者ユーザーでローカルホストに対してPowerShell Remotingで接続する(local loopback remoting)

場合です。

正直どの様な場合にこんな行為をする必要があるのかユースケースがさっぱり思いつきません。
本当にレアなケースだと思います。

セキュリティ更新前の挙動

通常PowerShell Remotingは管理者ユーザーのみ接続可能なのですが、Register-PSSessionConfigurationコマンドレットで独自のエンドポイントを作成すると非管理者ユーザーでもPowerShell Remoting接続可能にできます。

# 非管理者ユーザーも接続可能なエンドポイント(MyNonAdmin)を作成
Register-PSSessionConfiguration -Name MyNonAdmin -SecurityDescriptorSddl 'O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;BU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)' -Force

このエンドポイント(MyNonAdmin)を指定してNew-PSSessionなどでlocalhostに対して接続してみると、

# User01は非管理者ユーザー
$nonAdminCred = Get-Credential User01 

# ConfigurationNameパラメーターに MyNonAdmin を指定
$session = New-PSSession -ComputerName localhost -ConfigurationName MyNonAdmin -Credential $nonAdminCred
$session

上図の様に非管理者ユーザーでもエラーなく接続できます。

セキュリティ更新後の挙動

セキュリティ更新後に前項と同様に非管理者ユーザーで接続してみると下図の様にエラーとなります。

ちなみに、localhostでない外部ホストに対する接続であればエラーとはなりません。
また、管理者ユーザーでの接続は変わらず可能です。

影響範囲

セキュリティ更新がPowerShellというよりはWinRMに対するものの様で、影響範囲としては

  • Windows PowerShell / PowerShell Core

の両方になります。

  • PowerShell Remoting over SSH
  • Just Enough Administration(JEA) session

は影響をうけません。

最後に

セキュリティ更新でPowerShellに破壊的変更が発生するのは非常に珍しく、もしかしたら初の事象かもしれません。
影響を受けるシナリオが非常にレアなため破壊的変更を受け入れたものと思われます。