パスワードを忘れた? アカウント作成

MatsuTakeさんのトモダチの日記。 アナウンス:スラドとOSDNは受け入れ先を募集中です。

13021494 journal
日記

emkの日記: リンク/ジャンクション作成ツール v1.07 1

日記 by emk

説明ページ
Windows 10 Insider Previewの、特権不要でのシンボリックリンク作成に対応。

SeCreateSymbolicLinkPrivilegeが定義されているが有効にしなくても作成可能な状況など想定していなかったので、特権の有効化に失敗すると作成をあきらめていたが、エラーを無視して作成を試みるように変更した。

公式には特権不要でのシンボリックリンク作成はBuild 14972から対応したことになっているが、これはSYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEを初めてサポートしたビルドのようで、それ以前のビルドでも開発者モードにすれば作成可能(しかも特別なフラグも不要)だった模様。少なくともBuild 14931ではすでに対応していたことを確認(それ以前のビルドは手元に残っていないので不明)。

174087 journal

emkの日記: HTML/XMLの文字参照にサロゲートペアは使えない 1

日記 by emk
HTML 4

文字参照で使える符号位置(厳密には符号位置ではないのですがここでは深入りしません)の範囲はSGML宣言で定められています。

55296   2048    UNUSED  -- SURROGATES --

このように、55296(十六進数で表すとD800)からの2048個(DFFFまで)の数字は未使用となっています。

XML

文字参照の文法は以下の生成規則により規定されています

[66]       CharRef       ::=       '&#' [0-9]+ ';'
            | '&#x' [0-9a-fA-F]+ ';'    [WFC: Legal Character]

[WFC: Legal Characeter]の定義を参照すると、文字参照により参照される文字はCharの生成規則に合致しなければならないと書かれています。

Charの生成規則は以下のように定義されています。

[2]       Char       ::=       #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]    /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

このように、XMLにおいて(たとえ文字参照であっても)D800..DFFFのコードポイントを使うと整形式制約に違反します。定義に書かれているように、整形式制約違反はfatal errorです。fatal errorが発生した場合、XMLプロセッサは通常処理を続行してはならないとも明記されています。もっともRSSリーダーにはXMLパーサーすら使わないようなきわめていい加減な実装のものが数多くあるので、通ってしまうこともあるようです。

HTML5

XMLの仕様書と比べると実際に手続き型のプログラミング言語が行う処理を追いかけるような形で書かれていて、非常に読みやすいです。文字参照の処理は、最新の編集者草案では以下のように定義されています。

Otherwise, if the number is in the range 0xD800 to 0xDFFF or is greater than 0x10FFFF, then this is a parse error. Return a U+FFFD REPLACEMENT CHARACTER.

このように、文字参照のD800..DFFFはU+FFFDに置き換えなければならないと明記されています。今のところ仕様に忠実なのは、「HTML5対応」を謳う主要ブラウザの中ではFirefoxだけのようです。もっとも2009年8月25日時点の草案では

Otherwise, if the number is greater than 0x10FFFF, then this is a parse error. Return a U+FFFD REPLACEMENT CHARACTER.

Otherwise, return a character token for the Unicode character whose code point is that number.

だったので無理もないかもしれません。どうでもいいですがパーサーの規定のこんな基本的な部分がコロコロ変わるような状態でどうしてブラウザが「HTML5対応」を名乗れるのか不思議でなりません。仕様が固まるまでMicrosoftが対応を尻込みするのも当然でしょう。

これらの規定は、HTML/XMLにおいてUTF-16のサロゲートペアが使えないという意味ではないことに注意してください。文字参照はUTF-16ではないというだけです。符号位置(code position)/コードポイント(code point)と符号単位(code unit)を混同してはいけません。

BMP外の文字を文字参照で表記するときは、U+10000以上のコードポイントを直接表記するのが正しいやり方ですが、スラッシュドット・ジャパンの日記システムはこの表記をまともに処理してくれません。BMP外の文字を受け付けるように改修するのが大変なら、まともなRSSリーダーには読めないRSSやまともなブラウザが文字化けを起こすHTMLを吐く点(あるいはそういうものの出力につながる入力を受け付ける点)だけでも早く修正していただきたいところです。

もちろん安岡先生はこの程度のことは当然知っていて、BMP外の文字を受け付けないスラッシュドット・ジャパンの日記システムへの抗議のためにわざとやっているのでしょう。

381392 journal

jbeefの日記: 投稿記事リストの退避 その4

日記 by jbeef
379771 journal

jbeefの日記: 投稿記事リストの退避 その3

日記 by jbeef
377404 journal

jbeefの日記: 投稿記事リストの退避 その2

日記 by jbeef
376693 journal

jbeefの日記: 採用されたのに却下と記録

日記 by jbeef
タレコミページの記録に、

2004-04-17 20:06:11 電波タグで売上げ倍増、消費者はタグに好意的 (articles,privacy) (却下)

と出ていた。ユーザページでは採用として記録されているのに、「却下」とはこれ如何に?

まあ、間違って記録されても気にしないのだけれど、こういうことも起きるんだなと。一旦却下になった後で拾われたとかかなあ。

369628 journal

jbeefの日記: 投稿記事リストの退避 1

日記 by jbeef
採用されたタレコミが24件になったので、この次からは消えていってしまう。自分用にメモしておく。ちなみにタイトルはタレコミ時のもの。
694480 journal

jbeefの日記: ひさびさに脆弱性ネタをタレこんだ

日記 by jbeef
このところ忙しくてBUGTRAQを700通あまり読み残していたのだが、一気に読み漁ったところ、今まで気づいてなかったネタがいくつか見つかった。いちおう公平にと思い、Netscapeネタ、IEネタ、Javaネタを連続してタレこんだ。

2003-01-18 18:54:29 Netscape Mailのゴミ箱は空にしても消えない
2003-01-18 21:12:02 IEのXSSバグで任意サイトのCookieが漏洩
2003-01-19 01:59:16 各社のJava VMに砂場の枠が外れる脆弱性
2003-01-19 03:55:16 Cookieをオフにするなら「UserDataの常設」もオフに

IEネタの採用は早いなあ(^_^;)。13分。はや。たまたまなんだろうけどね。Netscapeネタは小ネタでしたか。

帰ってきてみると、採用されていたIEネタのストーリーがずいぶんと荒れている。脆弱性ネタをここにタレこむのは一昨年の暮れから始めた。一時期はBUGTRAQをウォッチするとともにできるだけ早くタレこむようにしていた。当初からずっと同じ方針で、BUGTRAQで既に公開されてしまった攻撃方法を日本語で伝えるようにしてきた。日本の技術者には言語の壁があって、この種の情報に疎くなっていると以前から思っていたからだ。以前はあんな反応はなかったのだけどなあ。

383582 journal

jbeefの日記: slashcodeが一部ユーザのパスワードを漏らす(3)

日記 by jbeef
slashcodeのメンテナのひとりであるJamie McCarthy氏が、9月18日にBUGTRAQに流した記事によると、
  • 最初の報告者とこの件に関心を持った何人かの人々とメールをやりとりし、彼らから提供されたreferer_logに記録された事例を確かめたところ、その全てが、無効なパスワードとなっていた。
  • この方法でログインしたとき、ログインに成功した場合には、自動的に問題のないURL(ユーザ名やパスワードを含まない)にリダイレクトしているので、それらが漏れることはない。これは少なくともversion 1.0.0(2000年3月)からこのようにしてきている。
  • それに対して、ログインに失敗した場合、つまり、パスワードを変更していて、ブックマークしたときのものではログインできない場合には、リダイレクトがなされない。

のだという。

つまり、ユーザ名とパスワードを含むURLが漏れたのは、ログインに失敗したときなのだろうというわけだ。

この状況について同氏は、ユーザが次のようにしている場合には問題となっているだろうとしている。

  • 他のサイトで同じユーザ名を使用していて、
  • 他のサイトで同じパスワードを使用していて、
  • 辞書攻撃されるようなパスワードを使用していて、
  • 「全く安全ではない」リンクをブックマークしていて、
  • 後にそのパスワードを変更していて、
  • そのブックマークを使い続けている(もうログインできないのに)場合

ほとんど滅多にそんな場合はないという感じだが、同氏が挙げなかった次のシナリオも考えられるのではないだろうか。

  • 「全く安全ではない」リンクをブックマークしていて、
  • 後にパスワードを変更していて、
  • その後にそのブックマークを使ったことがあり(ログインはできなかったはず)、
  • さらにその後にパスワードを元のものに戻して、現在もそれを使っている場合

こちらは、それなりに該当者がいそうな気がするので、注意が必要だと思う。

同氏は、slashcodeを次のように変更すると述べている。

  • ログインに失敗した場合でも、問題のないURLにリダイレクトするようにする。
  • この"totally insecure"オプションをユーザに提供するには、変数のセットが必要となるようにする。これはデフォルトでオフにする。

今現在、slashdot.jpで試してみると、ログインに失敗したときもリダイレクトされるようになっているようだ。既に対策されたバージョンに置き換えられているのだろうか。

383581 journal

jbeefの日記: slashcodeが一部ユーザのパスワードを漏らす(2)

日記 by jbeef
タレコミでは紙面の都合上簡潔に書かざるを得なかったので、ここではもう少し具体的に説明をしてみる。

まずは、スラッシュドットにログインした状態でパスワードの変更の画面に行ってみてほしい。「jbeef (1278)のパスワード変更」のタイトルの下に以下のメッセージがあるはずだ。

このリンク をクリックすると,自動的にログインすることができます.クリックした先のページをブックマークしてください.全く安全ではないですが,とても便利です.

リンク」の部分のリンク先は以下のようなURLとなっているはずだ。

http://srad.jp/index.pl?op=userlogin&upasswd=05a671c66aefea124cc08b76ea6d30bb&unickname=jbeef

「upasswd=」の右側はパスワードのハッシュ値(MD5)となっている。上の例はデモとしてパスワードを仮に「testtest」とした場合の値で、もちろん今は別のパスワードにしている。 このURLには、ユーザ名とパスワード(のハッシュ値)が両方含まれているので、このURLにアクセスするだけでログインができる。これをブックマークとして登録しておけば、メニューからそれを選ぶだけでログインできるので「とても便利です」というわけだ。

説明には「クリックした先のページをブックマークして」とあるが、実際にやってみると、クリックした先のページは、

http://srad.jp/index.pl

となることが観察されることと思う。これは、ログイン手続きが完了した後に、このURLにリダイレクト(自動ジャンプ)しているためだ。「クリックした先のページをブックマークして」(本家の原文では「You can automatically log in by clicking This Link and Bookmarking the resulting page」)という指示に単純に従うと、

http://srad.jp/index.pl

をブックマーク登録することになるので、この説明は正しくない。 正しくない説明となっているのはなぜだろうか。考えられるのは、古いバージョンのslashcodeではリダイレクトされなかった可能性だ。説明文だけ元のまま残ったものなのかもしれない。

何が問題かというと、表示中のページのURLは容易に第三者に漏れてしまうものであり、URLにパスワードやユーザ名を含めることは危険だという点である。具体的には、上の方法でログインした直後に、トップページにあるストーリーのリンクをクリックして、リンク先にジャンプすると、リンク先のサーバに対して、リンク元のURL、すわなち、

http://srad.jp/index.pl?op=userlogin&upasswd=...

が、リンク先のサーバに送信されてしまう。これは、Webブラウザの機能であり、アクセスのリクエストデータの中に

Referer: http://srad.jp/index.pl?op=userlogin&upasswd=...

という形式で挿入されて送信される。これは、サーバ側では、(サーバがApacheの場合)「referer_log」ないし「access_log」に記録されるようになっていることが多い。

先に述べたように、ログイン後のURLは

http://srad.jp/index.pl

にリダイレクトされるのだから、Refererでユーザ名やパスワードが漏れることはないはずである。ところが、私のサーバのアクセスログを調べてみたところ、昨年11月のログに、1件だけだが

http://srad.jp/index.pl?op=userlogin&upasswd=...

の形式で、あるユーザのログイン用URLが記録されているのが見つかった。なぜ漏れてきたのだろうか?また、なぜ1件だけと少ないのか?

この疑問には、18日のJamie McCarthy氏の報告で、ある程度納得することができる。これについては次のエントリで。

typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...