メインコンテンツまでスキップ

10. Security Considerations (セキュリティに関する考慮事項)

UTF-8の実装者は、不正なUTF-8シーケンスをどのように処理するかについて、セキュリティ面を考慮する必要があります。状況によっては、攻撃者がUTF-8構文で許可されていないオクテットシーケンスを送信することで、不注意なUTF-8パーサーを悪用できる可能性があります。

過長エンコーディング攻撃 (Overlong Encoding Attack)

この攻撃の特に巧妙な形式は、入力のUTF-8エンコード形式に対してセキュリティ上重要な妥当性チェックを実行するが、特定の不正なオクテットシーケンスを文字として解釈するパーサーに対して実行できます。

例1: NUL文字

たとえば、パーサーは、単一オクテットシーケンス00としてエンコードされた場合にNUL文字を禁止する可能性がありますが、誤って不正な2オクテットシーケンスC0 80を許可し、それをNUL文字として解釈します。

例2: パストラバーサル

別の例としては、オクテットシーケンス2F 2E 2E 2F("/../")を禁止しているが、不正なオクテットシーケンス2F C0 AE 2E 2Fを許可するパーサーがあります。

実世界での影響 (Real-World Impact)

この最後の悪用は、実際に2001年にWebサーバーを攻撃する広範なウイルスで使用されました。したがって、セキュリティ上の脅威は非常に現実的です。

バッファオーバーフローのリスク (Buffer Overflow Risk)

UTF-8へのエンコード時に発生する別のセキュリティ問題:ISO/IEC 10646のUTF-8の記述では、U+7FFFFFFFまでの文字番号のエンコードが許可されており、最大6バイトのシーケンスが生成されます。

したがって、以下の場合にバッファオーバーフローのリスクがあります:

  • 文字番号の範囲が明示的にU+10FFFFに制限されていない場合
  • バッファサイズ設定が5バイトおよび6バイトシーケンスの可能性を考慮していない場合

正規等価性の問題 (Canonical Equivalence Issues)

セキュリティは、UTF-8を含むいくつかの文字エンコーディングの特性によっても影響を受ける可能性があります:「同じもの」(ユーザーが判断できる限り)は、いくつかの異なる文字シーケンスで表現できます。

例: アクセント付き文字

たとえば、鋭アクセント付きeは以下で表現できます:

  • 事前合成されたU+00E9 E ACUTE文字
  • 正規的に等価なシーケンスU+0065 U+0301(E + COMBINING ACUTE)

セキュリティへの影響 (Security Implications)

UTF-8は各文字シーケンスに対して単一のバイトシーケンスを提供しますが、「同じもの」に対して複数の文字シーケンスが存在することは、以下が関与する場合にセキュリティ上の影響を与える可能性があります:

  • 文字列マッチング
  • インデックス作成
  • 検索
  • ソート
  • 正規表現マッチング
  • 選択操作

攻撃シナリオの例 (Example Attack Scenario)

例として、資格情報に現れる識別子とアクセス制御リストエントリの文字列マッチングがあります。

Unicode正規化 (Unicode Normalization)

この問題は、Unicode正規化形式に基づくソリューションで対処可能です。[UAX15]を参照してください。

正規化形式は、等価な文字が等しく比較されることを保証する正規表現を提供します。


関連リンク