萌えハッカーニュースリーダー

2025/05/13 15:24 A Tale of a Trailing Dot (2022)

出典: https://daniel.haxx.se/blog/2022/05/12/a-tale-of-a-trailing-dot/
hakase
博士

やあ、ロボ子。今日はDNSの話をするのじゃ。

roboko
ロボ子

DNSですか、博士。よろしくお願いします。

hakase
博士

ホスト名の末尾にドットを付けても、DNS解決の結果は変わらないって知ってたか?

roboko
ロボ子

え、そうなんですか?初めて知りました。DNSプロトコル自体が末尾のドットを無視するんですね。

hakase
博士

そうなんじゃ。でも、名前解決の時はちょっと違うぞ。ドットがある場合は、ドメイン名を追加せずに完全指定された名前として扱われるんじゃ。

roboko
ロボ子

なるほど。ドットがない場合は、ドメイン名が追加される可能性があるんですね。

hakase
博士

HTTPの世界では、もっと面白いことが起こるんじゃ。HTTPクライアントはURLからホスト名を抽出して、IPアドレス解決と`Host:`ヘッダーに使うんじゃ。

roboko
ロボ子

`Host:`ヘッダーですか。そのヘッダーに末尾のドットが含まれるとどうなるんですか?

hakase
博士

HTTPの仕様では、`Host:`ヘッダーのホスト名はURLから verbatim で使うべきで、末尾のドットも含まれるべき、とされているんじゃ。

roboko
ロボ子

へえ、面白いですね。サーバーは "example.com" と "example.com." で異なるコンテンツを提供できるんですね。

hakase
博士

Cookieはどうなると思う?

roboko
ロボ子

Cookieですか。Cookie仕様では、ホスト名の末尾のドットは無視されるんでしたっけ?

hakase
博士

その通り!ドットの有無にかかわらず、同じドメインとして扱われるんじゃ。

roboko
ロボ子

SNI (Server Name Indication)はどうですか?

hakase
博士

SNIフィールドでは末尾のドットの有無を区別できないんじゃ。

roboko
ロボ子

curlの歴史も関係あるみたいですね。

hakase
博士

そうなんじゃ。以前は末尾のドットを削除していたけど、`Host:`ヘッダーでドットが必要なサイトに対応するために、curl 7.82.0でドットを保持するように変更されたんじゃ。

roboko
ロボ子

その変更がセキュリティ脆弱性につながったんですね。

hakase
博士

そうなんじゃ。Cookie処理とHSTSで問題が起きて、CVE-2022-27779とCVE-2022-30115という脆弱性が生まれたんじゃ。

roboko
ロボ子

curl 7.83.1でこれらの問題が修正されたんですね。安心しました。

hakase
博士

Public Suffix List (PSL)も重要じゃ。サーバーが広すぎるドメインにCookieを設定しないように、クライアントはドメインをチェックする必要があるんじゃ。

roboko
ロボ子

PSLは、Cookieの設定が許可されていない既知のドメインのリストですね。

hakase
博士

その通り!curlはlibpslをオプションで使用していて、libpslがない場合はバックアップ機能を使うんじゃ。

roboko
ロボ子

CVE-2022-27779は、libpslなしでビルドされたcurlで、末尾にドットが付いたTLDにCookieを設定できる脆弱性でしたね。

hakase
博士

そして、CVE-2022-30115は、HSTSにおいて、末尾にドットがある場合とない場合で同じホスト名が異なるものとして扱われ、HSTSをバイパスできる脆弱性だったんじゃ。

roboko
ロボ子

DNSの末尾のドット一つで、こんなに色々なことが変わるんですね。奥が深いですね。

hakase
博士

そうじゃろう?ところでロボ子、ドットが付いてるお菓子ってなーんだ?

roboko
ロボ子

えーと…水玉模様のクッキー、とかですか?

hakase
博士

ブー!答えは、ホットドッグ!…って、ベタすぎたかのじゃ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search