SlideShare une entreprise Scribd logo
1  sur  65
Télécharger pour lire hors ligne
Android Platform の
URLConnection クラスに
HTTP ヘッダインジェクション
の脆弱性
JPCERT コーディネーションセンター
情報流通対策グループ
佐藤 裕二
Copyright©2016 JPCERT/CC All rights reserved.
目次
1
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱な URLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android バージョン
Copyright©2016 JPCERT/CC All rights reserved.
目次
2
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
前半 - 脆弱性の調査
3
Copyright©2016 JPCERT/CC All rights reserved.
目次
4
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱なURLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android バージョン
Copyright©2016 JPCERT/CC All rights reserved.
脆弱性調査の経緯
5
Apache Cordova プラグイン cordova-plugin-file-transfer
における HTTP ヘッダインジェクションの脆弱性
—https://jvn.jp/jp/JVN21612597/
上記の Apache Cordova プラグインの脆弱性報告者であ
る西村 宗晃 氏より、脆弱性の根本原因は Apache
Cordova プラグインではなく、Android Platform の Java
標準API の URLConnection クラスにあるとの追加報告
を受けた
Copyright©2016 JPCERT/CC All rights reserved.
JPCERT/CC の調査と調整
6
西村氏からの脆弱性報告をもとに Android Platform の
URLConnection クラスの 脆弱性を調査した
Android Security Team とアドバイザリ公開に向けた調整
を実施した (JVNVU#99757346)
—https://jvn.jp/vu/JVNVU99757346/index.html
Android Security Team から将来の Android バージョンで
の修正が明言された
—既存 Android バージョンへの対応は言及なし
—Android Security Team からの返信内容
Hi,
I discussed this with our engineering team and the fix in AOSP is here:
https://android-review.googlesource.com/#/c/171350/1
This will be part of a future release (most likely Android 7) and not part
of Android 6 or below.
Copyright©2016 JPCERT/CC All rights reserved.
目次
7
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱な URLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android のバージョン
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダインジェクションの概要
8
安全なウェブサイトの作り方
—http://www.ipa.go.jp/files/000017316.pdf
 ウェブアプリケーションの中には、リクエストに対して出力する
HTTP レスポンスヘッダのフィールド値を、外部から渡されるパラ
メータの値等を利用して動的に生成するものがあります。
 たとえば、HTTP リダイレクションの実装として、パラメータから
取得したジャンプ先の URL 情報を、Location ヘッダのフィールド
値に使用する場合や、掲示板等において入力された名前等を Set-
Cookie ヘッダのフィールド値に使用する場合等が挙げられます。
 このようなウェブアプリケーションで、HTTP レスポンスヘッダの
出力処理に問題がある場合、攻撃者は、レスポンス内容に任意の
ヘッダフィールドを追加したり、任意のボディを作成したり、複数
のレスポンスを作り出すような攻撃を仕掛ける場合があります。
 このような問題を「HTTP ヘッダ・インジェクションの脆弱性」と
呼び、この問題を悪用した攻撃手法は「HTTP ヘッダ・インジェク
ション攻撃」と呼びます。
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダインジェクションの概要
9
Copyright©2016 JPCERT/CC All rights reserved.
目次
10
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱な URLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android バージョン
Copyright©2016 JPCERT/CC All rights reserved.
脆弱な URLConnection クラス
11
脆弱な URLConnection クラス
—http://developer.android.com/intl/ja/reference/java/net/URL
Connection.html
—A connection to a URL for reading or writing. For HTTP
connections, see HttpURLConnection for documentation of
HTTP-specific features.
Copyright©2016 JPCERT/CC All rights reserved.
脆弱な URLConnection クラス
12
脆弱性なメソッド
—public void addRequestProperty (String field, String newValue)
 Adds the given property to the request header. Existing properties
with the same name will not be overwritten by this method.
—public void setRequestProperty (String field, String newValue)
 Sets the value of the specified request header field. The value will
only be used by the current URLConnection instance. This method
can only be called before the connection is established.
HTTP ヘッダを設定するクラスのメソッド
で引数の入力値検査を行っていないため、
改行コードを注入可能な脆弱性を持つ
※ 以下、addRequestProperty() は冗長なので記載を省く
Copyright©2016 JPCERT/CC All rights reserved.
目次
13
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱な URLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android バージョン
Copyright©2016 JPCERT/CC All rights reserved.
Proof of Concept code
14
・改行コード による意図しない改行の挿入
この例では開発者が意図しない改行コードと
Cookie の値を設定するコードを挿入
・入力値検査を行っていない脆弱なクラスメソッド
入力値検査を行っていないため、意図しない Cookie
を設定されてしまう
Copyright©2016 JPCERT/CC All rights reserved.
目次
15
前半 – 脆弱性の調査
—脆弱性調査の経緯
—HTTP ヘッダインジェクションの概要
—脆弱な URLConnection クラス
—Proof of Concept code
—脆弱性の影響を受ける Android バージョン
Copyright©2016 JPCERT/CC All rights reserved.
脆弱性の影響を受ける Android バージョン
16
影響範囲の調査
—Android 2.3.3 ~ 6.0 (エミュレータ) で検証コードの動作確認を
実施した (実行結果のスクリーンショットは次々ページ)
—Obsolete 扱いの Android バージョンは対象外
バージョン ニックネーム API Level
2.3.3 Gingerbread 10
4.0.3 IceCreamSandwich 15
4.3.1 Jelly Bean 18
4.4.2 KitKat 19
5.1.1 Lollipop 22
6.0 Marshmallow 23
Copyright©2016 JPCERT/CC All rights reserved.
影響範囲調査の結果
17
6.0 まで全ての Android バージョンが影響を受ける
—脆弱性報告のとおり Android Platform の URLConnection クラス
に HTTP ヘッダインジェクションの脆弱性がある
OpenJDK や OracleJDK では改行コードを挿入しようと
すると例外がスローされ、脆弱性は存在しなかった
—OracleJDK バージョン : “1.8.0_72” で確認
Copyright©2016 JPCERT/CC All rights reserved.
検証コード実行結果のスクリーンショット
18
Android 2.3.3 Gingerbread (API Level 10)
Android 4.0.3 IceCreamSandwich (API Level 15)
Copyright©2016 JPCERT/CC All rights reserved.
検証コード実行結果のスクリーンショット
19
Android 4.3.1 Jelly Bean (API Level 18)
Android 4.4.2 KitKat (API Level 19)
Copyright©2016 JPCERT/CC All rights reserved.
検証コード実行結果のスクリーンショット
20
Android 5.1.1 Lollipop (API Level 22)
Android 6.0 Marshmallow (API Level 23)
Copyright©2016 JPCERT/CC All rights reserved.
後半 - ソースコードの詳細調査
21
Copyright©2016 JPCERT/CC All rights reserved.
前半 – 脆弱性の調査を踏まえ
Android Platform の URLConnection クラスにどのよう
な問題があり、どのように修正されたのかを確認した
22
Copyright©2016 JPCERT/CC All rights reserved.
目次
23
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
Android Platform が提供している Java 実行環境
24
中身は他のオープンソースから移植や独自実装が混在
URLConnection クラスは Android バージョンにより実装
が異なる (詳細は次ページ)
Oracle
Java
Google Android
Java
OpenJDK (リファレンス)
Java
Apache Harmony etc
JAVA
ほぼ同一実装 オープンソースから移植
or 独自実装
Apache Harmony etc
Java
Copyright©2016 JPCERT/CC All rights reserved.
Android Platform の URLConnection クラス
25
Android バージョンによる実装の違い
Android 2.2 ~
Apache Harmony
Android 4.4.2~
OkHttp
Android 4.0.3 ~
独自実装?
標準 API 準拠の抽象クラス
Copyright©2016 JPCERT/CC All rights reserved.
Android Platform の URLConnection クラス
26
Android バージョンによる実装の違い
Android 2.2 ~
Apache Harmony
Android 4.4.2~
OkHttp
Android 4.0.3 ~
独自実装?
標準 API 準拠の抽象クラス
デザインパターン? Strategy?
いえいえ、ベタっと実装してますちょっと読みづらい
全ての Android バージョンの
URLConnection クラスの実装で脆弱性が
存在している Apache Harmony も OkHttp も同じ脆弱性を持っていたんですね
これらを踏まえて URLConnection クラス
の実装を確認してみましょう
Copyright©2016 JPCERT/CC All rights reserved.
目次
27
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
正しい URLConnection の実装 (OpenJDK)
28
脆弱性を持つ Android Platform の URLConnection クラ
スを確認する前に、脆弱性のない Java のリファレンス
実装である OpenJDK の正しい実装を確認する
—URLConnection クラスと関連クラス図
—HTTP ヘッダを設定する処理のシーケンス図
—HTTP ヘッダ設定時に実施される入力値検査
—RFC との整合性
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図
29
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図 (抽象クラス)
30
アプリケーションの
実装者が扱う抽象クラス
(Java 標準 API 準拠)
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図 (実装クラス)
31
Java 標準 API の URLConnection クラスを
継承し setRequestProperty() を実装している
HttpURLConnection クラス
HTTP ヘッダのキーと
値を保持するクラス
Sun のパッケージって残ってたんですね
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダを設定する処理のシーケンス図
32
HttpURLConnection.checkMessageHeader() で改行
コードの入力値検査を行っている
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
33
改行コード LF (‘n’) の後が
スペースまたは水平タブなら OK
条件を満たさなければ
IllegalArgumentException を
スローする実装になっている
Copyright©2016 JPCERT/CC All rights reserved.
RFC との整合性
34
改行コード LF (‘n’) の後がスペースまたは水平タブなら
OK
— RFC2616 で定義されている内容と一致する
 RFC 2616 とは
Copyright©2016 JPCERT/CC All rights reserved.
RFC 2616 (2.2 Basic Rule)
35
RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1 June
1999
—https://www.ietf.org/rfc/rfc2616.txt
—1999 年に RFC で公開された HTTP 1.1 の仕様
—改行コードの扱いは 2.2 Basic Rule で定義
改行コード後のスペースと水平タブを許可
いわゆる「継続行」を許可している
Copyright©2016 JPCERT/CC All rights reserved.
RFC 2616 から RFC 723x へ
36
RCF 2616 Obsoleted by RFC 7230, RFC 7231, RFC
7232, RFC 7233, RFC 7234 and RFC7235
2014年に HTTP に関する RFC が更新
—RFC7230 HTTP/1.1 Message Syntax and Routing
—RFC7231 HTTP/1.1 Semantics and Content
—RFC7232 HTTP/1.1 Conditional Requests
—RFC7233 HTTP/1.1 Range Requests
—RFC7234 HTTP/1.1 Caching
—RFC7235 HTTP/1.1 Authentication
 改行コードや LWS の扱いはどう変わったか?
Copyright©2016 JPCERT/CC All rights reserved.
RFC 7230 (3.2 Header Fields)
37
RFC 7230 HTTP/1.1 Message Syntax and Routing June
2014
—https://www.ietf.org/rfc/rfc7230.txt
—3.2 Header Fields
改行後のスペースと水平タブも禁止に
つまり継続行は廃止された
Copyright©2016 JPCERT/CC All rights reserved.
RFC 7230 (3.2.4 Field Parsing)
38
RFC 7230 HTTP/1.1 Message Syntax and Routing June
2014
—https://www.ietf.org/rfc/rfc7230.txt
—3.2.4 Field Parsing
全面的に継続行の廃止ではなく、例外として
message / http media type では有効となっている
Copyright©2016 JPCERT/CC All rights reserved.
OpenJDK の URLConnection クラスの実装まとめ
39
RFC 2616 に準拠した実装になっている
改行コード後にスペースか水平タブ以外の値を設定する
と例外 (IllegalArgumentException) をスローする
 Android Platform の URLConnection クラスではどうなっ
ているのか?
Copyright©2016 JPCERT/CC All rights reserved.
目次
40
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
脆弱な URLConnection クラスの実装
41
Android Platform の 脆弱な URLConnection クラスの実
装を確認する
本稿では Android 6.0 を対象に実装の確認を行う
—Android バージョンによる実装の違い
—URLConnection クラスと関連クラス図
—HTTP ヘッダを設定する処理のシーケンス図
—HTTP ヘッダ設定時に実施される入力値検査
—RFC との整合性
Copyright©2016 JPCERT/CC All rights reserved.
Android バージョンによる実装の違い
42
Android 6.0 では OkHttp のソースコードを使用している
Android 2.2 ~
Apache Harmony
Android 4.4.2~
OkHttp
Android 4.0.3 ~
独自実装?
標準 API 準拠の抽象クラス
Android 6.0 では OkHttp のソースコードが使用されている
しかし取り込んだバージョンの OkHttpに HTTP ヘッダイン
ジェクションの脆弱性が存在した
Copyright©2016 JPCERT/CC All rights reserved.
OkHttp とは
43
OkHttp
—http://square.github.io/okhttp/
—Apache License, Version 2.0 の HTTP & HTTP/2 クライア
ントライブラリ
—Android Platform の URLConnection の実装に OkHttp
(version 2.5 より前) のソースコードが取り込まれている
 Andorid 6.0 の URLConnection クラスの実装 (OkHttp か
ら取り込んだ実装)を示す
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図
44
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図 (抽象クラス)
45
アプリケーションの
実装者が扱う抽象クラス
(Java 標準 API 準拠)
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図 (実装クラス)
46
HTTP ヘッダのキーと
値を保持するクラス
Java 標準 API の URLConnection クラスを
継承し setRequestProperty() を実装している
HttpURLConnectionImp クラス
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダを設定する処理のシーケンス図
47
Android Platform では HTTP ヘッダの設定に関わる全て
のクラスとメソッドで入力値検査をしていないのか?
これらのクラスとメソッドで入力値検査をしているか確認した
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
48
]
引数に対する Null Check はされているが・・・
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
49
内部メソッドを呼び出してるだけ
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
50
ヘッダフィールド名が既に存在していたら上書き
配列の偶数要素がフィールド名で、奇数要素が値・・・
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
51
2度目の Null Check をしているが、改行コードが含まれるか
入力値検査は行われていない
Copyright©2016 JPCERT/CC All rights reserved.
RFC との整合性
52
Android Platform の URLConnection クラス
—RFC 2616 に準拠した入力値検査を実施していない
—また、RFC 7230 にも準拠していない
—OkHttp は version 2.5 で RFC 7230 に準拠した修正を
行いリリース済
Android Platform も OkHttp の修正を master ブランチに取り
込んだ
https://android.googlesource.com/platform/external/okhttp/+/7
1b9f47b26fb57ac3e436a19519c6e3ec70e86eb
 Android Platform の master ブランチでは、どのように修
正されたのか?
Copyright©2016 JPCERT/CC All rights reserved.
目次
53
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
修正された URLConnection クラスの実装
54
master ブランチに取り込まれた URLConnection クラス
の実装を確認する
—URLConnection クラスと関連クラス図
—HTTP ヘッダを設定する処理のシーケンス図
—HTTP ヘッダ設定時に実施される入力値検査
—RFC との整合性
Copyright©2016 JPCERT/CC All rights reserved.
URLConnection クラスと関連クラス図
55
checkNameAndValue() が追加された
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダを設定する処理のシーケンス図
56
checkNameAndValue() で入力値検査を実施
Copyright©2016 JPCERT/CC All rights reserved.
HTTP ヘッダ設定時に実施される入力値検査
57
HTTP ヘッダフィルード名、値ともにアスキーコードの
0x1f 以下、及び 0x7f 以上が含まれていたら
IllegalArgumentException をスローする
Copyright©2016 JPCERT/CC All rights reserved.
RFC との整合性
58
改行コードを含む制御文字が全て禁止され RFC 7230 に準拠した修
正が行われた
— IT 用語辞典 e-Words より ASCII 文字コード表を引用
— http://e-words.jp/p/r-ascii.html
修正で禁止された制御文字
Copyright©2016 JPCERT/CC All rights reserved.
目次
59
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
まとめ
60
誰が本脆弱性の影響を受けるか
—HTTP ヘッダフィールドを外部入力として受け取る
Android アプリ
対策
1. master ブランチの checkNameAndValue() を Android
アプリに移植して、HTTP ヘッダの入力値検査を行うよ
うに修正する (推奨)
2. 脆弱性が修正されている OkHttp version 2.5 以降を使い
アプリケーションを実装し直す (大変)
全ての開発者が注意すべきこと
—セキュアコーディングの原則として、信頼境界の外から受
け取るパラメータを信用せず入力値検査を行う
Copyright©2016 JPCERT/CC All rights reserved.
目次
61
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
参考情報
62
本稿では Android Platform の HTTP ヘッダインジェクションについて取り
上げたが、他言語・フレームワークでも同じ脆弱性が存在する可能性があ
る
PHP の HTTP ヘッダインジェクションについて、2015年に話題になった
ことがあるので参考までに紹介する
— 2015年 7月 寺田 健 氏 (三井物産セキュアディレクション株式会社)
 LWSとHTTPヘッダインジェクション
 https://www.mbsd.jp/blog/20150730.html
 「新RFCにより一転してPHP側の旗色が悪くなった訳ですが、PHPは比較的早くこの状
況に対処しました。具体的には、2015年2月のリリース(PHP 5.4.38, 5.5.22, 5.6.6)で、
LWSを含むヘッダをエラーとして出力できないようにする対処を行いました」
— 2015年 12月 徳丸 浩 氏 (HASHコンサルティング株式会社)
 PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る
 http://blog.tokumaru.org/2015/12/phphttp.html
 「HTTPヘッダインジェクション脆弱性対策については、一応はPHP側の責任と考えた
うえで、アプリケーション側でもヘッダ文字列のバリデーション等で対策をしておくこ
とを推奨します」
Copyright©2016 JPCERT/CC All rights reserved.
目次
63
後半 – ソースコードの詳細調査
—Android Platform が提供している Java 実行環境
—正しい URLConnection クラスの実装 (OpenJDK)
—脆弱な URLConnection クラスの実装 (Android 6.0)
—修正された URLConnection クラスの実装 (master ブランチ)
まとめ
参考情報
謝辞
Copyright©2016 JPCERT/CC All rights reserved.
謝辞
64
JVN#21612597 で公開された Apache Cordova に関する脆弱性の
報告者である、ソニーデジタルネットワークアプリケーションズ株
式会社の西村宗晃氏の追加調査により本脆弱性が存在する事が判明
しました。本脆弱性情報を JPCERT/CC に報告いただいた西村氏に
御礼申し上げます。

Contenu connexe

Tendances

Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)JPCERT Coordination Center
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)JPCERT Coordination Center
 
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesLessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesJPCERT Coordination Center
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性JPCERT Coordination Center
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JPCERT Coordination Center
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性JPCERT Coordination Center
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)JPCERT Coordination Center
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性JPCERT Coordination Center
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)JPCERT Coordination Center
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見Yosuke HASEGAWA
 
Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Masaru Horioka
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 
Klocwork 2017.1アップデート
Klocwork 2017.1アップデートKlocwork 2017.1アップデート
Klocwork 2017.1アップデートMasaru Horioka
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)Sen Ueno
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
第32回Websig会議「クラウドは○○を共有するサービス」
第32回Websig会議「クラウドは○○を共有するサービス」第32回Websig会議「クラウドは○○を共有するサービス」
第32回Websig会議「クラウドは○○を共有するサービス」Sen Ueno
 
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応Masaru Horioka
 

Tendances (20)

Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
 
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesLessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
 
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解くDLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
Klocwork 2017.1アップデート
Klocwork 2017.1アップデートKlocwork 2017.1アップデート
Klocwork 2017.1アップデート
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
第32回Websig会議「クラウドは○○を共有するサービス」
第32回Websig会議「クラウドは○○を共有するサービス」第32回Websig会議「クラウドは○○を共有するサービス」
第32回Websig会議「クラウドは○○を共有するサービス」
 
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
 

En vedette

ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JPCERT Coordination Center
 
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONJun Matsumoto
 
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲CODE BLUE
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性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...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
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたことSuzuki Masayuki
 
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話Akio Doi
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達zaki4649
 
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackteapipin
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったかHiroshi Tokumaru
 
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)Shinichi Hirauchi
 

En vedette (13)

脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
 
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
 
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
 
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
 
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
 

Similaire à Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性

Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC StackAlexandre Gouaillard
 
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API DragonJOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API DragonNaoto Gohko
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますfukuoka.ex
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)NGINX, Inc.
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud Platform - Japan
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!オラクルエンジニア通信
 
Spring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションSpring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションToshiaki Maki
 
Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介アシアル株式会社
 
Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01ozkan01
 
ストリーミングCDN2002
ストリーミングCDN2002ストリーミングCDN2002
ストリーミングCDN2002Masaaki Nabeshima
 
脆弱性スキャナVuls(応用編)
脆弱性スキャナVuls(応用編)脆弱性スキャナVuls(応用編)
脆弱性スキャナVuls(応用編)Takayuki Ushida
 
CometPub20070223
CometPub20070223CometPub20070223
CometPub20070223Hiroshi Ono
 
Osc2018 tokyo spring_scap
Osc2018 tokyo spring_scapOsc2018 tokyo spring_scap
Osc2018 tokyo spring_scapKazuki Omo
 
【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ 【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ Junji Nishihara
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナーkmiyako
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 

Similaire à Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性 (20)

Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC Stack
 
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API DragonJOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサ
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
 
Spring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションSpring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーション
 
Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介
 
Open contraildays2014
Open contraildays2014Open contraildays2014
Open contraildays2014
 
Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01
 
ストリーミングCDN2002
ストリーミングCDN2002ストリーミングCDN2002
ストリーミングCDN2002
 
脆弱性スキャナVuls(応用編)
脆弱性スキャナVuls(応用編)脆弱性スキャナVuls(応用編)
脆弱性スキャナVuls(応用編)
 
.NET Core 1.0
.NET Core 1.0.NET Core 1.0
.NET Core 1.0
 
CometPub20070223
CometPub20070223CometPub20070223
CometPub20070223
 
Osc2018 tokyo spring_scap
Osc2018 tokyo spring_scapOsc2018 tokyo spring_scap
Osc2018 tokyo spring_scap
 
【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ 【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナー
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 

Plus de JPCERT Coordination Center

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~JPCERT Coordination Center
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』JPCERT Coordination Center
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルJPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習JPCERT Coordination Center
 

Plus de JPCERT Coordination Center (8)

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
 
Android Secure Coding
Android Secure CodingAndroid Secure Coding
Android Secure Coding
 
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説
 
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
 
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
 

Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性

  • 1. Android Platform の URLConnection クラスに HTTP ヘッダインジェクション の脆弱性 JPCERT コーディネーションセンター 情報流通対策グループ 佐藤 裕二
  • 2. Copyright©2016 JPCERT/CC All rights reserved. 目次 1 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱な URLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android バージョン
  • 3. Copyright©2016 JPCERT/CC All rights reserved. 目次 2 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 4. Copyright©2016 JPCERT/CC All rights reserved. 前半 - 脆弱性の調査 3
  • 5. Copyright©2016 JPCERT/CC All rights reserved. 目次 4 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱なURLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android バージョン
  • 6. Copyright©2016 JPCERT/CC All rights reserved. 脆弱性調査の経緯 5 Apache Cordova プラグイン cordova-plugin-file-transfer における HTTP ヘッダインジェクションの脆弱性 —https://jvn.jp/jp/JVN21612597/ 上記の Apache Cordova プラグインの脆弱性報告者であ る西村 宗晃 氏より、脆弱性の根本原因は Apache Cordova プラグインではなく、Android Platform の Java 標準API の URLConnection クラスにあるとの追加報告 を受けた
  • 7. Copyright©2016 JPCERT/CC All rights reserved. JPCERT/CC の調査と調整 6 西村氏からの脆弱性報告をもとに Android Platform の URLConnection クラスの 脆弱性を調査した Android Security Team とアドバイザリ公開に向けた調整 を実施した (JVNVU#99757346) —https://jvn.jp/vu/JVNVU99757346/index.html Android Security Team から将来の Android バージョンで の修正が明言された —既存 Android バージョンへの対応は言及なし —Android Security Team からの返信内容 Hi, I discussed this with our engineering team and the fix in AOSP is here: https://android-review.googlesource.com/#/c/171350/1 This will be part of a future release (most likely Android 7) and not part of Android 6 or below.
  • 8. Copyright©2016 JPCERT/CC All rights reserved. 目次 7 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱な URLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android のバージョン
  • 9. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダインジェクションの概要 8 安全なウェブサイトの作り方 —http://www.ipa.go.jp/files/000017316.pdf  ウェブアプリケーションの中には、リクエストに対して出力する HTTP レスポンスヘッダのフィールド値を、外部から渡されるパラ メータの値等を利用して動的に生成するものがあります。  たとえば、HTTP リダイレクションの実装として、パラメータから 取得したジャンプ先の URL 情報を、Location ヘッダのフィールド 値に使用する場合や、掲示板等において入力された名前等を Set- Cookie ヘッダのフィールド値に使用する場合等が挙げられます。  このようなウェブアプリケーションで、HTTP レスポンスヘッダの 出力処理に問題がある場合、攻撃者は、レスポンス内容に任意の ヘッダフィールドを追加したり、任意のボディを作成したり、複数 のレスポンスを作り出すような攻撃を仕掛ける場合があります。  このような問題を「HTTP ヘッダ・インジェクションの脆弱性」と 呼び、この問題を悪用した攻撃手法は「HTTP ヘッダ・インジェク ション攻撃」と呼びます。
  • 10. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダインジェクションの概要 9
  • 11. Copyright©2016 JPCERT/CC All rights reserved. 目次 10 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱な URLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android バージョン
  • 12. Copyright©2016 JPCERT/CC All rights reserved. 脆弱な URLConnection クラス 11 脆弱な URLConnection クラス —http://developer.android.com/intl/ja/reference/java/net/URL Connection.html —A connection to a URL for reading or writing. For HTTP connections, see HttpURLConnection for documentation of HTTP-specific features.
  • 13. Copyright©2016 JPCERT/CC All rights reserved. 脆弱な URLConnection クラス 12 脆弱性なメソッド —public void addRequestProperty (String field, String newValue)  Adds the given property to the request header. Existing properties with the same name will not be overwritten by this method. —public void setRequestProperty (String field, String newValue)  Sets the value of the specified request header field. The value will only be used by the current URLConnection instance. This method can only be called before the connection is established. HTTP ヘッダを設定するクラスのメソッド で引数の入力値検査を行っていないため、 改行コードを注入可能な脆弱性を持つ ※ 以下、addRequestProperty() は冗長なので記載を省く
  • 14. Copyright©2016 JPCERT/CC All rights reserved. 目次 13 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱な URLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android バージョン
  • 15. Copyright©2016 JPCERT/CC All rights reserved. Proof of Concept code 14 ・改行コード による意図しない改行の挿入 この例では開発者が意図しない改行コードと Cookie の値を設定するコードを挿入 ・入力値検査を行っていない脆弱なクラスメソッド 入力値検査を行っていないため、意図しない Cookie を設定されてしまう
  • 16. Copyright©2016 JPCERT/CC All rights reserved. 目次 15 前半 – 脆弱性の調査 —脆弱性調査の経緯 —HTTP ヘッダインジェクションの概要 —脆弱な URLConnection クラス —Proof of Concept code —脆弱性の影響を受ける Android バージョン
  • 17. Copyright©2016 JPCERT/CC All rights reserved. 脆弱性の影響を受ける Android バージョン 16 影響範囲の調査 —Android 2.3.3 ~ 6.0 (エミュレータ) で検証コードの動作確認を 実施した (実行結果のスクリーンショットは次々ページ) —Obsolete 扱いの Android バージョンは対象外 バージョン ニックネーム API Level 2.3.3 Gingerbread 10 4.0.3 IceCreamSandwich 15 4.3.1 Jelly Bean 18 4.4.2 KitKat 19 5.1.1 Lollipop 22 6.0 Marshmallow 23
  • 18. Copyright©2016 JPCERT/CC All rights reserved. 影響範囲調査の結果 17 6.0 まで全ての Android バージョンが影響を受ける —脆弱性報告のとおり Android Platform の URLConnection クラス に HTTP ヘッダインジェクションの脆弱性がある OpenJDK や OracleJDK では改行コードを挿入しようと すると例外がスローされ、脆弱性は存在しなかった —OracleJDK バージョン : “1.8.0_72” で確認
  • 19. Copyright©2016 JPCERT/CC All rights reserved. 検証コード実行結果のスクリーンショット 18 Android 2.3.3 Gingerbread (API Level 10) Android 4.0.3 IceCreamSandwich (API Level 15)
  • 20. Copyright©2016 JPCERT/CC All rights reserved. 検証コード実行結果のスクリーンショット 19 Android 4.3.1 Jelly Bean (API Level 18) Android 4.4.2 KitKat (API Level 19)
  • 21. Copyright©2016 JPCERT/CC All rights reserved. 検証コード実行結果のスクリーンショット 20 Android 5.1.1 Lollipop (API Level 22) Android 6.0 Marshmallow (API Level 23)
  • 22. Copyright©2016 JPCERT/CC All rights reserved. 後半 - ソースコードの詳細調査 21
  • 23. Copyright©2016 JPCERT/CC All rights reserved. 前半 – 脆弱性の調査を踏まえ Android Platform の URLConnection クラスにどのよう な問題があり、どのように修正されたのかを確認した 22
  • 24. Copyright©2016 JPCERT/CC All rights reserved. 目次 23 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 25. Copyright©2016 JPCERT/CC All rights reserved. Android Platform が提供している Java 実行環境 24 中身は他のオープンソースから移植や独自実装が混在 URLConnection クラスは Android バージョンにより実装 が異なる (詳細は次ページ) Oracle Java Google Android Java OpenJDK (リファレンス) Java Apache Harmony etc JAVA ほぼ同一実装 オープンソースから移植 or 独自実装 Apache Harmony etc Java
  • 26. Copyright©2016 JPCERT/CC All rights reserved. Android Platform の URLConnection クラス 25 Android バージョンによる実装の違い Android 2.2 ~ Apache Harmony Android 4.4.2~ OkHttp Android 4.0.3 ~ 独自実装? 標準 API 準拠の抽象クラス
  • 27. Copyright©2016 JPCERT/CC All rights reserved. Android Platform の URLConnection クラス 26 Android バージョンによる実装の違い Android 2.2 ~ Apache Harmony Android 4.4.2~ OkHttp Android 4.0.3 ~ 独自実装? 標準 API 準拠の抽象クラス デザインパターン? Strategy? いえいえ、ベタっと実装してますちょっと読みづらい 全ての Android バージョンの URLConnection クラスの実装で脆弱性が 存在している Apache Harmony も OkHttp も同じ脆弱性を持っていたんですね これらを踏まえて URLConnection クラス の実装を確認してみましょう
  • 28. Copyright©2016 JPCERT/CC All rights reserved. 目次 27 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 29. Copyright©2016 JPCERT/CC All rights reserved. 正しい URLConnection の実装 (OpenJDK) 28 脆弱性を持つ Android Platform の URLConnection クラ スを確認する前に、脆弱性のない Java のリファレンス 実装である OpenJDK の正しい実装を確認する —URLConnection クラスと関連クラス図 —HTTP ヘッダを設定する処理のシーケンス図 —HTTP ヘッダ設定時に実施される入力値検査 —RFC との整合性
  • 30. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 29
  • 31. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 (抽象クラス) 30 アプリケーションの 実装者が扱う抽象クラス (Java 標準 API 準拠)
  • 32. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 (実装クラス) 31 Java 標準 API の URLConnection クラスを 継承し setRequestProperty() を実装している HttpURLConnection クラス HTTP ヘッダのキーと 値を保持するクラス Sun のパッケージって残ってたんですね
  • 33. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダを設定する処理のシーケンス図 32 HttpURLConnection.checkMessageHeader() で改行 コードの入力値検査を行っている
  • 34. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 33 改行コード LF (‘n’) の後が スペースまたは水平タブなら OK 条件を満たさなければ IllegalArgumentException を スローする実装になっている
  • 35. Copyright©2016 JPCERT/CC All rights reserved. RFC との整合性 34 改行コード LF (‘n’) の後がスペースまたは水平タブなら OK — RFC2616 で定義されている内容と一致する  RFC 2616 とは
  • 36. Copyright©2016 JPCERT/CC All rights reserved. RFC 2616 (2.2 Basic Rule) 35 RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1 June 1999 —https://www.ietf.org/rfc/rfc2616.txt —1999 年に RFC で公開された HTTP 1.1 の仕様 —改行コードの扱いは 2.2 Basic Rule で定義 改行コード後のスペースと水平タブを許可 いわゆる「継続行」を許可している
  • 37. Copyright©2016 JPCERT/CC All rights reserved. RFC 2616 から RFC 723x へ 36 RCF 2616 Obsoleted by RFC 7230, RFC 7231, RFC 7232, RFC 7233, RFC 7234 and RFC7235 2014年に HTTP に関する RFC が更新 —RFC7230 HTTP/1.1 Message Syntax and Routing —RFC7231 HTTP/1.1 Semantics and Content —RFC7232 HTTP/1.1 Conditional Requests —RFC7233 HTTP/1.1 Range Requests —RFC7234 HTTP/1.1 Caching —RFC7235 HTTP/1.1 Authentication  改行コードや LWS の扱いはどう変わったか?
  • 38. Copyright©2016 JPCERT/CC All rights reserved. RFC 7230 (3.2 Header Fields) 37 RFC 7230 HTTP/1.1 Message Syntax and Routing June 2014 —https://www.ietf.org/rfc/rfc7230.txt —3.2 Header Fields 改行後のスペースと水平タブも禁止に つまり継続行は廃止された
  • 39. Copyright©2016 JPCERT/CC All rights reserved. RFC 7230 (3.2.4 Field Parsing) 38 RFC 7230 HTTP/1.1 Message Syntax and Routing June 2014 —https://www.ietf.org/rfc/rfc7230.txt —3.2.4 Field Parsing 全面的に継続行の廃止ではなく、例外として message / http media type では有効となっている
  • 40. Copyright©2016 JPCERT/CC All rights reserved. OpenJDK の URLConnection クラスの実装まとめ 39 RFC 2616 に準拠した実装になっている 改行コード後にスペースか水平タブ以外の値を設定する と例外 (IllegalArgumentException) をスローする  Android Platform の URLConnection クラスではどうなっ ているのか?
  • 41. Copyright©2016 JPCERT/CC All rights reserved. 目次 40 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 42. Copyright©2016 JPCERT/CC All rights reserved. 脆弱な URLConnection クラスの実装 41 Android Platform の 脆弱な URLConnection クラスの実 装を確認する 本稿では Android 6.0 を対象に実装の確認を行う —Android バージョンによる実装の違い —URLConnection クラスと関連クラス図 —HTTP ヘッダを設定する処理のシーケンス図 —HTTP ヘッダ設定時に実施される入力値検査 —RFC との整合性
  • 43. Copyright©2016 JPCERT/CC All rights reserved. Android バージョンによる実装の違い 42 Android 6.0 では OkHttp のソースコードを使用している Android 2.2 ~ Apache Harmony Android 4.4.2~ OkHttp Android 4.0.3 ~ 独自実装? 標準 API 準拠の抽象クラス Android 6.0 では OkHttp のソースコードが使用されている しかし取り込んだバージョンの OkHttpに HTTP ヘッダイン ジェクションの脆弱性が存在した
  • 44. Copyright©2016 JPCERT/CC All rights reserved. OkHttp とは 43 OkHttp —http://square.github.io/okhttp/ —Apache License, Version 2.0 の HTTP & HTTP/2 クライア ントライブラリ —Android Platform の URLConnection の実装に OkHttp (version 2.5 より前) のソースコードが取り込まれている  Andorid 6.0 の URLConnection クラスの実装 (OkHttp か ら取り込んだ実装)を示す
  • 45. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 44
  • 46. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 (抽象クラス) 45 アプリケーションの 実装者が扱う抽象クラス (Java 標準 API 準拠)
  • 47. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 (実装クラス) 46 HTTP ヘッダのキーと 値を保持するクラス Java 標準 API の URLConnection クラスを 継承し setRequestProperty() を実装している HttpURLConnectionImp クラス
  • 48. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダを設定する処理のシーケンス図 47 Android Platform では HTTP ヘッダの設定に関わる全て のクラスとメソッドで入力値検査をしていないのか? これらのクラスとメソッドで入力値検査をしているか確認した
  • 49. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 48 ] 引数に対する Null Check はされているが・・・
  • 50. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 49 内部メソッドを呼び出してるだけ
  • 51. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 50 ヘッダフィールド名が既に存在していたら上書き 配列の偶数要素がフィールド名で、奇数要素が値・・・
  • 52. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 51 2度目の Null Check をしているが、改行コードが含まれるか 入力値検査は行われていない
  • 53. Copyright©2016 JPCERT/CC All rights reserved. RFC との整合性 52 Android Platform の URLConnection クラス —RFC 2616 に準拠した入力値検査を実施していない —また、RFC 7230 にも準拠していない —OkHttp は version 2.5 で RFC 7230 に準拠した修正を 行いリリース済 Android Platform も OkHttp の修正を master ブランチに取り 込んだ https://android.googlesource.com/platform/external/okhttp/+/7 1b9f47b26fb57ac3e436a19519c6e3ec70e86eb  Android Platform の master ブランチでは、どのように修 正されたのか?
  • 54. Copyright©2016 JPCERT/CC All rights reserved. 目次 53 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 55. Copyright©2016 JPCERT/CC All rights reserved. 修正された URLConnection クラスの実装 54 master ブランチに取り込まれた URLConnection クラス の実装を確認する —URLConnection クラスと関連クラス図 —HTTP ヘッダを設定する処理のシーケンス図 —HTTP ヘッダ設定時に実施される入力値検査 —RFC との整合性
  • 56. Copyright©2016 JPCERT/CC All rights reserved. URLConnection クラスと関連クラス図 55 checkNameAndValue() が追加された
  • 57. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダを設定する処理のシーケンス図 56 checkNameAndValue() で入力値検査を実施
  • 58. Copyright©2016 JPCERT/CC All rights reserved. HTTP ヘッダ設定時に実施される入力値検査 57 HTTP ヘッダフィルード名、値ともにアスキーコードの 0x1f 以下、及び 0x7f 以上が含まれていたら IllegalArgumentException をスローする
  • 59. Copyright©2016 JPCERT/CC All rights reserved. RFC との整合性 58 改行コードを含む制御文字が全て禁止され RFC 7230 に準拠した修 正が行われた — IT 用語辞典 e-Words より ASCII 文字コード表を引用 — http://e-words.jp/p/r-ascii.html 修正で禁止された制御文字
  • 60. Copyright©2016 JPCERT/CC All rights reserved. 目次 59 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 61. Copyright©2016 JPCERT/CC All rights reserved. まとめ 60 誰が本脆弱性の影響を受けるか —HTTP ヘッダフィールドを外部入力として受け取る Android アプリ 対策 1. master ブランチの checkNameAndValue() を Android アプリに移植して、HTTP ヘッダの入力値検査を行うよ うに修正する (推奨) 2. 脆弱性が修正されている OkHttp version 2.5 以降を使い アプリケーションを実装し直す (大変) 全ての開発者が注意すべきこと —セキュアコーディングの原則として、信頼境界の外から受 け取るパラメータを信用せず入力値検査を行う
  • 62. Copyright©2016 JPCERT/CC All rights reserved. 目次 61 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 63. Copyright©2016 JPCERT/CC All rights reserved. 参考情報 62 本稿では Android Platform の HTTP ヘッダインジェクションについて取り 上げたが、他言語・フレームワークでも同じ脆弱性が存在する可能性があ る PHP の HTTP ヘッダインジェクションについて、2015年に話題になった ことがあるので参考までに紹介する — 2015年 7月 寺田 健 氏 (三井物産セキュアディレクション株式会社)  LWSとHTTPヘッダインジェクション  https://www.mbsd.jp/blog/20150730.html  「新RFCにより一転してPHP側の旗色が悪くなった訳ですが、PHPは比較的早くこの状 況に対処しました。具体的には、2015年2月のリリース(PHP 5.4.38, 5.5.22, 5.6.6)で、 LWSを含むヘッダをエラーとして出力できないようにする対処を行いました」 — 2015年 12月 徳丸 浩 氏 (HASHコンサルティング株式会社)  PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る  http://blog.tokumaru.org/2015/12/phphttp.html  「HTTPヘッダインジェクション脆弱性対策については、一応はPHP側の責任と考えた うえで、アプリケーション側でもヘッダ文字列のバリデーション等で対策をしておくこ とを推奨します」
  • 64. Copyright©2016 JPCERT/CC All rights reserved. 目次 63 後半 – ソースコードの詳細調査 —Android Platform が提供している Java 実行環境 —正しい URLConnection クラスの実装 (OpenJDK) —脆弱な URLConnection クラスの実装 (Android 6.0) —修正された URLConnection クラスの実装 (master ブランチ) まとめ 参考情報 謝辞
  • 65. Copyright©2016 JPCERT/CC All rights reserved. 謝辞 64 JVN#21612597 で公開された Apache Cordova に関する脆弱性の 報告者である、ソニーデジタルネットワークアプリケーションズ株 式会社の西村宗晃氏の追加調査により本脆弱性が存在する事が判明 しました。本脆弱性情報を JPCERT/CC に報告いただいた西村氏に 御礼申し上げます。