ファイル名書式文字列攻撃
ファイル名にフォーマット指定子を使用することができるバグ。
%nによる任意コード実行の可能性を秘めている。
%nによる任意コード実行の可能性を秘めている。
概要
"mugenw.log"にファイル名を出力する際にバグが発生するが、現状有効な活用事例がない。
活用できない主な理由として、winmugenはC99準拠であるため"$"が使えない事が挙げられる。
"$"が使えないことによって目的の位置までアドレスを進めるには膨大な量の指定子を用意する必要があり、更にこのバグでは引数アドレスの初期位置がファイル名の先頭付近であるため、ファイル名の文字数を増やせば増やすほど目的のアドレスへのオフセットが増加してしまうという悪循環が発生し、結果的に任意コードを実行しようと思うとファイルの文字数が255文字を超過してしまう。
活用できない主な理由として、winmugenはC99準拠であるため"$"が使えない事が挙げられる。
"$"が使えないことによって目的の位置までアドレスを進めるには膨大な量の指定子を用意する必要があり、更にこのバグでは引数アドレスの初期位置がファイル名の先頭付近であるため、ファイル名の文字数を増やせば増やすほど目的のアドレスへのオフセットが増加してしまうという悪循環が発生し、結果的に任意コードを実行しようと思うとファイルの文字数が255文字を超過してしまう。
検証記録
通常ファイル名に特殊文字やNullなどは含むことができないが、mugenの処理中にファイル名は一度Unicodeで出力してからUTF8に変換している。その残骸が一部残ることを利用して0x00XX00YYという形でのみNullを含んだバイト列を利用することが可能になる。
検証では0x004C0040へ任意の数値を書き込むことに成功した。
検証では0x004C0040へ任意の数値を書き込むことに成功した。