SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
Javaのデシリアライズに潜むセキュリティ問題

Apache Commons Collectionsの脆弱性解説

Javaのデシリアライズに潜むセキュリティ問題(前編)

  • X ポスト
  • このエントリーをはてなブックマークに追加

 2015年11月にApache Commons Collectionsのデシアライズ実装に由来する脆弱性が大きな話題となった。本稿では、本問題を正しく理解し本質的な対応を取れるように、問題の概要や攻撃の仕組みについて技術解説を行う。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 11月、Foxglove Securityの研究者が、Apache Software Foundationが提供するJavaライブラリCommons Collectionsを使用して、同ライブラリを同梱しているアプリケーションサーバを攻撃する手法をインターネットで公開した。

 Commons Collectionsライブラリは、WebSphere、WebLogic、JBossなどのアプリケーションサーバの他、Javaアプリケーションで広く利用されており、本脆弱性は大きな話題となった。Java開発者の方であれば、すでに耳にしていらっしゃることだろう。

 本件は、本質的にはライブラリの利用者側がデシリアライズ処理をセキュアに実装していないことに起因し、単にライブラリの修正プログラムを適用するだけでは、根本的な対処とならない。

 本記事では、開発者の皆さまが本問題を正しく理解して、本質的な対策をとっていただけるよう、問題や攻撃の仕組みについて技術解説する。

問題の概要

 概要については、さまざまな記事になっているためご存じかと思うが、オブジェクトのデシリアライズ時に任意のコードを実行できてしまうという問題である。詳細についてはJVNVUなどを参照いただきたいが、影響を受ける条件は、以下2点である。

  • Commons Collectionsライブラリ v3系またはv4系がクラスパス上に存在すること
  • シリアライズされたオブジェクトを外部から受けとっていること

 注意すべきは、明示的にCommons CollectionsライブラリのAPIを使っていなくても、ライブラリがクラスパス上に存在するだけで影響を受ける点だ。理由については後述する。

 攻撃者は、細工したオブジェクトをシリアライズして前記条件を満たすアプリケーションなどに送信することで、受信側のサーバ上で任意のコードを実行することができる。シリアライズされたオブジェクトを受け取るサービスがインターネットからアクセス可能な場合は、遠隔から攻撃が可能である。

 攻撃の仕組みを解説する前に、まずは本問題を説明する上でキーとなるシリアライズ、デシリアライズについて簡単に説明しよう。

シリアライズ・デシリアライズとは

 シリアライズとは、プログラムで扱うオブジェクトの状態を保持したまま送受信したり、ファイルへ読み書きを行ったりするために、オブジェクトをバイト列などに変換することである。デシリアライズはその逆だ。シリアライズ時には、対象オブジェクトから参照されているオブジェクトもまたシリアライズ対象となる。ポイントは、デシリアライズ時にデシリアライズ対象クラスが実装しているreadObjectメソッドが実行されるところにある。対象オブジェクトから別のオブジェクトを参照している場合は、各オブジェクトのreadObjectメソッドが順次実行され、オブジェクトが復元される。

図1 シリアライズ・デシリアライズ処理
図1 シリアライズ・デシリアライズ処理

 攻撃者はこれを悪用し、readObjectメソッドが実行された際にRuntime.exec()などを使ってOSコマンドなどを実行するように細工する。

 それでは、攻撃の仕組みについて詳しく見ていこう。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
問題の詳細と攻撃の仕組み

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaのデシリアライズに潜むセキュリティ問題連載記事一覧

もっと読む

この記事の著者

藤本 万里子(JPCERT コーディネーションセンター)(フジモト マリコ)

一般社団法人JPCERTコーディネーションセンター 早期警戒グループ 情報セキュリティアナリスト。前職では、国内企業においてソフトウエアの開発や内部統制のためのシステム開発等を担当。 2015年4月、JPCERTコーディネーションセンター早期警戒グループに情報セキュリティアナリストとして着任。主に国...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9150 2015/12/11 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  1. 6
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  2. 7
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  6. 6
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  7. 7
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  1. 6
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  2. 7
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  6. 6
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  7. 7
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!