printf(3)、即ちC言語のprintf関数のフォーマット文字列にユーザ入力をそのまま指定することによって生じるバグ。
これを利用した攻撃をフォーマット攻撃といい、バッファオーバーフロー攻撃と並ぶトレンドとなった。
これを利用して任意のコードを実行可能になるため、SUIDされたプログラムやデーモンでは深刻なセキュリティホールになり得る。これはwu_ftpdやglibcなどに存在した。
フォーマット文字列に%sなどを指定した場合は単にスタック上のデータが表示されるだけで済むが、%nを指定した場合には引数が指すアドレスの内容を書き換えることができる。これを利用してスタック中にあるリターンアドレスを書き換え、任意のコードを実行させることが可能。