ブックマーク / blog.tokumaru.org (27)

  • 徳丸浩の日記

    エグゼクティブサマリ IEのクッキーモンスターバグはWindows 10では解消されているが、Windows 7とWindows 8.1では解消されていない。このため、地域型JPドメイン名と都道府県型JPドメイン名上のサイトは、クッキーが外部から書き換えられるリスクが現実的に存在しするので、セキュリティ対策上もクッキー書き換えのリスクを考慮しておく必要がある。 クッキーが外部から変更された際のリスク ウェブサイトの利用者が第三者によりクッキーの値を変更されると、以下のような攻撃が可能になります。 セッションIDの固定化攻撃(脆弱性がある場合) クッキーを攻撃経路とするクロスサイトスクリプティング攻撃(脆弱性がある場合) 一部のCSRF対策の回避 「一部のCSRF対策」と書いたのは、OWASPの資料ではDouble Submit Cookieと呼ばれるもので、乱数値をクッキーとリクエストパラ

  • 『最初に「読む」PHP』は全体的にとても良いが惜しい脆弱性がある

    最初に「読む」PHP(クジラ飛行机)を読みました。書にはセキュリティ用語(クロスサイトスクリプティング、SQLインジェクション等)はほとんど出てきませんが、脆弱性についてよく配慮された記述となっています。しかし、その細部の詰めが甘く、脆弱性が混入してしまいました。その内容を報告したいと思います。 クロスサイトスクリプティング 出力時にHTMLエスケープするという原則を比較的早い段階で説明しています。その説明が素晴らしいと思いました。 ユーザーから送信されたデータを、PHPを使ってそのまま画面に表示することは、レイアウトの崩れや セキュリティ上の危険につながります。必ず、HTMLに変換してから表示します。そこで、画面に「(^o^)<Hello」と表示するプログラムを作ってみましょう。 「HTMLに変換して」という表現がとてもいいですね。難しくいうと、Content-Typeをtext/pl

    MinazukiBakera
    MinazukiBakera 2015/05/18
    『最初に「読む」PHP』は全体的にとても良いが惜しい脆弱性がある
  • キャッシュ制御不備の脆弱性にご用心

    古い書籍に掲載されたPHP記述の掲示板ソフトを動かしていると、ログアウト処理がうまく動作していないことに気がつきました。チェックの方法ですが、ログアウト処理の脆弱性検査の簡単なものは、「安全なウェブサイトの作り方」別冊の「ウェブ健康診断仕様」に記載されています。 (J)認証 ログアウト機能はあるか、適切に実装されているか ログアウト機能がない、あるいはログアウト後「戻る」ボタンでセッションを再開できる場合 この仕様書にある通り、『ログアウト後「戻る」ボタンでセッションを再開できる』状態でした。 おそらくセッション破棄がきちんと書かれていないのだろうと思いログアウト部分のソースを見ると、以下の様な処理内容でした(オリジナルからはリライトしています)。 <?php // logout.php require_once('common.php'); // 共通の設定・処理 session_sta

  • New Class of Vulnerability in Perl Web Applicationsの紹介

    Redditを眺めておりましたら以下の記事が目に止まりました。 New Class of Vulnerability in Perl Web Applications ざっくりというと以下の様な内容です CGI.pmのparamメソッドの返り値をハッシュに突っ込んでいる箇所がある クエリ文字列に同名のパラメータを複数セットすると、配列値が返る 配列をハッシュに突っ込むことにより、別のキーの値が変更される 私はこの内容に興味を持ちましたので、以下に詳しく説明します。 PoC 元エントリにもPoCが出ておりますが、少し手をいれたものを以下に示します。 #!/usr/bin/perl use strict; use CGI; my $cgi = new CGI; my $loginname = 'smith'; my $password = 'a3k!sz9'; my %user = ('log

  • SQLインジェクションゴルフ - 認証回避の攻撃文字列はどこまで短くできるか?

    コードゴルフという競技があります。与えられた問題(例えばFizzBuzz)を解くコードを、いかに短いプログラムで実現できるかというものです。 脆弱性の世界でもXSS Golfというものは既にあるようで、我らが はせがわようすけ氏にも、「短いXSSの話」というプレゼン資料が公開されています。第2回のOWASP Japanローカルチャプターミーティングでの講演ですね。これ、面白いので、まだ見ていない方はぜひご覧になって下さい。 XSSがあるならSQLインジェクションはどうかということで、ちょっと考えてみました。この手の遊びは、問題のルールが命というというところはありますが、最初なのであまり厳密に考えずにだらだらとやってみます。 攻撃対象プログラム やはり、SQLインジェクション攻撃でみなさまおなじみの認証回避がよいのではないかと思いました。拙著「体系的に学ぶ 安全なWebアプリケーションの作り

    SQLインジェクションゴルフ - 認証回避の攻撃文字列はどこまで短くできるか?
    MinazukiBakera
    MinazukiBakera 2013/08/28
    「'|'1」が「ごるふ」となる理由はこちら参照。
  • MACHIDA.KANAGAWA.JPはなぜ「まぎらわしい」のか

    私は検証用にいくつかのドメイン名を登録していますが、そのうちの一つが「発掘」され、世間をお騒がせすることになってしまいました。 このページのページビューは、8月16日(金) 9:00現在で、31438となっています。ずいぶんよく参照されています。ちなみに、「物の」町田市のホームページは下記の通りです。 しかし、上記のような主張はいままでにもあったし、今更二番煎じのこのネタが、上記のような簡素な内容で話題になる理由としては、やはり MACHIDA.KANAGAWA.JPというドメイン名にあるのでしょう。これは「都道府県型JPドメイン名」というもので、「日国内に住所を持つ個人・組織であれば、いくつでも登録ができます」(こちらより引用)。 では、どうして紛らわしいドメイン名が登録できるかという理由を説明します。 都道府県型JPドメイン名ができる前に地域型JPドメイン名というものがあり、多くの

    MACHIDA.KANAGAWA.JPはなぜ「まぎらわしい」のか
    MinazukiBakera
    MinazukiBakera 2013/08/16
    http://t.co/VcKCecox4Q はなぜ「まぎらわしい」のか」 Firefoxが対応しているというのが凄いですね (地方公共団体ドメイン名の全リストを持つという実装だったはず)。
  • SQLインジェクションゴルフ - なんと3文字で認証回避が可能に

    昨日のエントリ「SQLインジェクションゴルフ - 認証回避の攻撃文字列はどこまで短くできるか?」にて、認証回避の攻撃文字列が5文字にできる(「'OR'1」)ことを示しましたが、@masa141421356さんと、やまざきさん(お二人とも拙著のレビュアーです)から、idとpwdにまたがった攻撃例を示していただきました。やまざきさんの例は、MySQL限定ながら、なんと3文字です。これはすごい。 @masa141421356さんの攻撃例 @masa141421356さんのツイートを引用します。 @ockeghem 大抵のDBでid=''OR' AND pwd='>' ' が通ると思います(id側に「'OR」, pwd側に「>' 」で6文字)。長さ0の文字列がNULL扱いされないDBなら最後のスペースを消して5文字です。 — masa141421356 (@masa141421356) June

    MinazukiBakera
    MinazukiBakera 2013/06/25
    「SQLインジェクションゴルフ - なんと3文字で認証回避が可能に」。まさかの 'tanaka' = 0
  • ヤフー株式会社様に「秘密の質問と回答」に関して要望します

    拝啓、貴社ますますご清栄のこととお慶び申し上げます。日頃は格別のご高配を賜り、あつくお礼申し上げます。さて、さっそくですが、表題の件についてお願いがあり、ご連絡差し上げました。 私は東京都品川区在住の貴社サービスの一ユーザーです。Yahoo! IDの登録が2001年3月、Yahoo!プレミアムは2003年 2月からですので、十年来のユーザーと言うことになり、現在はヤフオクやYahoo! Boxを利用しております。どうぞ、お見知りおきのほど、よろしくお願いいたします。 さて、ご連絡差し上げたのは、表題に述べたように「秘密の質問と回答」に関する要望です。と言いますのは、報道などで「秘密の質問と回答」が漏洩したことを知ったからです。 ヤフーは23日、今月16日に不正アクセスで流出した「ヤフージャパン」のID2200万件のうち、約149万件についてはパスワードと、パスワード変更のために使う「秘密の

    MinazukiBakera
    MinazukiBakera 2013/05/24
    「ヤフー株式会社様に「秘密の質問と回答」に関して要望します」
  • Ruby on Railsのfind_by_*メソッドにSQLインジェクション脆弱性(CVE-2012-5664) | 徳丸浩の日記

    Ruby on Rails(3.2.9, 3.1.8, 3.0.17以前)のfind_by_*メソッドにSQLインジェクション脆弱性が見つかりました(CVE-2012-5664)。このエントリではその概要と対策について説明します。 概要 Ruby on Railsのfind_by_*メソッドの引数としてハッシュを指定することで、任意のSELECT文を実行できる脆弱性があります。 検証 Ruby on Rails3.2.9の環境を用意して、以下の2つのモデルを用意しました。 $ rails g scaffold user name:string email:string $ rails g scaffold book author:string title:string モデルUserは個人情報を保持しており、自分自身の情報のみが閲覧できるという想定です。モデルBookは書誌データベースであ

    Ruby on Railsのfind_by_*メソッドにSQLインジェクション脆弱性(CVE-2012-5664) | 徳丸浩の日記
    MinazukiBakera
    MinazukiBakera 2013/01/04
    「Ruby on Railsのfind_by_*メソッドにSQLインジェクション脆弱性(CVE-2012-5664) 」
  • Joomla2.5.2の権限昇格脆弱性

    このエントリでは、Joomla!2.5.2まで(1.6.x、1.7.xも含む)に存在した権限昇格の脆弱性について説明します。 今年5月16日に、情報通信研究機構(NICT)から以下のプレスリリースがありました。

    Joomla2.5.2の権限昇格脆弱性
    MinazukiBakera
    MinazukiBakera 2012/12/21
    「Joomla2.5.2の権限昇格脆弱性」……なかなか興味深いです。バリデーションエラー時にPOSTされたデータ全てをセッションに突っ込んでいて、そこで所属グループのパラメータを投入したらそれが生きてしまっていたと。
  • Tポイントツールバーを導入するとSSL通信の履歴までもが盗聴可能になる

    twitterなどでTポイントツールバーの利用規約が話題になっています。このエントリでは、Tポイントツールバーを実際に導入して気づいた点を報告します。結論として、当該ツールバーを導入すると、利用者のアクセス履歴(SSL含む)が平文で送信され、盗聴可能な状態になります。 追記(2012/08/10 20:10) たくさんの方に読んでいただき、ありがとうございます。一部に誤解があるようですが、ツールバーが送信している内容はURLだけで、Cookieやレスポンスまでも送信しているわけではありません。URLを送信するだけでも、以下に示す危険性があるということです。 追記終わり 追記(2012/08/13 23:50) ポイントツールバーにバージョンアップがあり、WEB閲覧履歴の送信がSSL通信に変更されました。従って、WEB閲覧履歴が盗聴可能な状況は回避されました。日22:50頃確認しました。

    Tポイントツールバーを導入するとSSL通信の履歴までもが盗聴可能になる
    MinazukiBakera
    MinazukiBakera 2012/08/10
    「Tポイントツールバーを導入するとSSL通信の履歴までもが盗聴可能になる」
  • PHPの入門書を書くことになりました&レビュアー募集のお知らせ

    PHPの入門書をソフトバンククリエイティブさん出すことになりました。かねがね、PHPの入門書がよろしくないという問題意識を持ち、かつ色々な場でお話ししておりましたが、またしても「言い出しっぺの法則」が発動して、自分で書くことになりました。 PHPの入門書を(たぶん)10冊以上読んで(あるいは眺めて)、以下のような感触を持っています。 ものすごく初歩的なは悪くないが、行き着くゴールが極めて限定される SQLなどまで行き着く入門書は、後述する欠点を持つ傾向がある 中級者・上級者向けについては、良いものが出て来た PHP入門書の欠点というのは以下のようなものです。私の読んだPHP入門書は、次のいずれかに該当します。 執筆者のスキルが低いために説明やサンプルの品質が低い 執筆者のスキルは高いはずだが、説明のスキルが低く、不正確 執筆者のスキルが高く説明も正確だが、初心者には難しく入門書でなくなっ

    MinazukiBakera
    MinazukiBakera 2012/07/06
    「最初は自分も笑っていたのですが、段々顔が引きつってくるのを感じました」
  • CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823)

    CGI環境でPHPを動作させているサイトには、リモートからスクリプト実行を許してしまう脆弱性があります。php.netから提供されている修正リリース(PHP 5.3.12 / PHP 5.4.2)は不完全なため、該当するサイトは至急回避策を導入することを推奨します。 概要 CGIの仕様として、クエリ文字列に等号を含めない場合は、クエリ文字列がCGIスクリプトのコマンドライン引数として指定されます。 例えば、http://example.jp/test.cgi?foo+bar+bazという呼び出しに対しては、test.cgiは以下のコマンドラインで呼び出されます。 test.cgi foo bar baz この仕様を悪用して、CGI版のPHPにコマンドライン引数としてPHPのオプションを指定できます。例えば、http://example.jp/test.php?-s というリクエストは、-s

    CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823)
    MinazukiBakera
    MinazukiBakera 2012/05/07
    「CGI版PHPにリモートからスクリプト実行を許す脆弱性」。CGI版PHP自体めったにないとは思いますが、攻撃は簡単お手軽かつ効果大なので要注意。
  • 悪いサニタイズ、良い(?)サニタイズ、そして例外処理

    先日のエントリ「処理開始後の例外処理では「サニタイズ」が有効な場合もある」は、素材の消化不足、私の表現の未熟等から、一部で誤解を招いてしまったようで申し訳ありません。アプローチを変えて、サニタイズについてもう一度考えてみたいと思います。結論から言えば、悪いサニタイズはあっても、「良いサニタイズ」はないと考えます。しかしながら、状況によっては妥協の産物としてサニタイズを使うことは、あり得ると考えます。 稿で用いる「サニタイズ」の定義 サニタイズという用語は、歴史的に都合の良いように使われてきた歴史があり、あらためてネット検索して見ると、当に多様な使われ方をしていると感じました。その様子は、高木浩光氏のブログ記事『「サニタイズ」という言葉はもう死んでいる』からも伺えます。 ここでは、議論の都合上、以下をサニタイズの定義として用いることにします。 サニタイズとは、 主にセキュリティ上の目的で

    MinazukiBakera
    MinazukiBakera 2012/04/03
    「サニタイズ」という言葉を使った瞬間にもう混乱が避けられない感。
  • 処理開始後の例外処理では「サニタイズ」が有効な場合もある

    このエントリでは、脆弱性対処における例外処理について、奥一穂氏(@kazuho)との会話から私が学んだことを共有いたします。セキュアプログラミングの心得として、異常が起これば直ちにプログラムを終了することが推奨される場合がありますが、必ずしもそうではないというのが結論です。 はじめに Webアプリケーションの脆弱性対策では、脆弱性が発生するのはデータを使うところであるので、データを使う際の適切なエスケープ処理などで対処するのがよいと言われます。しかし、処理内容によってはエスケープができない場合もあり、その場合の対処についてはまだ定説がないと考えます。 エスケープができない場合の例としては、以下があります。 SQLの数値リテラルを構成する際に、入力に数値以外の文字が入っていた メール送信しようとしたが、メールアドレスに改行文字が入っていた 入力されたURLにリダイレクトしようとしたところ、U

    MinazukiBakera
    MinazukiBakera 2012/04/02
    出力時に例外やエラーが発生したときどう処理すべきかという話で、これを「サニタイズ」と呼ぶのはちょっと違和感が……。
  • はてなブックマークボタンを外しました

    この数日間問題になっている「はてなブックマークボタン」ですが、当日記およびHASHコンサルティングオフィシャルブログにも、当該ボタンがついていました。何が問題であるかは以下が詳しいですが、要は、はてなの管理下でない当サイトで、はてなのブログパーツが読者の皆様のトラッキングをしていることが問題です。 参考: はてなブックマークボタンは2011年9月1日より行動情報の取得をしている ブログパーツやソーシャルボタンの類でアクセスログが残るのは当然だけどトラッキングされるのは当たり前にはなっていない はてなブックマークボタンのトラッキング問題で高木浩光先生が決別ツイートをするに至った経緯まとめ 私は、2006年11月に、はてなダイアリーで日記を書き始めて以来、一貫してはてなのサービスを利用してきましたので、当ブログにも「はてなのボタンもつけとかなきゃな」程度のノリでボタンをつけておりました。その時

    MinazukiBakera
    MinazukiBakera 2012/03/12
    この問題も徳丸本で言及済みだったというのは隙がなさすぎる。
  • 難読化していないAndroidアプリケーションは脆弱性か

    このエントリでは、Androidアプリケーションにおいて、難読化が施されていない場合、脆弱性にあたるかについて議論します。 はじめに Androidアプリケーションは主にJava言語で記述され、DEX形式のファイルにコンパイルされたコードを、DalvikというJava互換VM上で実行します。DEXおよびAPKファイルの仕様は公開されており、DEXにはクラスやメソッド等のシンボル名も含まれているため、リバースエンジニアリングが容易であると言われています。このため、Android SDKには標準でProGuardという難読化ツールが添付されています。 それでは、難読化の目的はそもそも何で、難読化でその目的は達成されるのでしょうか。 難読化の目的 Webアプリケーションの場合は、重要なロジックは主にサーバー側に存在するため、ソースコードを外部から取得することはできません。これに対して、スマートフ

    MinazukiBakera
    MinazukiBakera 2012/02/20
    「ソースコード診断をしていると「まるで難読化されたような」読むのが嫌になるソースコードに出くわすこともしばしばですので、プログラムの下手な人に依頼すると思わぬ効果があるかもしれません(冗談です)。」
  • スマートフォンアプリケーションでSSLを使わないのは脆弱性か

    このエントリでは、スマートフォンアプリケーションの通信暗号化の必要性について議論します。 はじめに 先日、スマートフォンアプリケーションのセキュリティに関するセミナーを聴講しました(2月8日追記。講演者からの依頼によりセミナーのサイトへのリンクをもうけました)。この際に、スマートフォンアプリケーションの脅威に対する共通認識がまだないという課題を改めて感じました。その課題を痛感できたという点で、セミナーは私にとっては有益でした。 このため、当ブログではスマートフォンアプリケーションの話題をあまり取り上げていませんでしたが、今後は、とりあげようと思います。まずは、スマートフォンアプリケーションでは暗号化を必須とするべきかという話題です。この話題は、前記セミナーでもとりあげられていました。 暗号化の目的は何か まず、暗号化の必要性を論じるためには、暗号化の目的を明確にする必要があります。前記セミ

    MinazukiBakera
    MinazukiBakera 2012/02/06
    「告知せず平文通信している場合は、アプリケーションの脆弱性とみなすことを提案」
  • Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策

    28C3(28th Chaos Communication Congress)において、Effective Denial of Service attacks against web application platforms(Webプラットフォームに対する効果的なサービス妨害攻撃)と題する発表がありました(タイムスケジュール、講演スライド)。 これによると、PHPをはじめとする多くのWebアプリケーション開発プラットフォームに対して、CPU資源を枯渇させるサービス妨害攻撃(DoS攻撃)が可能な手法が見つかったということです。この攻撃は、hashdos と呼ばれています。 概要PHPなど多くの言語では、文字列をキーとする配列(連想配列、ハッシュ)が用意されており、HTTPリクエストのパラメータも連想配列の形で提供されます。PHPの場合、$_GET、$_POSTなどです。 連想配列の実装には

    MinazukiBakera
    MinazukiBakera 2011/12/31
    「ハッシュ値が同じになるキーを多数POSTパラメータに含ませることにより、CPU資源を枯渇させる攻撃」
  • KDDIの新GWで「かんたんログイン」なりすましの危険性あり直ちに対策された

    au/KDDIの2011年秋冬モデル(現時点ではF001のみ)にてEZwebとPCサイトビューア(以下PCSV)のゲートウェイが統合されたことに伴い、かんたんログインを実装しているサイトに対して、F001のPCSVからJavaScriptを用いた「なりすまし」攻撃ができる状態でした。この問題をKDDIに通報したところ、直ちに対策が取られ、現在は安全な状態です。以下、詳しく報告します。 目次概要 経緯 何が問題か 経緯説明(1)基的なチェックは対処済みだった 経緯説明(2)ハイフンをアンダースコアに変えるトリックは対策済み 経緯説明(3)海老原氏が発見したトリックとは 経緯説明(4)KDDIに連絡→翌日に対処 実証例 外部からJavaScriptを実行できる条件 影響を受けるサイトの条件 影響 対策 今回の問題は、端末あるいはau設備の脆弱性なのか まとめ 概要以前、「EZwebの2011

    KDDIの新GWで「かんたんログイン」なりすましの危険性あり直ちに対策された
    MinazukiBakera
    MinazukiBakera 2011/11/29
    "X.UP.SUBNO" が "X_UP_SUBNO" になって突破できた話。