■フォーマット文字列の脆弱性/書式文字列の脆弱性(format string vulnerability)
フォーマット化した文字列の表示を行う関数がテキストを適切にチェックしないことで起きる脆弱性のこと。
CやC++などのプログラミング言語において、printf()ファミリ(printf/fprintf/sprintf/snprintf/vfprintf/vprintf/vsprintf/vsnprintf)やSyslog()といった出力にフォーマット指定が行える関数で、変数の出力形式を決める「%d」「%f」などのフォーマット文字列(書式文字列)の取り扱い方によって、プログラム・コードやデータが上書きされてしまう脆弱性がある。この脆弱性は、メモリの特定の場所を上書きできるという特徴を持つ。そのため、任意のコードを比較的容易に実行させることが可能だ。
プログラミングの段階で、フォーマット文字列の脆弱性を検証できるツールなども用意されており、この脆弱性は減少傾向にある。ただ注意せずにプログラミングを行うと、フォーマット文字列の脆弱性を埋め込んでしまうことにもなるので注意する必要がある。
|