ディレクトリトラバーサル
Microsoft WindowsやDOSのディレクトリトラバーサルは ..\ 文字列を使う。
現在は、多くのWindowsプログラムやAPIがUNIXライクなディレクトリトラバーサル文字列も受け付ける。
各パーティション(ドライブ)は独立したルートディレクトリ (Cドライブの場合 C:\ とラベル付けされる) を持ち、その上に共通のルートディレクトリは存在しない。このため、Windows上のディレクトリトラバーサル脆弱性のほとんどは攻撃先が1パーティションに限られることになる。
正規化問題。
UTF-8はブルース・シュナイアー (Bruce Schneier) とジェフリー・シュトレイフリング (Jeffrey Streifling) によるCryptogram Newsletter July 2000において脆弱性と攻撃媒介の源として注目された。
Microsoftが自社のWebサーバにUnicode対応を追加したとき、../ をエンコードするための新しい方法が彼らのソースコードに入り込み、ディレクトリトラバーサル防止の試みが迂回されてしまう原因となった。その結果、
%c1%1c
%c0%9v
%c0%af
のような複数のパーセントエンコードが / や \ の文字に変換された。
これはなぜかというと、パーセントエンコードはMicrosoftのWebサーバにより、対応する8ビット文字にデコードされたからである。WindowsとDOSはASCIIを基にした正規化された8ビット文字集合を伝統的に使っていたため、これは歴史的には正しい動作だった。
しかしながら、初期のUTF-8は正規化されていなかったものの、今や数種類の文字列が、同じ文字列に変換されうる文字列エンコーディングになった。MicrosoftはUTF-8を正規化することなくトラバーサル対策チェックを行っていたため、(HEX) C0AF と (HEX) 2F が文字列比較を行うとき同じ文字となることに気付かなかった。