Apache Tomcatにおけるクロスサイトリクエストフォージェリ(CSRF)保護メカニズム回避の脆弱性



Similar documents
Spacewalkにおけるクロスサイトフォージェリ(CSRF)の脆弱性

Blojsom におけるクロスサイトスクリプティングの脆弱性

JBoss Application Server におけるディレクトリトラバーサルの脆弱性

Apache ActiveMQ における認証処理不備の脆弱性

タイトルを1~2行で入力 (長文の場合はフォントサイズを縮小)

MySQL Connector/J における SQL インジェクションの脆弱性

Apache Commons の HttpClient におけるSSLサーバ証明書検証不備

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

Microsoft Word - 不正アクセス行為の禁止等に関する法律等に基づく公安

<4D F736F F F696E74202D E A B D682CC91E3955C93498D558C822E707074>

Apache Axis2 におけるXML署名検証不備

(Help_\317\306\255\261\331_ xlsx)

Gmail 利用者ガイド

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

機 能 概 要 概 要 平 成 24 年 度 シームレスな 地 域 連 携 医 療 の 実 現 実 証 事 業 に 対 応 するため 地 域 連 携 システム( 能 登 北 部 版 )を 構 築 する 機 能 < 機 能 追 加 変 更 一 覧 > 1. 画 像 連 携 機 能 院 内 で 撮 影

<4D F736F F D C689D789B582B581698AAE90AC92CA926D816A2E646F63>

サポートシステム操作説明書

Microsoft Word - fiš“⁄.doc

Microsoft Word - 【事務連絡】居所情報の登録申請が間に合わなかった場合の取扱いの周知について.docx

(表紙)

施 工 P お 気 に 入 り データを 活 用 するための 準 備 施 工 パッケージデータをお 気 に 入 りに 登 録 し 単 価 を 閲 覧 するための 方 法 を 説 明 します 1. 施 工 パッケージデータをダウンロードする 施 工 パッケージデータのダウンロードは 下 記 から 行

(Microsoft Word - \203A \225\345\217W\227v\227\314 .doc)

一般競争入札について

技術報告会原稿フォーマット

電子申告簡易マニュアル【所得税実践編】

目 次 目 次 1 ログイン ログアウト ログインする...1 ログイン 画 面 が 表 示 されないときは?... 1 初 めてログインするときのパスワードは?... 2 初 期 パスワードを 忘 れてしまったときは?... 2 変 更 したパスワードを 忘 れてしまったときは?.

 

第4回税制調査会 総4-1

参加表明書・企画提案書様式

スライド 1

贈与税 faq

サービス説明書 - STP 10000TLEE-JP-10 / STP 10000TLEE-JP-11 / STP 20000TLEE-JP-11 / STP 25000TL-JP-30


Untitled


( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加

<4D F736F F D AC90D1955D92E CC82CC895E DD8C D2816A2E646F63>

通 知 カード と 個 人 番 号 カード の 違 い 2 通 知 カード ( 紙 )/H27.10 個 人 番 号 カード (ICカード)/H28.1 様 式 (おもて) (うら) 作 成 交 付 主 な 記 載 事 項 全 国 ( 外 国 人 含 む)に 郵 送 で 配 布 希 望 者 に 交

第2回 制度設計専門会合 事務局提出資料

Ⅶ 東 海 地 震 に 関 して 注 意 情 報 発 表 時 及 び 警 戒 宣 言 発 令 時 の 対 応 大 規 模 地 震 対 策 特 別 措 置 法 第 6 条 の 規 定 に 基 づき 本 県 の 東 海 地 震 に 係 る 地 震 防 災 対 策 強 化 地 域 において 東 海 地 震

CSV_Backup_Guide

<4D F736F F D2095CA8E A90DA91B18C9F93A289F1939A8F D8288B3816A5F E646F63>

変 更 履 歴 版 日 付 区 分 変 更 内 容 変 更 個 所 /11/30 新 規 初 版 作 成 /12/10 修 正 資 料 カバー 画 像 設 定 の 操 作 内 容 を 追 加 資 料 カバー 画 像 設 定 i

組織異動の際のフロー

電子申告直前研修会(所得税編)

"CAS を利用した Single Sign On 環境の構築"

3. 選 任 固 定 資 産 評 価 員 は 固 定 資 産 の 評 価 に 関 する 知 識 及 び 経 験 を 有 する 者 のうちから 市 町 村 長 が 当 該 市 町 村 の 議 会 の 同 意 を 得 て 選 任 する 二 以 上 の 市 町 村 の 長 は 当 該 市 町 村 の 議

ez_meishi.ppt

検 討 検 討 の 進 め 方 検 討 状 況 簡 易 収 支 の 世 帯 からサンプリング 世 帯 名 作 成 事 務 の 廃 止 4 5 必 要 な 世 帯 数 の 確 保 が 可 能 か 簡 易 収 支 を 実 施 している 民 間 事 業 者 との 連 絡 等 に 伴 う 事 務 の 複 雑

学校教育法等の一部を改正する法律の施行に伴う文部科学省関係省令の整備に関する省令等について(通知)

所 得 税 と 住 民 税 の 税 率 表 所 得 税 と 住 民 税 の 税 率 は 以 下 の 通 りです 退 職 所 得 の 場 合 も この 税 率 表 を 使 います 1. 平 成 19 年 1 月 1 日 以 降 ( 所 法 891) 課 税 所 得 所 得 税 率 控 除 額 ~195

<4D F736F F D208ED089EF95DB8CAF89C193FC8FF38BB CC8EC091D492B28DB88C8B89CA82C982C282A282C42E646F63>

るよう 工 事 打 合 せ 簿 ( 様 式 2)により 受 注 者 に 求 めます 5-1 理 由 書 ( 様 式 3)が 提 出 され 特 別 の 事 情 を 有 すると 認 めた 場 合 は 社 会 保 険 等 の 加 入 が 確 認 できる 書 類 を 提 出 するよう 工 事 打 合 せ 簿

研究者総覧システム

工 事 名 沢 口 浄 配 水 場 建 設 工 事 ( 浄 水 管 理 棟 ) 入 札 スケジュール 手 続 等 期 間 期 日 期 限 等 手 続 きの 方 法 等 平 成 24 年 5 月 8 日 ( 火 ) 正 午 から 1 設 計 図 書 等 の 閲 覧 貸 出 基 本 事 項 2のとおり

モバイル 充 電 安 全 認 証 の 概 要 MCPC (モバイルコンピューティング 推 進 コンソーシアム )は 業 界 の 枠 を 越 えてモバ イルコンピューティングを 普 及 促 進 することを 目 的 とし 1997 年 に 発 した 任 意 団 体 です このたび MCPCはスマートフォ

説 明 内 容 料 金 の 算 定 期 間 と 請 求 の 単 位 について 分 散 検 針 制 日 程 等 別 料 金 料 金 の 算 定 期 間 と 支 払 義 務 発 生 日 日 程 等 別 料 金 の 請 求 スケジュール 料 金 のお 支 払 い 方 法 その 他 各 種 料 金 支 払

東京事務所BCP【実施要領】溶け込み版

<4D F736F F D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D AD97DF914F82CC8FEE95F182CC8EFB8F C28E8B89BB2E646F63>

接続試験実施要領【障害者総合支援法(平成27年4月報酬改定)対応】

ご 注 意 (1) 本 書 の 内 容 の 一 部 又 は 全 部 を 無 断 で 転 載 することは 禁 止 されています (2) 本 書 の 内 容 は 将 来 予 告 無 しに 変 更 することがあります (3) 本 書 の 内 容 は 万 全 を 期 して 作 成 しておりますが ご 不 審

接 支 払 制 度 を 活 用 するか 意 思 を 確 認 する 確 認 に 当 たっては 次 の 各 号 に 掲 げる 事 項 について 書 面 により 世 帯 主 の 合 意 を 得 て 代 理 契 約 を 締 結 するものとする (1) 医 療 機 関 等 が 本 市 に 対 し 世 帯 主

< F2D8ED089EF95DB8CAF939996A289C193FC91CE8DF42E6A7464>

(6) 事 務 局 職 場 積 立 NISAの 運 営 に 係 る 以 下 の 事 務 等 を 担 当 する 事 業 主 等 の 組 織 ( 当 該 事 務 を 代 行 する 組 織 を 含 む )をいう イ 利 用 者 からの 諸 届 出 受 付 事 務 ロ 利 用 者 への 諸 連 絡 事 務

する 婦 人 相 談 所 その 他 適 切 な 施 設 による 支 援 の 明 記 禁 止 命 令 等 をすることが できる 公 安 委 員 会 等 の 拡 大 等 の 措 置 が 講 じられたものである 第 2 改 正 法 の 概 要 1 電 子 メールを 送 信 する 行 為 の 規 制 ( 法

( 減 免 の 根 拠 等 ) 第 1 条 こ の 要 綱 は, 地 方 税 法 第 条 の 規 定 に 基 づ く 市 税 条 例 第 6 9 条 の 2 の 規 定 を 根 拠 と す る 身 体 障 害 者 等 に 対 す る 軽 自 動 車 税 の 減 免 の 具 体 的 な 対

サービス 内 容 サービス 内 容 アルフ ァオフ ィ ス キャビネッ ト 版 のサービス 内 容 についてご 案 内 します このたびは アルフ ァ オフ ィ ス キャ ビネ ッ ト 版 をお 申 し 込 みいただきま し て 誠 にあ り が と う ございます 本 冊 子 は アルフ ァ オフ

2.リリース 時 期 ( 予 定 ) 2-1.Eiボードダウンロードマネージャーの 公 開 2016 年 9 月 6 日 ( 火 ) 2-2.マイページのダウンロード 公 開 2016 年 9 月 6 日 ( 火 ) 2-3.オプションのCD 保 守 契 約 の 場 合 ( 送 品 開 始 日 )

目 次 利 用 に 際 しての 注 意 事 項... ユーザー 登 録... ログイン... 課 題 申 請... 5 装 置 予 約... 6 ライセンス 取 得 方 法... 7 利 用 料 金 の 確 認 ( 準 備 中 ) 外 部 発 表 登 録 の 方 法... 5 < 附

パソコンバンクWeb21 操作マニュアル[導入・事前設定編]

Microsoft Word - 目次.doc

学 校 紹 介 ページ 公 開 までの 流 れ 2 管 理 画 面 よりログイン お 知 らせいたしますID PASSにて 管 理 画 面 よりログインします さんぽう 進 学 ネットモバイル 看 護 医 療 進 学 ネット のIDにつきましては 2010 年 度 用 と2011 年 度 用 とで

全設健発第     号

4 応 募 者 向 けメニュー 画 面 が 表 示 されます 応 募 者 向 けメニュー 画 面 で [ 交 付 内 定 時 の 手 続 を 行 う] [ 交 付 決 定 後 の 手 続 を 行 う]をクリックします 10

目 次 1. Web メールのご 利 用 について Web メール 画 面 のフロー 図 Web メールへのアクセス ログイン 画 面 ログイン 後 (メール 一 覧 画 面 ) 画 面 共 通 項 目

目 次 1. Cyber Edy とは P3. Cyber Edy 決 済 の 方 法 P4 3. 画 面 の 説 明 P6 4. 変 更 が 発 生 した 場 合 P8 5. 特 定 の 取 引 を 検 索 する 場 合 P9 6. 検 索 結 果 をダウンロードする 場 合 P10

スライド 1

U/Cサーバ 業務システム間転送プログラムインターフェース仕様書

< E8BE08F6D2082C682B DD2E786C7378>

R4財務対応障害一覧

(別紙3)保険会社向けの総合的な監督指針の一部を改正する(案)

PC 移 行 は 以 下 の 流 れで 行 います 次 ページ 以 降 に 各 手 順 を 記 載 しますのでご 確 認 ください ( をクリックすると 該 当 の 説 明 にジャンプします ) 移 行 元 のPCでの 作 業 Step1 移 行 するデータをバックアップする (3ページ) [データ

OKIKAE-KAIRYOU-V3.xdw

<4D F736F F F696E74202D CA A837D F815B90A E096BE8E9197BF88C4>

<4D F736F F F696E74202D C90BF8F CC8DEC90AC97E181698A4F8D E8816A5F56322E707074>

<4D F736F F F696E74202D D382E982B382C68AF1958D8BE090A C98AD682B782E B83678C8B89CA81698CF6955C A2E >

小 売 電 気 の 登 録 数 の 推 移 昨 年 8 月 の 前 登 録 申 請 の 受 付 開 始 以 降 小 売 電 気 の 登 録 申 請 は 着 実 に 増 加 しており これまでに310 件 を 登 録 (6 月 30 日 時 点 ) 本 年 4 月 の 全 面 自 由 化 以 降 申

2.2 文 がセルの 行 の 高 さの 限 界 値 を 超 えた 場 合 の 処 理 本 アドインは 文 がセルの 行 の 高 さの 限 界 値 (409.5 ポイント)を 超 えている 場 合 に 行 を 追 加 し 自 動 調 整 する 機 能 を 備 えています 文 がセルの 行 の 高 さの

1. 会 員 情 報 の 照 会 / 変 更 ご 登 録 の 会 員 情 報 の 確 認 および 変 更 できます (1) 左 側 のサブメニューで[ 基 本 情 報 ]を 選 択 すると お 客 様 の 基 本 情 報 が 表 示 します (1) (2) [ 変 更 ] [ご 登 録 回 線 の

<4D F736F F D2093CD8F6F82AA954B977682C88C9A95A882CC94BB926682CC DD5F48508C668DDA E646F63>

操 作 の 手 順 : 個 人 住 民 税 一 括 納 付 / 新 規 依 頼 修 正 複 写 個 人 住 民 税 一 括 納 付 メニュー 個 人 住 民 税 一 括 納 付 新 規 依 頼 修 正 複 写 依 頼 / 委 託 者 情 報 入 力 (P100) 依 頼 修 正 / 委 託 者 情

目 次 ログイン 方 法... 3 基 本 画 面 構 成... 4 メールサービス... 5 メールサービス 画 面 構 成... 5 アカウント 詳 細 / 設 定... 6 高 機 能 フィルター... 7 ユーザーフィルター 設 定... 8 新 規 フィルターの 追 加... 8 My ホ

係 に 提 出 する 2 財 形 担 当 係 は 前 項 の 規 定 による 財 形 貯 蓄 等 の 申 込 みがあった 場 合 には 当 該 申 込 みの 内 容 を 点 検 し 財 形 貯 蓄 等 の 契 約 の 要 件 ( 第 6 条 に 規 定 する 基 準 を 含 む )を 満 たしている

研究者情報データベース

SPARQL Finder設置方法

( 別 途 調 査 様 式 1) 減 損 損 失 を 認 識 するに 至 った 経 緯 等 1 列 2 列 3 列 4 列 5 列 6 列 7 列 8 列 9 列 10 列 11 列 12 列 13 列 14 列 15 列 16 列 17 列 18 列 19 列 20 列 21 列 22 列 固 定

セルフメディケーション推進のための一般用医薬品等に関する所得控除制度の創設(個別要望事項:HP掲載用)

2 科 学 研 究 費 助 成 事 業 のトップページ 画 面 が 表 示 されます [ 研 究 者 ログイン]をクリック します 掲 載 している 画 面 は 例 示 です 随 時 変 更 されます 3 科 研 費 電 子 申 請 システムの 応 募 者 ログイン 画 面 が 表 示 されます e

雇用保険被保険者資格取得届(様式)編

3 会 場 使 用 費 の 支 払 い 大 会 当 日, 会 場 使 用 費 を 各 学 校 ご と に ま と め て 大 会 本 部 に 納 め る 4 各 地 区 主 任 に よ る 手 続 き 各 地 区 主 任 は, 参 加 校 分 の 大 会 申 込 書 地 区 大 会 結 果 を 代

Transcription:

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 161856 +09'00' Javaアプリケーション脆弱性事例調査資料 について この資料は Javaプログラマである皆様に 脆弱性を身 近な問題として感じてもらい セキュアコーディングの 重要性を認識していただくことを目指して作成していま す Javaセキュアコーディングスタンダード CERT/Oracle版 と合わせて セキュアコーディングに 関する理解を深めるためにご利用ください JPCERTコーディネーションセンター セキュアコーディングプロジェクト secure-coding@jpcert.or.jp 1

Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保 護 メカニズム 回 避 の 脆 弱 性 CVE-2012-4431 JVNDB-2012-005750 2

Apache Tomcatとは Java Servlet や JavaServer Pages (JSP) を 実 行 するため のサーブレットコンテナ(サーブレットエンジン) CSRF 対 策 のために トークンを 使 ったリクエスト フォームの 検 証 機 能 が 実 装 されている 3

脆 弱 性 の 概 要 Apache Tomcatには クロスサイトリクエストフォー ジェリ 対 策 をバイパスできる 脆 弱 性 が 存 在 する 脆 弱 性 を 悪 用 されることで 被 害 者 が 意 図 しない 操 作 を 実 行 させられる 可 能 性 がある Apache Tomcat 上 で 展 開 されるWebアプリケーションの 機 能 を 不 正 に 実 行 させることが 可 能 となる 被 害 者 バイパス!! 攻 撃 成 功!! 4

通 常 の 処 理 フロー Tomcat Webアプリケーションマネージャのサイト 停 止 機 能 における 処 理 フ ローを 解 説 する サイト 停 止 機 能 を 実 行 する 際 のApache Tomcatの 処 理 フロー 1 Tomcat Managerにクライアント(サイト 管 理 者 )がBasic 認 証 でログイン する 2 管 理 者 画 面 にアクセス 時 に アプリケーションはトークンを 発 行 しForm 要 素 に 埋 め 込 む さらにセッション 変 数 にトークンを 格 納 する 3 クライアントがサイト 停 止 機 能 を 実 行 しリクエストが 送 信 される 4 アプリケーションは 送 信 されてきたトークンとセッション 変 数 に 格 納 さ れているトークンが 同 一 かを 検 証 する 5 アプリケーションがリクエストを 受 信 し 処 理 を 実 行 する 6 結 果 を 含 むレスポンスがクライアント(サイト 管 理 者 )へ 送 信 される 5

サイト 停 止 機 能 実 行 時 アプリケーションはリクエストを 受 信 後 CSRFトークンを 検 証 を 実 施 し 正 規 のトークンが 送 信 されてきたときのみに 機 能 を 実 行 する セッション オブジェク ト トークン 検 証!! サイトの 停 止 HTTPリクエスト トークン GET /manager/html/stop?path=/&org.apache.catalina.filters.csrf_nonce=1a740989db7347fb6fe1ff02ec6a2c59 HTTP/1.1 Host www.example.com Cookie JSESSIONID=F11C4A2BDEE2759214A79D46F69B283E Authorization Basic Og== CSRFトークンは 付 与 され 検 証 もされている 6

dofilterメソッドによるトークンの 検 証 トークンの 検 証 はCsrfPreventionFilterクラスの dofilter メソッドで 実 行 される HTTPリクエスト トークンの 検 証 処 理 CsrfPreventionFilter.java public class CsrfPreventionFilter public void dofilter( 7

dofilterメソッドによるトークンの 検 証 セッションからトークンの 取 得 CsrfPreventionFilter.java public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( Constants.CSRF_NONCE_SESSION_ATTR_NAME); if (!skipnoncecheck) { 文 字 列 "org.apache.catalina.filters.csrf_nonce" String previousnonce = req.getparameter(constants.csrf_nonce_request_param);...(b) リクエストのセッションからセッ ション 変 数 を 取 得 し 変 数 noncecacheに 格 納 する セッション オブジェクト トークン noncecache トークン if (noncecache!= null &&!noncecache.contains(previousnonce)) {...(C) res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; 8

dofilterメソッドによるトークンの 検 証 リクエストからトークンの 取 得 CsrfPreventionFilter.java public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( Constants.CSRF_NONCE_SESSION_ATTR_NAME); リクエストのパラメータから 変 数 を 取 得 し 変 数 previousnonceに 格 納 する HTTPリクエスト GET /manager/html/stop?path=/&org.apache.catalina.filters.csr F_NONCE=1A740989DB7347FB6FE1FF02EC6A2C59 HTTP/1.1 Host www.example.com Cookie JSESSIONID=F11C4A2BDEE2759214A79D46F69B283E Authorization Basic Og== if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); previousnonce トークン if (noncecache!= null &&!noncecache.contains(previousnonce)) { res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; 文 字 列 "org.apache.catalina.filters.csrf_nonce" 9

dofilterメソッドによるトークンの 取 得 トークンの 比 較 CsrfPreventionFilter.java トークンの 検 証 処 理 を 実 行 する public class CsrfPreventionFilter extends FilterBase 下 記 の2つの { 条 件 が 両 方 とも 成 り 立 つ 場 合 は エラーとして 処 理 される public void dofilter(servletrequest request, ServletResponse 1 変 数 noncecacheの response,filterchain 値 に 変 数 chain) throws IOException, ServletException { 2 previousnonceが 含 まれていない 変 数 noncecacheがnullでない HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") noncecache LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( トークン Constants.CSRF_NONCE_SESSION_ATTR_NAME); 条 件 1nonceCacheにpreviousNonce の 値 が 含 まれているか? previousnonc e トークン 条 件 2nonceCacheはnullでないか? if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); noncecache トークン Is not null? if (noncecache!= null &&!noncecache.contains(previousnonce)) { res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; // 正 常 処 理 条 件 1 2がともに 成 立 しないときに 正 常 処 理 となる 10

攻 撃 コード ( 正 常 なリクエストとの 比 較 ) 通 常 のリクエスト GET トークン /manager/html/stop?path=/&org.apache.catalina.filters.csrf_nonce=1a74098 9DB7347FB6FE1FF02EC6A2C59 HTTP/1.1 Host www.example.com セッション Cookie JSESSIONID=F11C4A2BDEE2759214A79D46F69B283E Authorization Basic Og== 攻 撃 コード GET /manager/html/stop?path=/ HTTP/1.1 Host www.example.com Authorization Basic Og== ついていない 攻 撃 コードのポイント リクエストに 含 まれるトークン (GETパラメータの ord.apache.catalina.filters.csrf_nonce) とセッション(Cookieヘッダ)が 削 除 さ れている 11

攻 撃 コード 実 行 時 の 処 理 フロー サイト 停 止 機 能 を 実 行 する 際 のApache Tomcatの 処 理 フロー 1 Tomcat Managerにクライアント(サイト 管 理 者 )がBasic 認 証 でログイン する 2 管 理 者 画 面 にアクセス 時 に アプリケーションはトークンを 発 行 しForm 要 素 に 埋 め 込 む さらにセッション 変 数 にトークンを 格 納 する 3 クライアントがサイト 停 止 機 能 を 実 行 しリクエストが 送 信 される 4 アプリケーションは 送 信 されてきたトークンとセッション 変 数 に 格 納 さ れているトークンが 同 一 かを 検 証 する 5 アプリケーションがリクエストを 受 信 し 処 理 を 実 行 する 6 結 果 を 含 むレスポンスがクライアント(サイト 管 理 者 )へ 送 信 される 4の 検 証 処 理 が 不 十 分 だった!! 12

4 送 信 されてきたトークンとセッション 変 数 のトークンの 検 証 CsrfPreventionFilter.java public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( Constants.CSRF_NONCE_SESSION_ATTR_NAME); リクエストのセッションからセッ ション 変 数 を 取 得 し 変 数 noncecacheに 格 納 する セッション オブジェクト トークン noncecache トークン if (!skipnoncecheck) { 文 字 列 "org.apache.catalina.filters.csrf_nonce" String previousnonce = req.getparameter(constants.csrf_nonce_request_param);...(b) noncecache null if (noncecache!= null &&!noncecache.contains(previousnonce)) {...(C) res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; 攻 撃 コードではセッ ションが 削 除 されて おり セッションオ ブジェクトが 存 在 し ないため nullが 格 納 される 13

4 送 信 されてきたトークンとセッション 変 数 のトークンの 検 証 CsrfPreventionFilter.java public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( Constants.CSRF_NONCE_SESSION_ATTR_NAME); if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); if (noncecache!= null &&!noncecache.contains(previousnonce)) {...(C) res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; リクエストのパラメータから 変 数 を 取 得 し 変 数 previousnonceに 格 納 する HTTPリクエスト GET /manager/html/stop?path=/ HTTP/1.1 Host www.example.com Authorization Basic Og== previousnonce null 攻 撃 コードにはトーク ンが 含 まれていないの でnullが 格 納 される 文 字 列 "org.apache.catalina.filters.csrf_nonce" 14

4 送 信 されてきたトークンとセッション 変 数 のトークンの 検 証 CsrfPreventionFilter.java public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; @SuppressWarnings("unchecked") 1 LruCache<String> noncecache = (LruCache<String>) req.getsession(true).getattribute( 2 Constants.CSRF_NONCE_SESSION_ATTR_NAME); if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); if (noncecache!= null &&!noncecache.contains(previousnonce)) { res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; // 正 常 処 理 トークンの 検 証 処 理 を 実 行 する 下 記 の2つの 条 件 が 両 方 とも 成 り 立 つ 場 合 は エラーとして 処 理 される 変 数 noncecacheの 値 に 変 数 previousnonceが 含 まれていない 変 数 noncecacheがnullでない 15

4 送 信 されてきたトークンとセッション 変 数 のトークンの 検 証 CsrfPreventionFilter.java 1は 正 常 なトークンの 検 証 処 理 のため 問 題 ないが 問 題 は2 public class CsrfPreventionFilter extends FilterBase { の 条 件 変 数 noncecacheがnull = セッションがそのものが 存 在 public void dofilter(servletrequest request, ServletResponse response,filterchain chain) しない であり セッション throws IOException, 自 体 を ServletException 削 除 する(Cookieヘッダを { 削 除 す る)ことで 変 数 noncecacheがnullとなり このトークンの 検 トークンの 検 証 処 理 を 実 行 する 証 HttpServletRequest 処 理 をバイパスすることができる!! req = (HttpServletRequest) request; 下 記 の2つの 条 件 が 両 方 とも 成 り 立 つ 場 合 は エラーとして 処 理 される @SuppressWarnings("unchecked") 1 変 数 noncecacheの 値 に 変 数 LruCache<String> noncecache = previousnonceが 含 まれていない (LruCache<String>) req.getsession(true).getattribute( 2 変 数 noncecacheがnullでない Constants.CSRF_NONCE_SESSION_ATTR_NAME); if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); if (noncecache!= null &&!noncecache.contains(previousnonce)) { res.senderror(httpservletresponse.sc_forbidden); //エラー 処 理 return; // 正 常 処 理 16

セッションを 削 除 したリクエストの 処 理 通 常 セッションを 削 除 (Cookieヘッダを 削 除 )してしまうと Webアプリケー ションはユーザーを 認 識 できなくなり 認 証 エラーが 発 生 する 通 常 の Webサイト 一 般 のWebアプリ セッション(Cookie)なしの HTTPリクエスト しかし Apache TomcatのTomcat WebアプリケーションマネージャはBasic 認 証 を 使 用 しており 認 証 にセッション(Cookieヘッダ)を 使 用 していない Basic 認 証 ではAuthorizationヘッダを 使 用 する セッション(Cookie)なしの HTTPリクエスト CSRF 対 策 であるトークン 検 証 処 理 にてセッション(Cookieヘッダ)が 無 い 場 合 を 想 定 していなかったため 認 証 エラーが 発 生 せず 機 能 が 実 行 されてしまう!! 17

今 回 のアプリケーションにおける 具 体 的 な 問 題 点 セッションが 存 在 しないケース(Cookie 以 外 によるセッ ション 管 理 )を 想 定 していなかった セッションが 存 在 しない 場 合 は CSRF 対 策 をパスしてし まっていた 問 題 点 に 対 してどうすべきだったか アプリケーションの 仕 様 ( 今 回 の 場 合 はセッションの 管 理 方 式 )を 確 認 し 適 切 なCSRF 対 策 を 選 択 する 必 要 があっ た 18

修 正 版 コード 脆 弱 性 はバージョン7.0.32 6.0.36にて 修 正 が 適 用 されている サイト 停 止 機 能 を 実 行 する 際 のApache Tomcatの 処 理 フロー 1 Tomcat Managerにクライアント(サイト 管 理 者 )がBasic 認 証 でログイ ンする 2 管 理 者 画 面 にアクセス 時 に アプリケーションはトークンを 発 行 しForm 要 素 に 埋 め 込 む さらにセッション 変 数 にトークンを 格 納 する 3 クライアントがサイト 停 止 機 能 を 実 行 しリクエストが 送 信 される 4 アプリケーションは 送 信 されてきたトークンとセッション 変 数 に 格 納 さ れているトークンが 同 一 かを 検 証 する 5 アプリケーションがリクエストを 受 信 し 処 理 を 実 行 する 6 結 果 を 含 むレスポンスがクライアント(サイト 管 理 者 )へ 送 信 される 4の 処 理 におけるコードが 修 正 されている 19

修 正 版 コード public class CsrfPreventionFilter extends FilterBase { public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getsession(false); @SuppressWarnings("unchecked") LruCache<String> noncecache = (session == null)? null (LruCache<String>) session.getattribute( Constants.CSRF_NONCE_SESSION_ATTR_NAME); if (!skipnoncecheck) { String previousnonce = req.getparameter(constants.csrf_nonce_request_param); CsrfPreventionFilter.java if (noncecache == null previousnonce == null!noncecache.contains(previousnonce)) { res.senderror(denystatus); return; // 正 常 処 理 セッションがnullである 場 合 またはリクエス トにトークンが 含 まれ ていない 場 合 はエラー として 処 理 する 20

参 考 文 献 OWASP CSRFGuard Project https//www.owasp.org/index.php/categoryowasp_csrfguard_project IPA ISEC セキュア プログラミング 講 座 Webアプリケーション 編 第 4 章 セッション 対 策 リクエスト 強 要 (CSRF) 対 策 https//www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html 安 全 なウェブサイトの 作 り 方 IPA https//www.ipa.go.jp/security/vuln/websecurity.html 21

著 作 権 引 用 や 二 次 利 用 について 本 資 料 の 著 作 権 はJPCERT/CCに 帰 属 します 本 資 料 あるいはその 一 部 を 引 用 転 載 再 配 布 する 際 は 引 用 元 名 資 料 名 および URL の 明 示 を お 願 いします 記 載 例 引 用 元 一 般 社 団 法 人 JPCERTコーディネーションセンター Java アプリケーション 脆 弱 性 事 例 解 説 資 料 Apache Tomcat における CSRF 保 護 メカニズム 回 避 の 脆 弱 性 https//www.jpcert.or.jp/securecoding/2012/no.09_apache_tomcat.pdf 本 資 料 を 引 用 転 載 再 配 布 をする 際 は 引 用 先 文 書 時 期 内 容 等 の 情 報 を JPCERT コーディ ネーションセンター 広 報 (office@jpcert.or.jp)までメールにてお 知 らせください なお この 連 絡 により 取 得 した 個 人 情 報 は 別 途 定 めるJPCERT コーディネーションセンターの プライバシーポ リシー に 則 って 取 り 扱 います 本 資 料 の 利 用 方 法 等 に 関 するお 問 い 合 わせ JPCERTコーディネーションセンター 広 報 担 当 E-mailoffice@jpcert.or.jp 本 資 料 の 技 術 的 な 内 容 に 関 するお 問 い 合 わせ JPCERTコーディネーションセンター セキュアコーディング 担 当 E-mailsecure-coding@jpcert.or.jp 22