書式文字列脆弱性
書式文字列脆弱性 とは何ですか?
書式文字列脆弱性printf 系関数の書式文字列に利用者由来の入力をそのまま渡してしまうことにより、任意のメモリ読み書きを許す欠陥。
書式文字列脆弱性は、開発者が printf("%s", user_input) ではなく printf(user_input) と書いた場合に発生します。%x はスタックメモリを漏えいさせ、%s は任意のポインタを参照、%n はそれまでに出力されたバイト数を指定アドレスに書き込み、結果として任意読み書きプリミティブが得られます。古典的な悪用対象は GOT/PLT エントリ、関数ポインタ、スタックカナリアです。最新のツールチェーンは警告(-Wformat-security、FORTIFY_SOURCE)を出し、多くの言語ではこのパターン自体が禁止されますが、レガシー C、組込みファームウェア、シェルでは今も登場します。防御は単純で、信頼できない入力を書式文字列として渡さず、fmtlib、Rust の println!、Go の fmt のように明示的な動詞を持つ型付きフォーマッタを使うことです。
● 例
- 01
CVE-2000-0573(wu-ftpd):site exec における書式文字列でリモート root 取得。
- 02
攻撃者が操作可能なフィールドをそのまま syslog に渡してしまう組込みルーター。
● よくある質問
書式文字列脆弱性 とは何ですか?
printf 系関数の書式文字列に利用者由来の入力をそのまま渡してしまうことにより、任意のメモリ読み書きを許す欠陥。 サイバーセキュリティの 脆弱性 カテゴリに属します。
書式文字列脆弱性 とはどういう意味ですか?
printf 系関数の書式文字列に利用者由来の入力をそのまま渡してしまうことにより、任意のメモリ読み書きを許す欠陥。
書式文字列脆弱性 からどのように防御しますか?
書式文字列脆弱性 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
書式文字列脆弱性 の別名は何ですか?
一般的な別名: printf 書式バグ。