FreeBSD-SA-06:08.sack "Infinite loop in SACK handling"

The FreeBSD Project よりセキュリティ勧告が出ました。私の認識を以下にまとめます。

  • 危険度中
  • 選択確認応答オプション(selective acknowledgement:SACK)が有効なシステムに特定のパケット群を送る事により、そのシステムのネットワークスタックが無限ループに陥ります。
  • この脆弱性により攻撃者はリモートからDoSが可能となります。

セキュリティ勧告は ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-06:08.sack.asc にあります。
以下は上記のセキュリティ勧告の一部とその訳文です。ただし品質は保証致しません。

I. 背景 - Background

SACK (Selective Acknowledgement) is an extension to the TCP/IP protocol that allows hosts to acknowledge the receipt of some, but not all, of the packets sent, thereby reducing the cost of retransmissions.
SACK (Selective Acknowledgement)は、送られたパケットにホストが(すべてではなく)同じ受領書で通知する事を許し、それにより再送のコストを下げる、TCP/IPプロトコルの拡張です。

II. 問題の詳細 - Problem Description

When insufficient memory is available to handle an incoming selective acknowledgement, the TCP/IP stack may enter an infinite loop.
入ってくる選択確認応答オプション(selective acknowledgement)を扱うのに十分なメモリが利用できない時、TCP/IPスタックは無限ループに入ります。

III. 影響範囲 - Impact

By opening a TCP connection and sending a carefully crafted series of packets, an attacker may be able to cause a denial of service.
TCPコネクションを開始し、巧妙に作られた一連のパケットを送る事により、攻撃者はサービス妨害(DoS)を行なう事ができます。

IV. 回避方法 - Workaround

On FreeBSD 5.4, the net.inet.tcp.sack.enable sysctl can be used to disable the use of SACK:
FreeBSD 3.4ではnet.inet.tcp.sack.enable sysctlによりSACKの使用を無効にする事ができます。

# sysctl net.inet.tcp.sack.enable=0

No workaround is available for FreeBSD 5.3.
FreeBSD 5.3には回避方法はありません。