# SACK Panic

## **📋 Índice**

1. [Conceitos Fundamentais](#-conceitos-fundamentais)
2. [O que é SACK (Selective Acknowledgment)?](#-o-que-é-sack-selective-acknowledgment)
3. [Mecanismo do Ataque](#-mecanismo-do-ataque)
4. [Impacto no Sistema](#-impacto-no-sistema)
5. [Detecção e Verificação](#-detecção-e-verificação)
6. [Mitigação e Correção](#-mitigação-e-correção)

***

## **🔍 Conceitos Fundamentais**

O **SACK Panic** é uma vulnerabilidade crítica descoberta em 2019 que afeta o kernel do Linux (versões 2.6.29 em diante). Ela permite que um atacante remoto cause um **Kernel Panic** (travamento total do sistema) ao enviar uma sequência específica de pacotes TCP com opções SACK maliciosas.

***

## **📦 O que é SACK?**

O **Selective Acknowledgment (SACK)** é um recurso do TCP que permite que o receptor informe ao remetente exatamente quais segmentos de dados foram recebidos com sucesso.

* **Sem SACK:** Se um pacote for perdido, o remetente deve retransmitir todos os pacotes a partir daquele ponto.
* **Com SACK:** O receptor diz: "Recebi o pacote 1, 3 e 4, mas perdi o 2". O remetente retransmite apenas o pacote 2. Isso melhora muito a eficiência em redes com perdas.

***

## **🏗️ Mecanismo do Ataque**

A vulnerabilidade reside na forma como o kernel gerencia a fila de retransmissão ao processar o SACK.

1. **MSS Pequeno:** O atacante estabelece uma conexão TCP com um **MSS (Maximum Segment Size)** muito pequeno (ex: 48 bytes).
2. **Fragmentação:** O atacante força o servidor a enviar dados que serão altamente fragmentados em muitos pacotes pequenos na fila de retransmissão.
3. **SACKs Específicos:** O atacante envia uma série de SACKs que obrigam o kernel a percorrer e fundir (merge) esses fragmentos.
4. **Integer Overflow:** Devido a um erro de estouro de inteiro (Integer Overflow) na variável que conta os segmentos (geralmente uma variável de 16 bits), o kernel trava ao tentar processar a estrutura de dados corrompida.

***

## **💥 Impacto no Sistema**

* **Negação de Serviço (DoS) Total:** O servidor trava completamente e exige uma reinicialização física ou via hardware (Reset).
* **Baixo Custo de Ataque:** Um único atacante com pouca largura de banda pode derrubar servidores robustos.
* **Remoto:** Não requer autenticação ou acesso prévio ao sistema.

***

## **🔍 Detecção e Verificação**

### **1. Verificar Versão do Kernel**

Sistemas rodando kernels Linux lançados antes de Junho de 2019 sem patches estão vulneráveis.

```bash
uname -a
```

### **2. Verificar Vulnerabilidade via Nmap**

O Nmap possui scripts para detectar se o alvo permite MSS muito baixo, o que é um pré-requisito para o ataque.

```bash
nmap -p <porta> --script tcp-sack-panic <target>
```

***

## **🛡️ Mitigação e Prevenção**

### **1. Atualização do Kernel (Solução Definitiva)**

Atualize o sistema para as versões que corrigem a CVE-2019-11477.

* Debian, Ubuntu, RHEL e CentOS lançaram patches imediatos na época.

### **2. Desabilitar SACK (Mitigação Temporária)**

Se você não puder reiniciar ou atualizar o servidor imediatamente, pode desabilitar o SACK no kernel. **Atenção:** Isso pode reduzir a performance da rede.

```bash
# Desabilitar em tempo de execução
sysctl -w net.ipv4.tcp_sack=0

# Tornar permanente em /etc/sysctl.conf
echo "net.ipv4.tcp_sack = 0" >> /etc/sysctl.conf
sysctl -p
```

### **3. Bloquear MSS Baixo via IPTables**

Bloqueie tentativas de conexão com MSS excessivamente baixo.

```bash
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN SYN \
  -m tcpmss ! --mss 536:65535 -j DROP
```

*(O valor 536 é o mínimo comum para redes IPv4 estáveis).*

***

> Vulnerabilidades na pilha TCP do sistema operacional são extremamente perigosas porque afetam todos os serviços rodando na máquina (Web, Banco de Dados, SSH). Manter o kernel atualizado é a regra número um de infraestrutura.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/tecnicas/rede-and-infraestrutura/tcp/sack-panic.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
