Um TCP ACK básico diz "Eu recebi todos os bytes até X." O ACK seletivo permite que você diga "Recebi bytes X-Y e V-Z".
Então, por exemplo, se um host enviou 10.000 bytes e os bytes 3000-5000 foram perdidos em trânsito, o ACK diria "eu consegui tudo até 3000". A outra extremidade teria que enviar bytes 3001-10000 novamente. SACK poderia dizer "eu tenho 1000-2999 e 5001-10000" e o host apenas enviaria o 3000-5000.
Isso é ótimo em um link de alta largura de banda, com perda (ou atraso alto). O problema é que isso pode causar sérios problemas de desempenho em circunstâncias específicas. As TCP ACKs normais farão com que o servidor trate de uma conexão de alta largura de banda e perdas com luvas infantis (envie 500 bytes, aguarde, envie 500 bytes, aguarde, etc.). O SACK permite que ele se adapte ao alto atraso porque ele sabe exatamente quantos pacotes foram realmente perdidos.
Aqui é onde coisas ruins podem acontecer. Um invasor pode forçar seu servidor a manter uma fila de retransmissão em massa por um longo tempo e, em seguida, processar essa coisa toda de novo e de novo e de novo. Isso pode atrelar a CPU, consumir RAM e consumir mais largura de banda do que deveria. Em poucas palavras, um sistema leve pode iniciar um DoS contra um servidor mais robusto.
Se o seu servidor é robusto e não serve arquivos grandes, você está bem isolado contra isso.
Se você atende principalmente a uma intranet ou a outro grupo de usuários de baixa latência, o SACK não compra nada e pode ser desativado por motivos de segurança sem perda de desempenho.
Se você estiver em um link de baixa largura de banda (digamos 1Mbps ou menos como uma regra prática completamente arbitrária), o SACK pode causar problemas nas operações normais saturando sua conexão e deve ser desativado.
Por fim, depende de você. Considere o que você está servindo, para quem, de que e pesar o grau de seu risco contra os efeitos de desempenho do SACK.
Há uma excelente visão geral do SACK e sua vulnerabilidade aqui.