
Bypass de regras de syscall baseadas em connect() usando TCP Fast Open (PoC CVE-2026-63828)
TCP Fast Open (TFO) é um método de inicializar uma conexão TCP onde o cliente pode enviar dados no pacote SYN inicial enviado ao servidor. Isso é bom para velocidade porque a ida e volta do handshake TCP inicial pode ser ignorada. Há mais detalhes de implementação se você se importa em usá-lo em um ambiente de nível de produção, mas é útil para evadir alguns mecanismos de regras baseados em syscall porque é uma forma de abrir conexões TCP sem usar explicitamente a syscall connect.
Do ponto de vista de syscall, uma conexão TCP básica geralmente se parece com:
socket() -> connect() -> write()/read()
Uma conexão TFO, no entanto, é inicializada usando uma syscall sendto com a flag MSG_FASTOPEN:
socket() -> sendto(...,MSG_FASTOPEN,...) -> write()/read()
Meio que explorei isso como uma missão secundária para outra coisa em que estava trabalhando, mas ao fazer mais pesquisa sobre TFO, o CVE-2026-63828 surgiu como um bypass conhecido (recente) específico para processos confinados em rede no AppArmor. Ele se aplica a mais do que apenas AppArmor, então pensei em publicar um PoC básico aqui.
Digamos que você queira consultar um servidor de API do Kubernetes de dentro de um contêiner como parte de reconhecimento pós-exploração, mas existem regras de monitoramento/bloqueio baseadas em syscall, como eBPF, AppArmor ou outras, em vigor.
Se você não quiser usar uma implementação/biblioteca de rede mais pesada no userland e outros primitivos de evasão de syscall como io_uring não estiverem disponíveis, o TFO pode ser útil. Novamente, isso é apenas um PoC simples e não uma pilha TFO robusta.
Build portátil:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
Referências: