CVE-2011-4313 BIND9 キャッシュサーバの脆弱性について
この脆弱性は2011年11月16日に bind-users ML への投稿を発端として発覚しました。現象としては以下のメッセージと共に named プロセスが異常終了します。
> INSIST(! dns_rdataset_isassociated(sigrdataset))
Code language: plaintext (plaintext)
異常終了の起きている箇所は2010年12月に見つかった脆弱性と同じであり当初はこの脆弱性との関係も疑われました。その脆弱性のアドバイザリは以下です。
BIND: cache incorrectly allows a ncache entry and a rrsig for the same type
最初の報告の後に対策されているはずの複数のバージョンでの発生、複数の組織から報告があり新しい脆弱性として対策が開始されました。発覚した翌日にはアドバイザリと対策版も公開されました。この脆弱性はクライアントからの名前解決に応えるキャッシュサーバのみが影響を受けゾーンを保持するコンテンツサーバは影響を受けない事も記載されています。今回の脆弱性のアドバイザリは以下です。
BIND 9 Resolver crashes after logging an error in query.c
通常であれば、対策版の公開、その検証、適用を経て対応完了となりますが今回はリリースされた対策版が回避策に過ぎず、根本的解決には至っていません。それは今回のリリースにおけるソースコードの修正方法からも読み取れます。
BIND9 は整合性チェックのために数多くの INSIST
マクロ(実態は assert
関数)が仕込まれており、想定しない状態になった場合は即座にプロセスが異常終了するようになっています。今回の異常終了はその状態に陥ったため発生しています。
その状態になってしまう事自体が、考慮漏れやプログラムのバグが原因ですが実環境で既に発生しておりそのままでは影響も大きいため、可能な限り安全に続行可能なエラー処理に置き換えています。つまり、落ちなくなっただけで根本的修正にはなっていません。このような修正は本意ではないでしょうし、苦肉の策であると推測されます。いずれは根本的対策を施したバージョンがリリースされるはずなので引き続き注意が必要です。