SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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.09.30 16:16:49 +09'00'
Apache ActiveMQにおける
認証処理不備の脆弱性
AMQ-1272
2
Copyright©2013 JPCERT/CC All rights reserved.
ActiveMQ とは
サーバへの処理要求を非同期処理するためのミドルウェ
ア
APIとしてJMS(JavaMessageService) を実装しており、
Javaとの親和性が高い
OpenWireやStomp等9種類以上のプロトコルが使用可能
3
Webサービス
Server
Server
App
App
アプリケーション
Copyright©2013 JPCERT/CC All rights reserved.
ActiveMQ の使用例: IM 中継サーバ
送信者は、受信者の状態に関わらずActiveMQに
メッセージを預ければよい
受信者は好きなタイミングでメッセージを受け
取ることが可能
4
友人に同報送信
今受け取れる人
にはすぐ届く
今受け取れない人には
受け取れる状態になっ
たら届く
受け取り状況を
随時確認できる
Jabber IM
Server
Powered by
Copyright©2013 JPCERT/CC All rights reserved.
脆弱性の概要
ActiveMQサーバに接続する際、IDとパスワード
による認証を行うが、この認証処理が正しく行
われず、誰もがログインできる状態だった。
存在するユーザになりすますことも、存在しな
いユーザで操作することも可能になってしまっ
ていた。
5
※本ドキュメントは、脆弱性を内包する ActiveMQ 5.0 を対象に記載している。
Copyright©2013 JPCERT/CC All rights reserved.
脆弱性が悪用された場合のリスク
権限のないユーザに操作を許可してしまう
—利用できないはずのユーザ(登録されていない
ユーザ)がキューへアクセス
—既に登録されているユーザに成りすましてキュー
へアクセス
—情報が漏えいしたり改竄される恐れがある。
6
ID: userA /PW:foo ID: userA /PW:s#4xC
OKOK
Copyright©2013 JPCERT/CC All rights reserved.
キューを介したメッセージ処理
ActiveMQはキュー構造を用いて、要求側が指示
したい処理を蓄積する。
—これを、「メッセージング」と呼ぶ。
7
各種端末からの接続を受け付ける。
リクエスト1
リクエスト2
リクエスト3
リクエスト4
リクエスト5
指示したい処理=リクエストは順番にキューへ登録され、
先に登録されたものから処理される。
Queue
Copyright©2013 JPCERT/CC All rights reserved.
Publisher と Subscriber
クライアントはサーバへの要求(メッセージ)をActiveMQ
に登録し、サーバはその要求を受け取り処理する。また、
逆の流れで結果を返却する。
8
ActiveMQ を用いた非同期のクライアント/サーバ構成例
Enqueue(Request) Dequeue(Request)
Enqueue(Response)Dequeue(Response)
クライアント サーバ
Publisher Subscriber
ActiveMQを介して通信するアプリケーションを、その機能に応じて
以下のように呼び分ける。
— Publisher: 処理を要求するアプリケーション(一般的なクライアント機能)
— Subscriber: 要求を処理し結果を返却するアプリケーション(一般的なサーバ機能)
Copyright©2013 JPCERT/CC All rights reserved.
ActiveMQ を介したメッセージング処理フロー
9
ActiveMQを介したPublisher/Subscriber間の処理フロー
① [Publisher] ActiveMQへリクエスト登録
② [Subscriber] ActiveMQからリクエストメッセージを取得・処理、
ActiveMQへレスポンス登録
③ [Publisher] ActiveMQからレスポンスメッセージを取得・処理
Copyright©2013 JPCERT/CC All rights reserved.
Queue
3
① [Publisher] ActiveMQへリクエストメッセージ登録
10
【キュー情報】Stomp Protocol
キュー名: Queue1
登録内容: 処理nを実行
処理1
処理2
Queue
2
Queue
1
New
処理nを実行
処理73
Publisher
Copyright©2013 JPCERT/CC All rights reserved.
② [Subscriber] リクエストメッセージを取得・処理、レスポンス登録
11
Subscriber
処理nを実行
処理nの結果
【キュー情報】Stomp Protocol
キュー名: Queue11
登録内容: 処理nの結果
Queue
11
処理nを実行
処理nの結果
New
Queue
1
Copyright©2013 JPCERT/CC All rights reserved.
③ [Publisher] レスポンスメッセージを取得・処理
12
【キュー情報】Stomp Protocol
キュー名: Queue11
返却内容: 処理nの結果
Queue
11
Publisher
処理nの結果
Copyright©2013 JPCERT/CC All rights reserved.
ActiveMQの認証(概要)
SimpleAuthenticationPluginという認証モジュールで
ID/PW認証が簡単に実装できる
13
②認証
OK/NG
ID/PW
認証リクエストメッセージ
認証レスポンスメッセージ
Publisher 側の認証フロー
①認証リクエスト送信
③認証レスポンス受信
※PublisherもSubscriberも同様に、接続時に認証が必要となる。
以降、Publisher側を例に認証フローを説明する。
Copyright©2013 JPCERT/CC All rights reserved.
認証メッセージの処理
ActiveMQが認証リクエストメッセージを受信すると、
キューを経由して認証モジュールに認証リクエストメッ
セージを送信する仕組みになっている。
14
Queue
認証用キューに認証リクエ
ストメッセージを登録
認証
モジュール
ID/PW
ID/PW
ID/PW
メッセージ
ID/PW 認証
キューを経由することで複数の認証リ
クエストを1つの認証モジュールで処
理できるようにしている
Copyright©2013 JPCERT/CC All rights reserved.
「認証後関数」
ActiveMQが認証リクエストメッセージをキュー
に登録する際、認証後処理を定めた「認証後関
数」も一緒に渡している。
—認証モジュールは認証処理後に認証後関数を呼び出し、
認証結果を渡す
—認証後処理では、接続セッションの確立とクライアン
トへの認証結果の返却を行う
15
ID/PW
Queue
認証
モジュール
認証リクエストメッセージと認
証後関数両方を受け取る
メッセージ
Function
キューへの登録時に
「認証後関数」
(=Function) も渡す
Copyright©2013 JPCERT/CC All rights reserved.
認証成功時の処理
① 認証モジュールにて認証を行う⇒OK
② 認証後関数を実行する
— ③ 認証後処理(接続を確立する等)を行う
— ④ 結果をクライアントに返却する
16
認証
モジュール
②認証後関数 (Function)
を呼び出す
①OKOK
Function
③ 認証後処理を行う
認証モジュール からは
OK/NG が返却されてくるた
め、このFunction内にて後続
の処理を決定・実行する。
④ 結果を返却
Copyright©2013 JPCERT/CC All rights reserved.
認証失敗時の処理
① 認証モジュールにて認証を行う⇒NG
② 認証後関数を実行する
— ③ NG時処理を行い認証後関数を異常終了する
— ④ 結果(NG)をクライアントに返却する
17
認証
モジュール②認証後関数 (Function)
を呼び出す
①NG
NG
Function
③ NG時処理を実行・
異常終了
④ 結果を返却
Copyright©2013 JPCERT/CC All rights reserved.
認証モジュールにて認証する際の処理フローに沿って解説する。
ソースコード解説
18
ユーザID/パスワード認証を実行する処理フロー
① クライアントから送信された認証要求をActiveMQが受け取り解析し、
ID/PW等を認証情報(connectionInfo)に格納する。
② 認証モジュールが持つキューに対し認証リクエストを登録する。
⇒メッセージは認証モジュールで処理される。
③ 認証後処理関数が呼び出され、結果をクライアントに返却する。
Copyright©2013 JPCERT/CC All rights reserved.
コードの全体構成
無名クラスを用いて認証後の処理を定義している。
(new ResponseHandler(){ … })
19
…
protected void onStompConnect(StompFrame command) throws ProtocolException {
…
…
sendToActiveMQ(connectionInfo, new ResponseHandler() {
public void onResponse(ProtocolConverter converter, Response response)
throws IOException {
…
…
});
}
}
…
ProtocolConverter.java
ID/PW退避処理
結果返却処理
メッセージ登録(認証リクエストメッセージ)
③認証処理終了時に呼び出される
①メッセージ受信後呼び出される
②キューにメッセージを登録する処理
=ここでは、認証モジュールへの認証リクエストを登録
①~③の処理は、以下のコードで構成されている。
Copyright©2013 JPCERT/CC All rights reserved.
コードの全体構成(詳細)
ActiveMQが認証要求を受けると onStompConnect() が呼び出される。
20
…
protected void onStompConnect(StompFrame command) throws ProtocolException {
sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
});
}
}
…
ProtocolConverter.java
①パース処理
③結果返却処理
②メッセージ登録(認証リクエストメッセージ)
protected void onStompConnect(StompFrame command) throws ProtocolException
本処理内で、認証モジュールに対し認証要求を行っている。
Copyright©2013 JPCERT/CC All rights reserved.
CONNECT
user: user01
Password: pass01
^@
接続要求コマンド
ユーザ情報
EOS(End of Stream)マーク
①クライアントから送信された内容を解析し、認証情報に格納する
接続要求データを解析する。(例: Stompプロトコルでのリクエスト)
21
protected void onStompConnect(StompFrame command) throws ProtocolException {
…
String login = headers.get(Stomp.Headers.Connect.LOGIN);
String passcode = headers.get(Stomp.Headers.Connect.PASSCODE);
String clientId = headers.get(Stomp.Headers.Connect.CLIENT_ID);
final ConnectionInfo connectionInfo = new ConnectionInfo();
…
connectionInfo.setUserName(login);
connectionInfo.setPasseword(passcode);
…
ProtocolConverter.java
解析処理
Stompリクエスト
connectionInfo に格納する。
ユーザ名(user01)
パスワード(pass01)
Copyright©2013 JPCERT/CC All rights reserved.
② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する
認証リクエストを受け取ったActiveMQは、認証モジュール向けの
キューに認証リクエストを登録する。(1.)
22
Queue
2) Function
(ResponseHandler)
1)connectionInfo
→ ID, PW 情報
→ 認証後処理関数
1)
2)
1.メッセージ登録
2.認証モジュール
がポーリング
3.connectionInfoを
認証
4.認証後処理関数
呼び出し
5.認証後処理にて
結果返却
認証
モジュール
Copyright©2013 JPCERT/CC All rights reserved.
② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する
メッセージを登録するメソッド(sendToActiveMQ)を呼び出す。
23
…
protected void onStompConnect(StompFrame command) throws ProtocolException {
sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
}
});
}
…
ProtocolConverter.java
①パース処理
③結果返却処理
sendToActiveMQ(connectionInfo, new ResponseHandler() { … });
1) connectionInfo
パースした情報を格納したクラス。
この情報を基に認証を行う。
Copyright©2013 JPCERT/CC All rights reserved.
② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する
認証後の処理は onResponse() で定義されている。
24
…
protected void onStompConnect(StompFrame command) throws ProtocolException {
sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
}
});
}
…
ProtocolConverter.java
①パース処理
③結果返却処理
sendToActiveMQ(connectionInfo, new ResponseHandler() { … });
2) … ResponseHandler() { … }
認証処理後関数の本体(無名クラスによる定義)。
認証モジュールは処理完了後に onResponse() を呼び出す。
Copyright©2013 JPCERT/CC All rights reserved.
③セッション情報キューと送信オブジェクトの生成指示メッセージを登録する。
25
Queue
2) Function
(ResponseHandler)
1)connectioninfo
→ ID, PW 情報
→ 認証後処理関数
1)
2)
1.メッセージ登録
2.認証モジュール
がポーリング
3.connectioninfoを
認証
4.認証後処理関数
呼び出し
5.認証後処理にて
結果返却
認証
モジュール
認証モジュールが認証を行い、認証後処理関数を呼び出して
結果を返却する。 (4~5)
Copyright©2013 JPCERT/CC All rights reserved.
③セッション情報キューと送信オブジェクトの生成指示メッセージを登録する。
呼び出された認証後処理関数(onResponse)は、無条件に
セッションを確立し、結果「成功」を返却する。
26
… new ResponseHandler() {
…
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
…
StompFrame sc = new StompFrame();
sc.setAction(Stomp.Responses.CONNECTED);
sc.setHeaders(responseHeaders);
sendToStomp(sc);
}
} …
ProtocolConverter.java > onStompConnect() > onResponse()
結果返却処理
5.認証後処理にて結果返却
Stompプロトコルの形式で、接続
完了ヘッダを作成し、送出する。
セッション確立処理等
4.認証後処理関数呼び出し
認証終了後 onResponse が呼び出される
認証後処理関数(ResponseHandler.onResponse)は、以下の
コードで構成される。
Copyright©2013 JPCERT/CC All rights reserved.
問題点
認証失敗時、認証後関数内で異常終了すべきところを、
NG時処理が存在しなかった。
—その結果、認証結果がNGであってもOK時処理を行ってお
り、どんなID/PWでも接続できてしまった。
27
NGを返却すべきところ、認証後関数にて認証OK時の処理を実施していた
ため、接続が不正に確立されてしまった。
OK
認証
モジュール②認証後関数 (Function)
を呼び出す
①NG
Function
④ 結果を返却
③ 認証後処理を行う
NG時処理
がない
Copyright©2013 JPCERT/CC All rights reserved.
問題点
認証後処理関数は引数を2つ持ち、第二引数の response には認証結果が設定
されている。
28
public void onResponse(ProtocolConverter converter, Response response)
… new ResponseHandler() {
…
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
}
} …
ProtocolConverter.java > onStompConnect() > onResponse()
セッション確立処理等
結果返却処理(成功)
response を評価する処理が無い
エラー情報が格納されている response の値を全く評価していなかっ
たため、接続の成功/失敗にかかわらず接続処理が完了してしまった。
Copyright©2013 JPCERT/CC All rights reserved.
問題点
 今回のアプリケーションにおける具体的な問題点
認証後処理関数(onResponse)が認証結果をチェックして
おらず、認証成功時の処理だけを行っていた。
 問題点に対してどうすべきだったか。
認証結果 OK, NG それぞれに対する処理をきちんと
実装すべきだった。
29
問題となったProtocolConverterクラスはSTOMPプロトコル用に
ActiveMQ 4.1で新設されたもの。それ以前のSTOMP用クラス群を統
合し大幅にリニューアルされている。
このリニューアルの際に実装内容の検討と動作チェックが不十分
だったものと考えられる。
Copyright©2013 JPCERT/CC All rights reserved.
認証モジュールの処理フロー③に認証失敗時の処理を追加した。
修正版コード
30
ユーザID/パスワード認証を実行する際の認証モジュールの処理フロー
① クライアントから送信された内容を解析しID/PW等を認証情報に格納
する。
② 認証モジュールが持つキューに対し認証リクエストを登録する。
⇒メッセージは認証モジュールで処理される。
③ 認証終了後処理が呼び出され、結果をクライアントに返却する。
⇒[認証失敗時処理]
認証に失敗した場合は例外オブジェクトを設定し処理を中断する。
※ActiveMQ 5.1.0 Release で修正が行われている。
Copyright©2013 JPCERT/CC All rights reserved.
修正版コード
③認証終了後処理が呼び出され、結果をクライアントに返却する。
31
…
protected void onStompConnect(StompFrame command) throws ProtocolException {
sendToActiveMQ(connectionInfo, new ResponseHandler() {
public void onResponse(ProtocolConverter converter, Response response) throws IOException {
…
if (response.isException()) {
// If the connection attempt fails we close the socket.
Throwable exception = ((ExceptionResponse)response).getException();
handleException(exception, command);
getTransportFilter().onException(IOExceptionSupport.create(exception));
return;
}
}
});
}
…
ProtocolConverter.java
①パース処理
②メッセージ登録(認証リクエストメッセージ)
セッション確立処理等
結果返却処理(成功)
認証失敗時処理
例外オブジェクト
を呼び出し元に通
知する処理
認証処理後に呼び出される
認証モジュールで認証エラー(Security Exception)が発生したことを
isException() で判別し、後続の処理に遷移しないように修正。
③response 引数評価処理
Copyright©2013 JPCERT/CC All rights reserved.
まとめ
32
■認証機能の実装
認証結果 OK, NG それぞれに対する処理を正しく
実装すること
■実装のテスト
認証結果 OK, NG それぞれに対する実装が正しく
行われているか動作テストを行う
Copyright©2013 JPCERT/CC All rights reserved.
著作権・引用や二次利用について
本資料の著作権はJPCERT/CCに帰属します。
本資料あるいはその一部を引用・転載・再配布する際は、引用元名、資料名および URL の明示を
お願いします。
記載例
引用元:一般社団法人JPCERTコーディネーションセンター
Java アプリケーション脆弱性事例解説資料
Apache ActiveMQ における認証処理不備の脆弱性
https://www.jpcert.or.jp/securecoding/2012/No.06_Apache_ActiveMQ.pdf
本資料を引用・転載・再配布をする際は、引用先文書、時期、内容等の情報を、JPCERT コーディ
ネーションセンター広報(office@jpcert.or.jp)までメールにてお知らせください。なお、この連絡
により取得した個人情報は、別途定めるJPCERT コーディネーションセンターの「プライバシーポ
リシー」に則って取り扱います。
本資料の利用方法等に関するお問い合わせ
JPCERTコーディネーションセンター
広報担当
E-mail:office@jpcert.or.jp
本資料の技術的な内容に関するお問い合わせ
JPCERTコーディネーションセンター
セキュアコーディング担当
E-mail:secure-coding@jpcert.or.jp
33

Mais conteúdo relacionado

Mais procurados

Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)JPCERT Coordination Center
 
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」JPCERT Coordination Center
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)JPCERT Coordination Center
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策JPCERT Coordination Center
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性JPCERT Coordination Center
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JPCERT Coordination Center
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見Yosuke HASEGAWA
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security土岐 孝平
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Lt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiLt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiNorito Agetsuma
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Takefumi MIYOSHI
 
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせphpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせHiroshi Tokumaru
 
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
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)Sen Ueno
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 

Mais procurados (20)

Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
 
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Lt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiLt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdi
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせphpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
 
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
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 

Destaque

OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONJun Matsumoto
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)JPCERT Coordination Center
 
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
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)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
 
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)Shinichi Hirauchi
 
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開Muneaki Nishimura
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みyuichi takeda
 

Destaque (14)

OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
 
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...
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
 
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話Devsumi2015_20E1 エンジニアが知っておきたいお金の話
Devsumi2015_20E1 エンジニアが知っておきたいお金の話
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
 
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
世界一簡単なGithub入門(githubは無料で使用する場合、全てのファイルが公開されていることにご注意ください)
 
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
 
Android Secure Coding
Android Secure CodingAndroid Secure Coding
Android Secure Coding
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
 

Semelhante a Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)

Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaWebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaKazuhiro Hara
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Hirofumi Iwasaki
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with KarateTakanori Suzuki
 
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法hiroya
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」Hiroyuki Ohnaka
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)iret, Inc.
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTデバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTShin-ya Koga
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Shotaro Suzuki
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTYuji Kubota
 
SAStruts Seminar In Tripodworks
SAStruts Seminar In TripodworksSAStruts Seminar In Tripodworks
SAStruts Seminar In Tripodworkstripodworks
 
いよいよ始められる 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
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月VirtualTech Japan Inc.
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpNorito Agetsuma
 

Semelhante a Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272) (20)

Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaWebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
 
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTデバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoT
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
 
SAStruts Seminar In Tripodworks
SAStruts Seminar In TripodworksSAStruts Seminar In Tripodworks
SAStruts Seminar In Tripodworks
 
いよいよ始められる 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
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
 

Mais de JPCERT Coordination Center

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~JPCERT Coordination Center
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)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
 

Mais de JPCERT Coordination Center (9)

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
 
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解くDLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
 
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回演習
 

Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)

  • 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.09.30 16:16:49 +09'00'
  • 3. Copyright©2013 JPCERT/CC All rights reserved. ActiveMQ とは サーバへの処理要求を非同期処理するためのミドルウェ ア APIとしてJMS(JavaMessageService) を実装しており、 Javaとの親和性が高い OpenWireやStomp等9種類以上のプロトコルが使用可能 3 Webサービス Server Server App App アプリケーション
  • 4. Copyright©2013 JPCERT/CC All rights reserved. ActiveMQ の使用例: IM 中継サーバ 送信者は、受信者の状態に関わらずActiveMQに メッセージを預ければよい 受信者は好きなタイミングでメッセージを受け 取ることが可能 4 友人に同報送信 今受け取れる人 にはすぐ届く 今受け取れない人には 受け取れる状態になっ たら届く 受け取り状況を 随時確認できる Jabber IM Server Powered by
  • 5. Copyright©2013 JPCERT/CC All rights reserved. 脆弱性の概要 ActiveMQサーバに接続する際、IDとパスワード による認証を行うが、この認証処理が正しく行 われず、誰もがログインできる状態だった。 存在するユーザになりすますことも、存在しな いユーザで操作することも可能になってしまっ ていた。 5 ※本ドキュメントは、脆弱性を内包する ActiveMQ 5.0 を対象に記載している。
  • 6. Copyright©2013 JPCERT/CC All rights reserved. 脆弱性が悪用された場合のリスク 権限のないユーザに操作を許可してしまう —利用できないはずのユーザ(登録されていない ユーザ)がキューへアクセス —既に登録されているユーザに成りすましてキュー へアクセス —情報が漏えいしたり改竄される恐れがある。 6 ID: userA /PW:foo ID: userA /PW:s#4xC OKOK
  • 7. Copyright©2013 JPCERT/CC All rights reserved. キューを介したメッセージ処理 ActiveMQはキュー構造を用いて、要求側が指示 したい処理を蓄積する。 —これを、「メッセージング」と呼ぶ。 7 各種端末からの接続を受け付ける。 リクエスト1 リクエスト2 リクエスト3 リクエスト4 リクエスト5 指示したい処理=リクエストは順番にキューへ登録され、 先に登録されたものから処理される。 Queue
  • 8. Copyright©2013 JPCERT/CC All rights reserved. Publisher と Subscriber クライアントはサーバへの要求(メッセージ)をActiveMQ に登録し、サーバはその要求を受け取り処理する。また、 逆の流れで結果を返却する。 8 ActiveMQ を用いた非同期のクライアント/サーバ構成例 Enqueue(Request) Dequeue(Request) Enqueue(Response)Dequeue(Response) クライアント サーバ Publisher Subscriber ActiveMQを介して通信するアプリケーションを、その機能に応じて 以下のように呼び分ける。 — Publisher: 処理を要求するアプリケーション(一般的なクライアント機能) — Subscriber: 要求を処理し結果を返却するアプリケーション(一般的なサーバ機能)
  • 9. Copyright©2013 JPCERT/CC All rights reserved. ActiveMQ を介したメッセージング処理フロー 9 ActiveMQを介したPublisher/Subscriber間の処理フロー ① [Publisher] ActiveMQへリクエスト登録 ② [Subscriber] ActiveMQからリクエストメッセージを取得・処理、 ActiveMQへレスポンス登録 ③ [Publisher] ActiveMQからレスポンスメッセージを取得・処理
  • 10. Copyright©2013 JPCERT/CC All rights reserved. Queue 3 ① [Publisher] ActiveMQへリクエストメッセージ登録 10 【キュー情報】Stomp Protocol キュー名: Queue1 登録内容: 処理nを実行 処理1 処理2 Queue 2 Queue 1 New 処理nを実行 処理73 Publisher
  • 11. Copyright©2013 JPCERT/CC All rights reserved. ② [Subscriber] リクエストメッセージを取得・処理、レスポンス登録 11 Subscriber 処理nを実行 処理nの結果 【キュー情報】Stomp Protocol キュー名: Queue11 登録内容: 処理nの結果 Queue 11 処理nを実行 処理nの結果 New Queue 1
  • 12. Copyright©2013 JPCERT/CC All rights reserved. ③ [Publisher] レスポンスメッセージを取得・処理 12 【キュー情報】Stomp Protocol キュー名: Queue11 返却内容: 処理nの結果 Queue 11 Publisher 処理nの結果
  • 13. Copyright©2013 JPCERT/CC All rights reserved. ActiveMQの認証(概要) SimpleAuthenticationPluginという認証モジュールで ID/PW認証が簡単に実装できる 13 ②認証 OK/NG ID/PW 認証リクエストメッセージ 認証レスポンスメッセージ Publisher 側の認証フロー ①認証リクエスト送信 ③認証レスポンス受信 ※PublisherもSubscriberも同様に、接続時に認証が必要となる。 以降、Publisher側を例に認証フローを説明する。
  • 14. Copyright©2013 JPCERT/CC All rights reserved. 認証メッセージの処理 ActiveMQが認証リクエストメッセージを受信すると、 キューを経由して認証モジュールに認証リクエストメッ セージを送信する仕組みになっている。 14 Queue 認証用キューに認証リクエ ストメッセージを登録 認証 モジュール ID/PW ID/PW ID/PW メッセージ ID/PW 認証 キューを経由することで複数の認証リ クエストを1つの認証モジュールで処 理できるようにしている
  • 15. Copyright©2013 JPCERT/CC All rights reserved. 「認証後関数」 ActiveMQが認証リクエストメッセージをキュー に登録する際、認証後処理を定めた「認証後関 数」も一緒に渡している。 —認証モジュールは認証処理後に認証後関数を呼び出し、 認証結果を渡す —認証後処理では、接続セッションの確立とクライアン トへの認証結果の返却を行う 15 ID/PW Queue 認証 モジュール 認証リクエストメッセージと認 証後関数両方を受け取る メッセージ Function キューへの登録時に 「認証後関数」 (=Function) も渡す
  • 16. Copyright©2013 JPCERT/CC All rights reserved. 認証成功時の処理 ① 認証モジュールにて認証を行う⇒OK ② 認証後関数を実行する — ③ 認証後処理(接続を確立する等)を行う — ④ 結果をクライアントに返却する 16 認証 モジュール ②認証後関数 (Function) を呼び出す ①OKOK Function ③ 認証後処理を行う 認証モジュール からは OK/NG が返却されてくるた め、このFunction内にて後続 の処理を決定・実行する。 ④ 結果を返却
  • 17. Copyright©2013 JPCERT/CC All rights reserved. 認証失敗時の処理 ① 認証モジュールにて認証を行う⇒NG ② 認証後関数を実行する — ③ NG時処理を行い認証後関数を異常終了する — ④ 結果(NG)をクライアントに返却する 17 認証 モジュール②認証後関数 (Function) を呼び出す ①NG NG Function ③ NG時処理を実行・ 異常終了 ④ 結果を返却
  • 18. Copyright©2013 JPCERT/CC All rights reserved. 認証モジュールにて認証する際の処理フローに沿って解説する。 ソースコード解説 18 ユーザID/パスワード認証を実行する処理フロー ① クライアントから送信された認証要求をActiveMQが受け取り解析し、 ID/PW等を認証情報(connectionInfo)に格納する。 ② 認証モジュールが持つキューに対し認証リクエストを登録する。 ⇒メッセージは認証モジュールで処理される。 ③ 認証後処理関数が呼び出され、結果をクライアントに返却する。
  • 19. Copyright©2013 JPCERT/CC All rights reserved. コードの全体構成 無名クラスを用いて認証後の処理を定義している。 (new ResponseHandler(){ … }) 19 … protected void onStompConnect(StompFrame command) throws ProtocolException { … … sendToActiveMQ(connectionInfo, new ResponseHandler() { public void onResponse(ProtocolConverter converter, Response response) throws IOException { … … }); } } … ProtocolConverter.java ID/PW退避処理 結果返却処理 メッセージ登録(認証リクエストメッセージ) ③認証処理終了時に呼び出される ①メッセージ受信後呼び出される ②キューにメッセージを登録する処理 =ここでは、認証モジュールへの認証リクエストを登録 ①~③の処理は、以下のコードで構成されている。
  • 20. Copyright©2013 JPCERT/CC All rights reserved. コードの全体構成(詳細) ActiveMQが認証要求を受けると onStompConnect() が呼び出される。 20 … protected void onStompConnect(StompFrame command) throws ProtocolException { sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録 public void onResponse(ProtocolConverter converter, Response response) throws IOException { … }); } } … ProtocolConverter.java ①パース処理 ③結果返却処理 ②メッセージ登録(認証リクエストメッセージ) protected void onStompConnect(StompFrame command) throws ProtocolException 本処理内で、認証モジュールに対し認証要求を行っている。
  • 21. Copyright©2013 JPCERT/CC All rights reserved. CONNECT user: user01 Password: pass01 ^@ 接続要求コマンド ユーザ情報 EOS(End of Stream)マーク ①クライアントから送信された内容を解析し、認証情報に格納する 接続要求データを解析する。(例: Stompプロトコルでのリクエスト) 21 protected void onStompConnect(StompFrame command) throws ProtocolException { … String login = headers.get(Stomp.Headers.Connect.LOGIN); String passcode = headers.get(Stomp.Headers.Connect.PASSCODE); String clientId = headers.get(Stomp.Headers.Connect.CLIENT_ID); final ConnectionInfo connectionInfo = new ConnectionInfo(); … connectionInfo.setUserName(login); connectionInfo.setPasseword(passcode); … ProtocolConverter.java 解析処理 Stompリクエスト connectionInfo に格納する。 ユーザ名(user01) パスワード(pass01)
  • 22. Copyright©2013 JPCERT/CC All rights reserved. ② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する 認証リクエストを受け取ったActiveMQは、認証モジュール向けの キューに認証リクエストを登録する。(1.) 22 Queue 2) Function (ResponseHandler) 1)connectionInfo → ID, PW 情報 → 認証後処理関数 1) 2) 1.メッセージ登録 2.認証モジュール がポーリング 3.connectionInfoを 認証 4.認証後処理関数 呼び出し 5.認証後処理にて 結果返却 認証 モジュール
  • 23. Copyright©2013 JPCERT/CC All rights reserved. ② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する メッセージを登録するメソッド(sendToActiveMQ)を呼び出す。 23 … protected void onStompConnect(StompFrame command) throws ProtocolException { sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録 public void onResponse(ProtocolConverter converter, Response response) throws IOException { … } }); } … ProtocolConverter.java ①パース処理 ③結果返却処理 sendToActiveMQ(connectionInfo, new ResponseHandler() { … }); 1) connectionInfo パースした情報を格納したクラス。 この情報を基に認証を行う。
  • 24. Copyright©2013 JPCERT/CC All rights reserved. ② 認証モジュールが持つキューに対し認証を要求するメッセージを登録する 認証後の処理は onResponse() で定義されている。 24 … protected void onStompConnect(StompFrame command) throws ProtocolException { sendToActiveMQ(connectionInfo, new ResponseHandler() { // <- 認証要求メッセージ登録 public void onResponse(ProtocolConverter converter, Response response) throws IOException { … } }); } … ProtocolConverter.java ①パース処理 ③結果返却処理 sendToActiveMQ(connectionInfo, new ResponseHandler() { … }); 2) … ResponseHandler() { … } 認証処理後関数の本体(無名クラスによる定義)。 認証モジュールは処理完了後に onResponse() を呼び出す。
  • 25. Copyright©2013 JPCERT/CC All rights reserved. ③セッション情報キューと送信オブジェクトの生成指示メッセージを登録する。 25 Queue 2) Function (ResponseHandler) 1)connectioninfo → ID, PW 情報 → 認証後処理関数 1) 2) 1.メッセージ登録 2.認証モジュール がポーリング 3.connectioninfoを 認証 4.認証後処理関数 呼び出し 5.認証後処理にて 結果返却 認証 モジュール 認証モジュールが認証を行い、認証後処理関数を呼び出して 結果を返却する。 (4~5)
  • 26. Copyright©2013 JPCERT/CC All rights reserved. ③セッション情報キューと送信オブジェクトの生成指示メッセージを登録する。 呼び出された認証後処理関数(onResponse)は、無条件に セッションを確立し、結果「成功」を返却する。 26 … new ResponseHandler() { … public void onResponse(ProtocolConverter converter, Response response) throws IOException { … … StompFrame sc = new StompFrame(); sc.setAction(Stomp.Responses.CONNECTED); sc.setHeaders(responseHeaders); sendToStomp(sc); } } … ProtocolConverter.java > onStompConnect() > onResponse() 結果返却処理 5.認証後処理にて結果返却 Stompプロトコルの形式で、接続 完了ヘッダを作成し、送出する。 セッション確立処理等 4.認証後処理関数呼び出し 認証終了後 onResponse が呼び出される 認証後処理関数(ResponseHandler.onResponse)は、以下の コードで構成される。
  • 27. Copyright©2013 JPCERT/CC All rights reserved. 問題点 認証失敗時、認証後関数内で異常終了すべきところを、 NG時処理が存在しなかった。 —その結果、認証結果がNGであってもOK時処理を行ってお り、どんなID/PWでも接続できてしまった。 27 NGを返却すべきところ、認証後関数にて認証OK時の処理を実施していた ため、接続が不正に確立されてしまった。 OK 認証 モジュール②認証後関数 (Function) を呼び出す ①NG Function ④ 結果を返却 ③ 認証後処理を行う NG時処理 がない
  • 28. Copyright©2013 JPCERT/CC All rights reserved. 問題点 認証後処理関数は引数を2つ持ち、第二引数の response には認証結果が設定 されている。 28 public void onResponse(ProtocolConverter converter, Response response) … new ResponseHandler() { … public void onResponse(ProtocolConverter converter, Response response) throws IOException { … } } … ProtocolConverter.java > onStompConnect() > onResponse() セッション確立処理等 結果返却処理(成功) response を評価する処理が無い エラー情報が格納されている response の値を全く評価していなかっ たため、接続の成功/失敗にかかわらず接続処理が完了してしまった。
  • 29. Copyright©2013 JPCERT/CC All rights reserved. 問題点  今回のアプリケーションにおける具体的な問題点 認証後処理関数(onResponse)が認証結果をチェックして おらず、認証成功時の処理だけを行っていた。  問題点に対してどうすべきだったか。 認証結果 OK, NG それぞれに対する処理をきちんと 実装すべきだった。 29 問題となったProtocolConverterクラスはSTOMPプロトコル用に ActiveMQ 4.1で新設されたもの。それ以前のSTOMP用クラス群を統 合し大幅にリニューアルされている。 このリニューアルの際に実装内容の検討と動作チェックが不十分 だったものと考えられる。
  • 30. Copyright©2013 JPCERT/CC All rights reserved. 認証モジュールの処理フロー③に認証失敗時の処理を追加した。 修正版コード 30 ユーザID/パスワード認証を実行する際の認証モジュールの処理フロー ① クライアントから送信された内容を解析しID/PW等を認証情報に格納 する。 ② 認証モジュールが持つキューに対し認証リクエストを登録する。 ⇒メッセージは認証モジュールで処理される。 ③ 認証終了後処理が呼び出され、結果をクライアントに返却する。 ⇒[認証失敗時処理] 認証に失敗した場合は例外オブジェクトを設定し処理を中断する。 ※ActiveMQ 5.1.0 Release で修正が行われている。
  • 31. Copyright©2013 JPCERT/CC All rights reserved. 修正版コード ③認証終了後処理が呼び出され、結果をクライアントに返却する。 31 … protected void onStompConnect(StompFrame command) throws ProtocolException { sendToActiveMQ(connectionInfo, new ResponseHandler() { public void onResponse(ProtocolConverter converter, Response response) throws IOException { … if (response.isException()) { // If the connection attempt fails we close the socket. Throwable exception = ((ExceptionResponse)response).getException(); handleException(exception, command); getTransportFilter().onException(IOExceptionSupport.create(exception)); return; } } }); } … ProtocolConverter.java ①パース処理 ②メッセージ登録(認証リクエストメッセージ) セッション確立処理等 結果返却処理(成功) 認証失敗時処理 例外オブジェクト を呼び出し元に通 知する処理 認証処理後に呼び出される 認証モジュールで認証エラー(Security Exception)が発生したことを isException() で判別し、後続の処理に遷移しないように修正。 ③response 引数評価処理
  • 32. Copyright©2013 JPCERT/CC All rights reserved. まとめ 32 ■認証機能の実装 認証結果 OK, NG それぞれに対する処理を正しく 実装すること ■実装のテスト 認証結果 OK, NG それぞれに対する実装が正しく 行われているか動作テストを行う
  • 33. Copyright©2013 JPCERT/CC All rights reserved. 著作権・引用や二次利用について 本資料の著作権はJPCERT/CCに帰属します。 本資料あるいはその一部を引用・転載・再配布する際は、引用元名、資料名および URL の明示を お願いします。 記載例 引用元:一般社団法人JPCERTコーディネーションセンター Java アプリケーション脆弱性事例解説資料 Apache ActiveMQ における認証処理不備の脆弱性 https://www.jpcert.or.jp/securecoding/2012/No.06_Apache_ActiveMQ.pdf 本資料を引用・転載・再配布をする際は、引用先文書、時期、内容等の情報を、JPCERT コーディ ネーションセンター広報(office@jpcert.or.jp)までメールにてお知らせください。なお、この連絡 により取得した個人情報は、別途定めるJPCERT コーディネーションセンターの「プライバシーポ リシー」に則って取り扱います。 本資料の利用方法等に関するお問い合わせ JPCERTコーディネーションセンター 広報担当 E-mail:office@jpcert.or.jp 本資料の技術的な内容に関するお問い合わせ JPCERTコーディネーションセンター セキュアコーディング担当 E-mail:secure-coding@jpcert.or.jp 33