Suche senden
Hochladen
Apache Struts2 における任意の Java メソッド実行の脆弱性
•
4 gefällt mir
•
3,299 views
J
JPCERT Coordination Center
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 35
Empfohlen
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
ippei_suzuki
Mitsuo Fuchida - From Pearl Harbour to Calvary
Mitsuo Fuchida - From Pearl Harbour to Calvary
Peter Hammond
長期運用タイトルの GCP 移行実例とグレンジのこれから | Google Cloud INSIDE Games & Apps
長期運用タイトルの GCP 移行実例とグレンジのこれから | Google Cloud INSIDE Games & Apps
Google Cloud Platform - Japan
Drill超簡単チューニング
Drill超簡単チューニング
MapR Technologies Japan
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
Wat betekent-presentatie
Wat betekent-presentatie
Raymond Deef Vink
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
Moto Fukao
Philip Kotler
Philip Kotler
mvrkprasad
Empfohlen
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
ippei_suzuki
Mitsuo Fuchida - From Pearl Harbour to Calvary
Mitsuo Fuchida - From Pearl Harbour to Calvary
Peter Hammond
長期運用タイトルの GCP 移行実例とグレンジのこれから | Google Cloud INSIDE Games & Apps
長期運用タイトルの GCP 移行実例とグレンジのこれから | Google Cloud INSIDE Games & Apps
Google Cloud Platform - Japan
Drill超簡単チューニング
Drill超簡単チューニング
MapR Technologies Japan
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
Wat betekent-presentatie
Wat betekent-presentatie
Raymond Deef Vink
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
Moto Fukao
Philip Kotler
Philip Kotler
mvrkprasad
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
JPCERT Coordination Center
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
JPCERT Coordination Center
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
JPCERT Coordination Center
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JPCERT Coordination Center
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
JPCERT Coordination Center
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JPCERT Coordination Center
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
JPCERT Coordination Center
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
JPCERT Coordination Center
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
AdvancedTechNight
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Cve 2013-0422
Cve 2013-0422
abend_cve_9999_0001
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
Shotaro Suzuki
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
React Native GUIDE
React Native GUIDE
dcubeio
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
JPCERT Coordination Center
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
JPCERT Coordination Center
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
JPCERT Coordination Center
Weitere ähnliche Inhalte
Ähnlich wie Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
JPCERT Coordination Center
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
JPCERT Coordination Center
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
JPCERT Coordination Center
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JPCERT Coordination Center
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
JPCERT Coordination Center
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JPCERT Coordination Center
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
JPCERT Coordination Center
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
JPCERT Coordination Center
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
AdvancedTechNight
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Cve 2013-0422
Cve 2013-0422
abend_cve_9999_0001
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
Shotaro Suzuki
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
React Native GUIDE
React Native GUIDE
dcubeio
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
JPCERT Coordination Center
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
Ähnlich wie Apache Struts2 における任意の Java メソッド実行の脆弱性
(20)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
Java EE8 Report
Java EE8 Report
Cve 2013-0422
Cve 2013-0422
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
React Native GUIDE
React Native GUIDE
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
R5 3 type annotation
R5 3 type annotation
明日から使える Java SE 7
明日から使える Java SE 7
Mehr von 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
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
JPCERT Coordination Center
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
JPCERT Coordination Center
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
JPCERT Coordination Center
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
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
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
JPCERT Coordination Center
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
JPCERT Coordination Center
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
JPCERT Coordination Center
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
JPCERT Coordination Center
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
JPCERT Coordination Center
Android Secure Coding
Android Secure Coding
JPCERT Coordination Center
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
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
Mehr von JPCERT Coordination Center
(20)
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
Android Secure Coding
Android Secure Coding
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
Kürzlich hochgeladen
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Kürzlich hochgeladen
(10)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Apache Struts2 における任意の Java メソッド実行の脆弱性
1.
Copyright©2013 JPCERT/CC All
rights reserved. 「Javaアプリケーション脆弱性事例調査資料」について この資料は、Javaプログラマである皆様に、脆弱性を身 近な問題として感じてもらい、セキュアコーディングの 重要性を認識していただくことを目指して作成していま す。 「Javaセキュアコーディングスタンダード CERT/Oracle版」と合わせて、セキュアコーディングに 関する理解を深めるためにご利用ください。 JPCERTコーディネーションセンター セキュアコーディングプロジェクト secure-coding@jpcert.or.jp 1 Japan Computer Emergency Response Team Coordination Center 電子署名者 : Japan Computer Emergency Response Team Coordination Center DN : c=JP, st=Tokyo, l=Chiyoda-ku, email=office@jpcert.or.jp, o=Japan Computer Emergency Response Team Coordination Center, cn=Japan Computer Emergency Response Team Coordination Center 日付 : 2013.06.26 10:59:43 +09'00'
2.
Apache Struts 2
における任意の Java メソッド実行の脆弱性 CVE-2012-0838 JVNDB-2012-000012 2
3.
Copyright©2013 JPCERT/CC All
rights reserved. Apache Struts 2とは Java のWebアプリケーションを開発するための オープンソースのフレームワーク アプリケーションの開発効率やメンテナンス性 を向上させることを目的としている 3 Apache Struts2 JAVAアプリケーションWebサーバークライアント
4.
Copyright©2013 JPCERT/CC All
rights reserved. Apache Struts 2とは 4 • Model-View-Controller (MVC)アーキテクチャを 採用 • アプリケーションの開発者はModelとViewを実 装する。 Model: ビジネスロジックの実装 (javaで実装) View: 画面デザイン (jspで実装) Controller: クライアントからの入力イベントを処理し、ModelやViewに振り分ける(Struts2で実装) .jsp .javaクライアント Webサーバー
5.
Copyright©2013 JPCERT/CC All
rights reserved. 脆弱性の概要 —クライアントから送信されてきた文字列の処理で発生す るエラーの取り扱いに不備が存在。 —具体的には、数値型の変数に対して文字列が送信されて きた際に発生する変換エラー処理。 —送信する文字列を細工することで、任意のJavaメソッド が実行可能となる。 5
6.
Copyright©2013 JPCERT/CC All
rights reserved. 脆弱性が悪用された場合のリスク 任意のJavaメソッドが実行できるため、Runtime::exec メソッドを使えばOSコマンドを実行することが可能 アプリケーションの外部から、アプリケーションが稼働 するサーバ上で任意のコマンドが実行可能となり、サー バを乗っ取られる可能性がある 6 Runtime::exec() Webサーバ Javaメソッド 実行!!細工された文字列
7.
Copyright©2013 JPCERT/CC All
rights reserved. Struts2 内部で変換エラーが発生した場合の処理 7 ※Struts2付属のサンプルアプリ「showcase」を元に処理を解説する ① クライアントから、エラーの原因となる文字列を含むリクエストが送信 される。 ② Struts上で、文字列→数値に変換する際にエラーが発生し、エラー(例外) 処理を行う。 ③ エラー処理で、変換エラーの原因となった文字列が保持される。 ④ jsp側からエラーの原因となった文字列が取り出され、レスポンスの一部 としてクライアントへ送信される。 HelloWorld Long型 empId エラー値 HelloWorld .jsp エラー値 HelloWorld HelloWorld エラー empIdは数値です HelloWorld empId= HelloWorld ① ② ③ ④ クライアント エラー発生!
8.
Copyright©2013 JPCERT/CC All
rights reserved.8 private Long empId; : public Long getEmpId() { return empId; } : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : Javaファイル(Model) /showcase/action/EmployeeAction.java Jspファイル(View) /empmanager/editEmployee.jsp 変数empIdをModel(.java)か ら取得して表示する。 数値型(Long)の変数empId が存在し、クライアントか ら送信されたパラメータ empIdの値が格納される 数値型の変数empIdに対して文字列を送信するとエラーが発生する。 クライアントからのリクエスト サンプルアプリ「showcase」
9.
Copyright©2013 JPCERT/CC All
rights reserved. ①クライアントからエラーの原因となる文字列を含むリクエストが送信される 9 GET /?empId=HelloWorld HTTP/1.1 Host: localhost:8080 <form action=‘/’ method=‘GET’> : <input type=‘text’ name=‘empId’ value=‘HelloWorld’> : </form> HTTPリクエスト 上記HTTPリクエストを送信するためのHTML パラメータempIdの値と して”HelloWorld”とい う文字列を送信する。 (empIdはサーバ側では 数値型として扱われるこ とに注意。) empId= HelloWorld ① クライアント
10.
Copyright©2013 JPCERT/CC All
rights reserved. ②文字列→数値に変換する際にエラー発生、エラー(例外)処理を行う 10 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : クライアントから送信されてきたパラメータempIdの値”HelloWorld”を、 数値型変数empIdに対して挿入する際に変換エラーが発生し、エラー処理 が行われる。 変換エラー処理はConversionErrorInterceptorクラスのinterceptメソッド 内でエラー例外処理が行われる。 ConversionErrorInterceptor.java HelloWorld Long型 empId ②
11.
Copyright©2013 JPCERT/CC All
rights reserved. ③エラー処理で、変換エラーの原因となった文字列が保持される 11 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : String propertyName = (String) entry.getKey(); Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : ConversionErrorInterceptor.java エラーとなった変数名が <クラス名.変数名> という形式で取得され、変数 propertyNameに格納される。 currentEmployee.empId
12.
Copyright©2013 JPCERT/CC All
rights reserved.12 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : String propertyName = (String) entry.getKey(); Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : 変数valueには変換エラーとなっ た文字列の値が代入される。 “HelloWorld” ③エラー処理で、変換エラーの原因となった文字列が保持される ConversionErrorInterceptor.java
13.
Copyright©2013 JPCERT/CC All
rights reserved.13 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : String propertyName = (String) entry.getKey(); Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : protected Object getOverrideExpr(ActionInvocation invocation, Object value) { return "'" + value + "'"; } getOverrideExprメソッド getOverrideExprメソッドでは第2引数を’(シング ルクオート)で囲って返却する処理を行う “HelloWorld”‘HelloWorld’ ③エラー処理で、変換エラーの原因となった文字列が保持される ConversionErrorInterceptor.java
14.
Copyright©2013 JPCERT/CC All
rights reserved.14 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : String propertyName = (String) entry.getKey(); Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : getOverrideExpr関数を介した 後の値は、変数propertyName とセットでHashMap変数fakie に代入される。 fakie: currentEmployee.empId : ‘HelloWorld’ : currentEmployee.empId ‘HelloWorld’ ③エラー処理で、変換エラーの原因となった文字列が保持される ConversionErrorInterceptor.java
15.
Copyright©2013 JPCERT/CC All
rights reserved.15 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : fakie.put(propertyName, getOverrideExpr(invocation, value)); : invocation.getStack().setExprOverrides(fakie); public void setExprOverrides(Map overrides) { if (this.overrides == null) { this.overrides = overrides; } OgnlValueStack.java エラー値を含む変数fakieはOgnlValueStackクラス のインスタンス変数overridesとして保持される。 : currentEmployee.empId : ‘HelloWorld’ fakie fakie: currentEmployee.empId : ‘HelloWorld’ : ③エラー処理で、変換エラーの原因となった文字列が保持される ConversionErrorInterceptor.java
16.
Copyright©2013 JPCERT/CC All
rights reserved. ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する。 Jspに記述されたコード(OGNL式)にしたがって、変数empIdの値が 取得される。 OGNLとは ⇒Object-Graph Navigation Language (OGNL) OGNLはJavaのクラス(Model)の変数を設定/取得するための言語 サンプルコードのjspに記載されたOGNL式は、変数 currentEmployee.empIdの値を取得して表示をする式 下記のような表記で直接Javaメソッドを呼び出すことも可能 : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : Jspファイル(View) /empmanager/editEmployee.jsp <property name="roots">@java.io.File@listRoots()</property> 16
17.
Copyright©2013 JPCERT/CC All
rights reserved. ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する。 Jspに記述されたOGNL式にしたがって、OgnlValueStack.findValueメソッドを 経由して変数currentEmployee.empId の値(エラーとなった文字列)が取得される。 : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : Jspファイル(View) /empmanager/editEmployee.jsp public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } OgnlValueStack.java TextFieldTag.doEndTag() TextField.end() TextField.evaluateParams() TextField.findValue() TextParseUtil.translateVariables() TextParseUtil.translateVariables() TextParseUtil.translateVariables() OgnlValueStack.findValue() 経由する関数 currentEmployee.empId 17
18.
Copyright©2013 JPCERT/CC All
rights reserved. ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する。 : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } 前述の変数overridesから、変数expr とセットの値(エラーが発生する原因 となった文字列)がとりだされる。 ‘HelloWorld’ fakie ‘HelloWorld’ currentEmployee.empId : currentEmployee.empId : ‘HelloWorld’ 18 OgnlValueStack.java TextFieldTag.doEndTag() TextField.end() TextField.evaluateParams() TextField.findValue() TextParseUtil.translateVariables() TextParseUtil.translateVariables() TextParseUtil.translateVariables() OgnlValueStack.findValue() 経由する関数 Jspに記述されたOGNL式にしたがって、OgnlValueStack.findValueメソッドを 経由して変数currentEmployee.empId の値(エラーとなった文字列)が取得される。 Jspファイル(View) /empmanager/editEmployee.jsp
19.
Copyright©2013 JPCERT/CC All
rights reserved. ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する。 : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } 変数exprの値はOgnlUtil::getValueメ ソッドにてOGNL式として評価された 後にクライアントに返却される。 ‘HelloWorld’ fakie OGNL : currentEmployee.empId : ‘HelloWorld’ 文字列’HelloWorld’はOGNL式として意 味を持たないため、’HelloWorld’のまま 19 TextFieldTag.doEndTag() TextField.end() TextField.evaluateParams() TextField.findValue() TextParseUtil.translateVariables() TextParseUtil.translateVariables() TextParseUtil.translateVariables() OgnlValueStack.findValue() 経由する関数 OgnlValueStack.java Jspファイル(View) /empmanager/editEmployee.jsp Jspに記述されたOGNL式にしたがって、OgnlValueStack.findValueメソッドを 経由して変数currentEmployee.empId の値(エラーとなった文字列)が取得される。
20.
Copyright©2013 JPCERT/CC All
rights reserved. Javaファイル (Model) Jspファイル (View) Jspに記述されたOGNL式では、OgnlValueStack.findValueメソッドによって Java(Model)の処理結果を取得後、必ずOgnlUtil.getValueメソッドによって OGNL式による評価が行われる。 処理 OgnlUtil.getValueメソッ ドによるOGNL式の評価 Model(Java)による処理が・・・ • 正常処理の場合 → 正常値 • エラー処理の場合 → エラー値 が保持される クライアント 処理結果 処理後の値 OgnlValueStack.findValue() リクエスト Hello World Java(Model)側の処理後の値を取得後、 Java(Model)側の処理がエラーかどうかに関わ らず、必ずOGNL式として評価される。 ① ② ③ 20 ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する。
21.
Copyright©2013 JPCERT/CC All
rights reserved. ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライ アントへ送信する 21 レスポンスがクライアントに返される。 クライアント上ではエラーメッセージが表示される。
22.
Copyright©2013 JPCERT/CC All
rights reserved. 攻撃コード 22 ■攻撃コードのポイント パラメーターempIdに対し、JavaメソッドであるgetRuntime.execでコマンドを 実行するOGNL式を指定している。 GET /?empId='%2B@java.lang.Runtime@getRuntime().exec(“notepad.exe")%2B' HTTP/1.1 Host: localhost:8080 <form action=‘/’ method=‘GET’> : <input type=‘hidden’ name=‘empId’ value="'+@java.lang.Runtime@getRuntime().exec("notepad.exe")+'"> : </form> 攻撃コードのHTTPリクエスト 攻撃コードのHTTPリクエストを送信するためのHTML
23.
Copyright©2013 JPCERT/CC All
rights reserved. 変換エラーが発生した際の処理フロー ※Struts2に付属しているサンプルアプリ「showcase」を元に処理を解説する ① クライアントから、エラーの原因となる文字列を含むリクエストが送信 される。 ② Struts上で、文字列→数値に変換する際にエラーが発生し、エラー(例 外)処理を行う。 ③ エラー処理で、変換エラーの原因となった文字列が保持される。 ④ Jsp側からエラーの原因となった文字列が取り出され、レスポンスの一部 としてクライアントへ送信される。 攻撃コードが実行された際の処理 23 攻撃コードが実行された際でも処理のフローは正常処理と全く変わらないが、 ④の処理内容で違いが発生する。
24.
Copyright©2013 JPCERT/CC All
rights reserved. 攻撃コード実行時 ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライアントへ送信する Jspの内容にしたがって、変数empIdの値が取得され、エラーの原因となった 文字列が返されるが・・・ : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } OgnlValueStack.java 前述の変数overridesから、エラー が発生した原因となる文字列が変 数exprにとりだされる。 : fakie '+@java.lang.Runtime@getRuntime().exec(“notepad.exe")+' 24 Jspファイル(View) /empmanager/editEmployee.jsp
25.
Copyright©2013 JPCERT/CC All
rights reserved. 25 public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } 変数exprがOGNL式として評 価される際にJavaメソッ ドが実行されてしまう!! '+@java.lang.Runtime@getRuntime().exec(“notepad.exe")+' 25 OgnlValueStack.java : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : 攻撃コード実行時 ④Jsp側からエラーの文字列が取り出され、レスポンスとしてクライアントへ送信する Jspの内容にしたがって、変数empIdの値が取得され、エラーの原因となった 文字列が返されるが・・・ Jspファイル(View) /empmanager/editEmployee.jsp
26.
Copyright©2013 JPCERT/CC All
rights reserved. 問題点 今回のアプリケーションにおける具体的な問題点 引数をOGNL式として評価するOgnlUtil::getValueメソッドに 対し、無害化していないデータを渡してしまっていた。 26 以下のコーディングガイドに違反している!! 「 IDS00-J. 信頼境界を越えて渡される信頼できないデータは無 害化する」 問題点に対してどうすべきだったか。 OgnlUtil::getValueメソッドの引数として渡す前に、データが OGNL式として解釈されないように無害化する必要があった。
27.
Copyright©2013 JPCERT/CC All
rights reserved. 変換エラーが発生した際の処理フロー ※Struts2付属のサンプルアプリ「showcase」を元に処理を解説する ① クライアントから、エラーの原因となる文字列を含むリクエストが送信 される。 ② Struts上で、文字列→数値に変換する際にエラーが発生し、エラー(例 外)処理を行う。 ③ エラー処理で、変換エラーの原因となった文字列が保持される。 ④ Jsp側からエラーの原因となった文字列が取り出され、レスポンスの一部 としてクライアントへ送信される。 修正版コード: バージョン2.2.3.1で修正 27 この処理のコードに修正が入っている HelloWorld Long型 empId エラー値 HelloWorld .jsp エラー値 HelloWorld HelloWorld エラー empIdは数値です HelloWorld empId= HelloWorld ① ② ③ ④
28.
Copyright©2013 JPCERT/CC All
rights reserved. 修正版コード: 脆弱バージョンのおさらい 28 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : ConversionErrorInterceptor.java 変数valueには変換エ ラーとなった入力値が代 入される。 “HelloWorld” ③エラー処理で、変換エラーの原因となった文字列が保持される
29.
Copyright©2013 JPCERT/CC All
rights reserved.29 public class ConversionErrorInterceptor extends AbstractInterceptor { : public String intercept(ActionInvocation invocation) throws Exception { : HashMap<Object, Object> fakie = null; : Object value = entry.getValue(); : fakie.put(propertyName, getOverrideExpr(invocation, value)); : protected Object getOverrideExpr(ActionInvocation invocation, Object value) { return "'" + value + "'"; } 変数valueは getOverrideExpr関数を 介してHashMap変数 fakieに代入される。 getOverrideExprメソッド getOverrideExprメソッドでは第2引数を’(シン グルクオート)で囲って返却する処理を行う “HelloWorld”fakie: ‘HelloWorld’ : 修正版コードではgetOverrideExprメソッドに修正が加えられている。 ConversionErrorInterceptor.java 修正版コード: 脆弱バージョンのおさらい ③エラー処理で、変換エラーの原因となった文字列が保持される
30.
Copyright©2013 JPCERT/CC All
rights reserved. 修正版コード: getOverrideExprメソッドの修正内容 30 protected Object getOverrideExpr(ActionInvocation invocation, Object value) { return "'" + value + "'"; } getOverrideExprメソッド(修正前) protected Object getOverrideExpr(ActionInvocation invocation, Object value) { return "¥"" + StringEscapeUtils.escapeJava(String.valueOf(value)) + "¥""; } getOverrideExprメソッド(修正後) StringEscapeUtils.escapeJavaメソッドを 使ってエスケープ処理を行っている。 getOverrideExprメソッドでは第2引数を’(シン グルクオート)で囲って返却する処理を行う ③エラー処理で、変換エラーの原因となった文字列が保持される
31.
Copyright©2013 JPCERT/CC All
rights reserved. 修正版コード: StringEscapeUtils.escapeJavaメソッドによるエスケープ 31 • StringEscapeUtils.escapeJavaメソッドによるエスケープ処理 エスケープ対象文字列 エスケープ処理後の文字列 ¥b ¥¥b ¥n ¥¥n ¥t ¥¥t ¥f ¥¥f ¥r ¥¥r ‘(シングルクオート) ¥’ “(ダブルクオート) ¥” ¥ ¥¥ / ¥/ ■攻撃コードで送信される値がエスケープされると・・・・ '%2B@java.lang.Runtime@getRuntime().exec(“notepad.exe")%2B' ↓ ¥'%2B@java.lang.Runtime@getRuntime().exec(¥“notepad.exe¥")%2B¥' ⇒OGNL式として解釈されない文字列にエスケープされる。
32.
Copyright©2013 JPCERT/CC All
rights reserved. 修正版コード: エスケープ実施後のOgnlUtil::getValueメソッドの動作 32 : : <s:textfield label="Employee Id" name="currentEmployee.empId"/> : public Object findValue(String expr, Class asType) { : if ((overrides != null) && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); : Object value = OgnlUtil.getValue(expr, context, root, asType); : } OgnlValueStack.java 変数exprはエスケープされて いるため、OGNL式として評 価されてもJavaメソッドは 実行されない ¥'+@java.lang.Runtime@getRuntime().exec(¥“notepad.exe¥")+¥' StringEscapeUtils::escapeJavaメソッドでエスケープされた値を OgnlUtil::getValueメソッドの引数として渡すことで、OGNL式として評 価されてもJavaメソッドは実行されなくなる。 32 Jspファイル(View) /empmanager/editEmployee.jsp
33.
Copyright©2013 JPCERT/CC All
rights reserved. 補足 今回は数値型への変換エラーの際の処理であったが、そ れ以外のエラー処理にも同様の脆弱性が存在する可能性 がある。 Struts2の脆弱性でありながら、その上で動くJAVAアプ リケーションの仕様によって影響を受けるかどうかが変 わる 33
34.
Copyright©2013 JPCERT/CC All
rights reserved. まとめ 34 ■この脆弱性から学べるプログラミングの注意点 • SQLクエリやHTMLなど、異なる処理系にデータを出力 する際には、出力先の処理を考慮した無害化が必要 • 無害化を実施しないとSQLインジェクションやクロスサ イトスクリプティング等の脆弱性が発生する • 今回はOGNL式にデータを渡す際に、OGNL式として解 釈されないような無害化処理を実施していなかったため、 脆弱性が発生した ■上記への対策 •データを出力する際には、出力先でデータがどのように 解釈されるかを確認する •出力先でデータが意図しない解釈をされないように適切 な無害化を行う
35.
Copyright©2013 JPCERT/CC All
rights reserved. 著作権・引用や二次利用について 本資料の著作権はJPCERT/CCに帰属します。 本資料あるいはその一部を引用・転載・再配布する際は、引用元名、資料名および URL の明示をお 願いします。 記載例 引用元:一般社団法人JPCERTコーディネーションセンター Java アプリケーション脆弱性事例解説資料 Apache Strus2 における任意の Java メソッド実行の脆弱性 https://www.jpcert.or.jp/research/materials-java-casestudies/No.2_Apache_Struts2.pdf 本資料を引用・転載・再配布をする際は、引用先文書、時期、内容等の情報を、JPCERT コーディ ネーションセンター広報(office@jpcert.or.jp)までメールにてお知らせください。なお、この連絡に より取得した個人情報は、別途定めるJPCERT コーディネーションセンターの「プライバシーポリ シー」に則って取り扱います。 本資料の利用方法等に関するお問い合わせ JPCERTコーディネーションセンター 広報担当 E-mail:office@jpcert.or.jp 35 本資料の技術的な内容に関するお問い合わせ JPCERTコーディネーションセンター セキュアコーディング担当 E-mail:secure-coding@jpcert.or.jp