SCW アイコン
ヒーロー背景(区切りなし)
ブログ

サイキック・シグネチャー-知っておくべきこと

チャーリー・エリクセン
2022年4月27日 発行
最終更新日: 2026年3月10日

2022年4月19日、Neil Maddenは、Oracle Java 15から18、およびOpenJDK 15、17、18における脆弱性を公開しました。この脆弱性は、ECDSA署名の暗号にあり、攻撃者はこれらの署名の署名チェックを完全にバイパスすることが可能です。 

ECDSA署名があまり知られていないため、この脆弱性に関する見出しを目にしても、すぐに見過ごしてしまいがちです。しかし、ECDSA署名は、認証のような重要なタスクにおいて、インターネット上のシステムを保護する上で重要な役割を担っています。

詳細について説明する前に、ハッカーがどのようにサイキックシグネチャを悪用するのかを実際に体験してみたいという方は、無料のラボに直接アクセスしてみてください。無料のラボ(Missions)にアクセスし、ご自身で試してみてください。

ECDSAの何が問題なのか?

ECDSAという言葉を聞いたことがない人もいるかもしれない。Elliptic Curve Digital Signature Algorithmの略で、楕円曲線の数学的性質を利用した暗号の一種で、現時点では業界で最も強力な暗号のセキュリティを提供するものです。

というように、重要な機能に多く使われているということです。

  • SSL証明書の署名について
  • 暗号化通信時のハンドシェイク
  • サムル
  • JWT署名
  • OpenID Connectの署名

つまり、ECDSAはシステムを保護するための最も機密性の高い機能の多くで重要な役割を担っているのです。署名チェックを回避することができれば、非常に大きな被害を受ける可能性があります。

脆弱性はどのように悪用されるのですか?

ECDSAの数学は、残念ながらやや複雑です。しかし、知っておくべき重要なことは、ECDSA署名は2つの情報、すなわちrと sを含むということである。 

これらの数値は、署名の有効性を計算するために使用される。値rは、右辺のrと sの両方を使った計算の「結果」(左辺)である。0を掛けるのは良くないということから、ECDSAの仕様では、rや sの値が0になることがあれば、それらを破棄するように明示的に呼びかけている。 

しかし、ECDSAのJava実装はこれを考慮するのを忘れていた。そのため、rと sの両方が0である署名を受け入れることになり、これは常に真となる。JWTの例でこれを実証し、いかに簡単であるかを示しましょう。https://token.dev/ を使って、アプリケーションで生成されるのと同じような ES256 アルゴリズムのトークンを生成することができます。

アルゴES256で生成されたトークン

JWTは3つのパートに分かれていることを思い出してください。

  • ヘッダー(青字)
  • ペイロード(緑色の部分)
  • サイン(赤色)

さて、署名チェックを回避したい場合、どのようにすればよいのだろうか。署名はrとsの値を指定し、DER形式でエンコードされています。 

署名値のDERエンコード

この新しい署名を使用するようにJWTを変更しましょう。JWTでは、等号は含まれないことに注意してください。

DERエンコードされた署名を使用した新しいJWT

これで、署名のrと sが0に設定され、脆弱なバージョンのJavaでは、指定したペイロードに対して署名チェックが成功するようになりました。 

誰が影響を受けるのか、どう軽減するのか?

この脆弱性は、Oracle JavaとOpenJDKの両方に影響します。これらは以下の通りです。

Oracle Java SE(および旧バージョン、非サポート)。 

  • 18
  • 17.0.2

Oracle GraalVM Enterprise Editionです。 

  • 22.0.0.2
  • 21.3.1

OpenJDKです。

  • 18
  • 17.0.2
  • 15.0.6
  • 13.0.10
  • 11.0.14
  • 8u322
  • 7u331

Oracle社OpenJDK社ともに勧告を発表しており、すぐにでも適用可能なパッチがあります。 

本脆弱性に対する防御のためのハンズオンプラクティス

ここSecure Code Warrior では、サイキックシグネチャーのような最新の脆弱性から、何年も前から存在する脆弱性まで、重要な脆弱性に関する最も適切な情報と実践的な演習を開発者に提供するよう努力しています。

私たちは、リスクを真に抑えるには、開発者が防御メカニズムを理解し、最初から安全なコードを書けるようにすることが必要だと考えています。そのため、この脆弱性(および他の多くの脆弱性)の段階的なウォークスルーを作成し、あなたと影響を受けるチームのために提供しています。 

ウォークスルーでは、指示に従ってJWTのPhysic Signatureを悪用し、機能しているアプリへの影響をリアルタイムに確認することができます。

今すぐお試しください。

リソースを表示
リソースを表示

Psychic Signatureの脆弱性は、認証などの重要なタスクでシステムを保護するECDSA署名の暗号にあります。この脆弱性により、ハッカーはあらゆる署名チェックを回避できます。この投稿では、その内容と軽減方法について説明します。

もっと興味がありますか?

もっと詳しく

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする文化を築くお手伝いをします。アプリケーションセキュリティマネージャー、開発者、CISO、またはセキュリティ関係者であるかに関わらず、安全でないコードに関連するリスクを軽減するお手伝いをします。

デモを予約
シェア:
リンクトインのブランドソーシャルx ロゴ
著者
チャーリー・エリクセン
2022年4月27日発行

シェア:
リンクトインのブランドソーシャルx ロゴ

2022年4月19日、Neil Maddenは、Oracle Java 15から18、およびOpenJDK 15、17、18における脆弱性を公開しました。この脆弱性は、ECDSA署名の暗号にあり、攻撃者はこれらの署名の署名チェックを完全にバイパスすることが可能です。 

ECDSA署名があまり知られていないため、この脆弱性に関する見出しを目にしても、すぐに見過ごしてしまいがちです。しかし、ECDSA署名は、認証のような重要なタスクにおいて、インターネット上のシステムを保護する上で重要な役割を担っています。

詳細について説明する前に、ハッカーがどのようにサイキックシグネチャを悪用するのかを実際に体験してみたいという方は、無料のラボに直接アクセスしてみてください。無料のラボ(Missions)にアクセスし、ご自身で試してみてください。

ECDSAの何が問題なのか?

ECDSAという言葉を聞いたことがない人もいるかもしれない。Elliptic Curve Digital Signature Algorithmの略で、楕円曲線の数学的性質を利用した暗号の一種で、現時点では業界で最も強力な暗号のセキュリティを提供するものです。

というように、重要な機能に多く使われているということです。

  • SSL証明書の署名について
  • 暗号化通信時のハンドシェイク
  • サムル
  • JWT署名
  • OpenID Connectの署名

つまり、ECDSAはシステムを保護するための最も機密性の高い機能の多くで重要な役割を担っているのです。署名チェックを回避することができれば、非常に大きな被害を受ける可能性があります。

脆弱性はどのように悪用されるのですか?

ECDSAの数学は、残念ながらやや複雑です。しかし、知っておくべき重要なことは、ECDSA署名は2つの情報、すなわちrと sを含むということである。 

これらの数値は、署名の有効性を計算するために使用される。値rは、右辺のrと sの両方を使った計算の「結果」(左辺)である。0を掛けるのは良くないということから、ECDSAの仕様では、rや sの値が0になることがあれば、それらを破棄するように明示的に呼びかけている。 

しかし、ECDSAのJava実装はこれを考慮するのを忘れていた。そのため、rと sの両方が0である署名を受け入れることになり、これは常に真となる。JWTの例でこれを実証し、いかに簡単であるかを示しましょう。https://token.dev/ を使って、アプリケーションで生成されるのと同じような ES256 アルゴリズムのトークンを生成することができます。

アルゴES256で生成されたトークン

JWTは3つのパートに分かれていることを思い出してください。

  • ヘッダー(青字)
  • ペイロード(緑色の部分)
  • サイン(赤色)

さて、署名チェックを回避したい場合、どのようにすればよいのだろうか。署名はrとsの値を指定し、DER形式でエンコードされています。 

署名値のDERエンコード

この新しい署名を使用するようにJWTを変更しましょう。JWTでは、等号は含まれないことに注意してください。

DERエンコードされた署名を使用した新しいJWT

これで、署名のrと sが0に設定され、脆弱なバージョンのJavaでは、指定したペイロードに対して署名チェックが成功するようになりました。 

誰が影響を受けるのか、どう軽減するのか?

この脆弱性は、Oracle JavaとOpenJDKの両方に影響します。これらは以下の通りです。

Oracle Java SE(および旧バージョン、非サポート)。 

  • 18
  • 17.0.2

Oracle GraalVM Enterprise Editionです。 

  • 22.0.0.2
  • 21.3.1

OpenJDKです。

  • 18
  • 17.0.2
  • 15.0.6
  • 13.0.10
  • 11.0.14
  • 8u322
  • 7u331

Oracle社OpenJDK社ともに勧告を発表しており、すぐにでも適用可能なパッチがあります。 

本脆弱性に対する防御のためのハンズオンプラクティス

ここSecure Code Warrior では、サイキックシグネチャーのような最新の脆弱性から、何年も前から存在する脆弱性まで、重要な脆弱性に関する最も適切な情報と実践的な演習を開発者に提供するよう努力しています。

私たちは、リスクを真に抑えるには、開発者が防御メカニズムを理解し、最初から安全なコードを書けるようにすることが必要だと考えています。そのため、この脆弱性(および他の多くの脆弱性)の段階的なウォークスルーを作成し、あなたと影響を受けるチームのために提供しています。 

ウォークスルーでは、指示に従ってJWTのPhysic Signatureを悪用し、機能しているアプリへの影響をリアルタイムに確認することができます。

今すぐお試しください。

リソースを表示
リソースを表示

レポートをダウンロードするには、以下のフォームに記入してください

当社の製品および/または関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を常に細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、「アナリティクス」クッキーを有効にしてください。設定が完了したら、再度無効にしても構いません。

2022年4月19日、Neil Maddenは、Oracle Java 15から18、およびOpenJDK 15、17、18における脆弱性を公開しました。この脆弱性は、ECDSA署名の暗号にあり、攻撃者はこれらの署名の署名チェックを完全にバイパスすることが可能です。 

ECDSA署名があまり知られていないため、この脆弱性に関する見出しを目にしても、すぐに見過ごしてしまいがちです。しかし、ECDSA署名は、認証のような重要なタスクにおいて、インターネット上のシステムを保護する上で重要な役割を担っています。

詳細について説明する前に、ハッカーがどのようにサイキックシグネチャを悪用するのかを実際に体験してみたいという方は、無料のラボに直接アクセスしてみてください。無料のラボ(Missions)にアクセスし、ご自身で試してみてください。

ECDSAの何が問題なのか?

ECDSAという言葉を聞いたことがない人もいるかもしれない。Elliptic Curve Digital Signature Algorithmの略で、楕円曲線の数学的性質を利用した暗号の一種で、現時点では業界で最も強力な暗号のセキュリティを提供するものです。

というように、重要な機能に多く使われているということです。

  • SSL証明書の署名について
  • 暗号化通信時のハンドシェイク
  • サムル
  • JWT署名
  • OpenID Connectの署名

つまり、ECDSAはシステムを保護するための最も機密性の高い機能の多くで重要な役割を担っているのです。署名チェックを回避することができれば、非常に大きな被害を受ける可能性があります。

脆弱性はどのように悪用されるのですか?

ECDSAの数学は、残念ながらやや複雑です。しかし、知っておくべき重要なことは、ECDSA署名は2つの情報、すなわちrと sを含むということである。 

これらの数値は、署名の有効性を計算するために使用される。値rは、右辺のrと sの両方を使った計算の「結果」(左辺)である。0を掛けるのは良くないということから、ECDSAの仕様では、rや sの値が0になることがあれば、それらを破棄するように明示的に呼びかけている。 

しかし、ECDSAのJava実装はこれを考慮するのを忘れていた。そのため、rと sの両方が0である署名を受け入れることになり、これは常に真となる。JWTの例でこれを実証し、いかに簡単であるかを示しましょう。https://token.dev/ を使って、アプリケーションで生成されるのと同じような ES256 アルゴリズムのトークンを生成することができます。

アルゴES256で生成されたトークン

JWTは3つのパートに分かれていることを思い出してください。

  • ヘッダー(青字)
  • ペイロード(緑色の部分)
  • サイン(赤色)

さて、署名チェックを回避したい場合、どのようにすればよいのだろうか。署名はrとsの値を指定し、DER形式でエンコードされています。 

署名値のDERエンコード

この新しい署名を使用するようにJWTを変更しましょう。JWTでは、等号は含まれないことに注意してください。

DERエンコードされた署名を使用した新しいJWT

これで、署名のrと sが0に設定され、脆弱なバージョンのJavaでは、指定したペイロードに対して署名チェックが成功するようになりました。 

誰が影響を受けるのか、どう軽減するのか?

この脆弱性は、Oracle JavaとOpenJDKの両方に影響します。これらは以下の通りです。

Oracle Java SE(および旧バージョン、非サポート)。 

  • 18
  • 17.0.2

Oracle GraalVM Enterprise Editionです。 

  • 22.0.0.2
  • 21.3.1

OpenJDKです。

  • 18
  • 17.0.2
  • 15.0.6
  • 13.0.10
  • 11.0.14
  • 8u322
  • 7u331

Oracle社OpenJDK社ともに勧告を発表しており、すぐにでも適用可能なパッチがあります。 

本脆弱性に対する防御のためのハンズオンプラクティス

ここSecure Code Warrior では、サイキックシグネチャーのような最新の脆弱性から、何年も前から存在する脆弱性まで、重要な脆弱性に関する最も適切な情報と実践的な演習を開発者に提供するよう努力しています。

私たちは、リスクを真に抑えるには、開発者が防御メカニズムを理解し、最初から安全なコードを書けるようにすることが必要だと考えています。そのため、この脆弱性(および他の多くの脆弱性)の段階的なウォークスルーを作成し、あなたと影響を受けるチームのために提供しています。 

ウォークスルーでは、指示に従ってJWTのPhysic Signatureを悪用し、機能しているアプリへの影響をリアルタイムに確認することができます。

今すぐお試しください。

オンラインセミナーを見る
始めよう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする文化を築くお手伝いをします。アプリケーションセキュリティマネージャー、開発者、CISO、またはセキュリティ関係者であるかに関わらず、安全でないコードに関連するリスクを軽減するお手伝いをします。

レポートを表示デモを予約
PDFをダウンロード
リソースを表示
シェア:
リンクトインのブランドソーシャルx ロゴ
もっと興味がありますか?

シェア:
リンクトインのブランドソーシャルx ロゴ
著者
チャーリー・エリクセン
2022年4月27日発行

シェア:
リンクトインのブランドソーシャルx ロゴ

2022年4月19日、Neil Maddenは、Oracle Java 15から18、およびOpenJDK 15、17、18における脆弱性を公開しました。この脆弱性は、ECDSA署名の暗号にあり、攻撃者はこれらの署名の署名チェックを完全にバイパスすることが可能です。 

ECDSA署名があまり知られていないため、この脆弱性に関する見出しを目にしても、すぐに見過ごしてしまいがちです。しかし、ECDSA署名は、認証のような重要なタスクにおいて、インターネット上のシステムを保護する上で重要な役割を担っています。

詳細について説明する前に、ハッカーがどのようにサイキックシグネチャを悪用するのかを実際に体験してみたいという方は、無料のラボに直接アクセスしてみてください。無料のラボ(Missions)にアクセスし、ご自身で試してみてください。

ECDSAの何が問題なのか?

ECDSAという言葉を聞いたことがない人もいるかもしれない。Elliptic Curve Digital Signature Algorithmの略で、楕円曲線の数学的性質を利用した暗号の一種で、現時点では業界で最も強力な暗号のセキュリティを提供するものです。

というように、重要な機能に多く使われているということです。

  • SSL証明書の署名について
  • 暗号化通信時のハンドシェイク
  • サムル
  • JWT署名
  • OpenID Connectの署名

つまり、ECDSAはシステムを保護するための最も機密性の高い機能の多くで重要な役割を担っているのです。署名チェックを回避することができれば、非常に大きな被害を受ける可能性があります。

脆弱性はどのように悪用されるのですか?

ECDSAの数学は、残念ながらやや複雑です。しかし、知っておくべき重要なことは、ECDSA署名は2つの情報、すなわちrと sを含むということである。 

これらの数値は、署名の有効性を計算するために使用される。値rは、右辺のrと sの両方を使った計算の「結果」(左辺)である。0を掛けるのは良くないということから、ECDSAの仕様では、rや sの値が0になることがあれば、それらを破棄するように明示的に呼びかけている。 

しかし、ECDSAのJava実装はこれを考慮するのを忘れていた。そのため、rと sの両方が0である署名を受け入れることになり、これは常に真となる。JWTの例でこれを実証し、いかに簡単であるかを示しましょう。https://token.dev/ を使って、アプリケーションで生成されるのと同じような ES256 アルゴリズムのトークンを生成することができます。

アルゴES256で生成されたトークン

JWTは3つのパートに分かれていることを思い出してください。

  • ヘッダー(青字)
  • ペイロード(緑色の部分)
  • サイン(赤色)

さて、署名チェックを回避したい場合、どのようにすればよいのだろうか。署名はrとsの値を指定し、DER形式でエンコードされています。 

署名値のDERエンコード

この新しい署名を使用するようにJWTを変更しましょう。JWTでは、等号は含まれないことに注意してください。

DERエンコードされた署名を使用した新しいJWT

これで、署名のrと sが0に設定され、脆弱なバージョンのJavaでは、指定したペイロードに対して署名チェックが成功するようになりました。 

誰が影響を受けるのか、どう軽減するのか?

この脆弱性は、Oracle JavaとOpenJDKの両方に影響します。これらは以下の通りです。

Oracle Java SE(および旧バージョン、非サポート)。 

  • 18
  • 17.0.2

Oracle GraalVM Enterprise Editionです。 

  • 22.0.0.2
  • 21.3.1

OpenJDKです。

  • 18
  • 17.0.2
  • 15.0.6
  • 13.0.10
  • 11.0.14
  • 8u322
  • 7u331

Oracle社OpenJDK社ともに勧告を発表しており、すぐにでも適用可能なパッチがあります。 

本脆弱性に対する防御のためのハンズオンプラクティス

ここSecure Code Warrior では、サイキックシグネチャーのような最新の脆弱性から、何年も前から存在する脆弱性まで、重要な脆弱性に関する最も適切な情報と実践的な演習を開発者に提供するよう努力しています。

私たちは、リスクを真に抑えるには、開発者が防御メカニズムを理解し、最初から安全なコードを書けるようにすることが必要だと考えています。そのため、この脆弱性(および他の多くの脆弱性)の段階的なウォークスルーを作成し、あなたと影響を受けるチームのために提供しています。 

ウォークスルーでは、指示に従ってJWTのPhysic Signatureを悪用し、機能しているアプリへの影響をリアルタイムに確認することができます。

今すぐお試しください。

目次

PDFをダウンロード
リソースを表示
もっと興味がありますか?

もっと詳しく

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする文化を築くお手伝いをします。アプリケーションセキュリティマネージャー、開発者、CISO、またはセキュリティ関係者であるかに関わらず、安全でないコードに関連するリスクを軽減するお手伝いをします。

デモを予約[ダウンロード]
シェア:
リンクトインのブランドソーシャルx ロゴ
リソースハブ

始めるためのリソース

その他の投稿
リソースハブ

始めるためのリソース

その他の投稿