
Bypass delle regole syscall basate su connect() tramite TCP Fast Open (PoC CVE-2026-63828)
TCP Fast Open (TFO) è un metodo per inizializzare una connessione TCP in cui il client può inviare dati nel pacchetto SYN iniziale inviato al server. Questo è utile per la velocità perché il ping-pong della stretta di mano TCP iniziale può essere saltato. Ci sono ulteriori dettagli implementativi se ti interessa usarlo in un contesto di livello produttivo, ma è utile per eludere alcuni motori di regole basati su syscall perché è un modo per aprire connessioni TCP senza usare esplicitamente la syscall connect.
Da una prospettiva di syscall, una connessione TCP di base generalmente si presenta così:
socket() -> connect() -> write()/read()
Una connessione TFO, invece, viene inizializzata usando una syscall sendto con il flag MSG_FASTOPEN:
socket() -> sendto(...,MSG_FASTOPEN,...) -> write()/read()
Ho esplorato questo più o meno come una missione secondaria per qualcos'altro su cui stavo lavorando, ma facendo ulteriori ricerche su TFO, è emerso CVE-2026-63828 come un bypass noto (recente) specifico per i processi confinati in rete in AppArmor. Si applica però a più di solo AppArmor, quindi ho pensato di pubblicare qui un semplice PoC.
Supponiamo che tu voglia interrogare un server API Kubernetes dall'interno di un container come parte di una ricognizione post-exploit, ma ci siano regole di monitoraggio/blocco basate su eBPF, AppArmor o altre syscall in atto.
Se non vuoi usare un'implementazione/libreria di rete più pesante in userland e altre primitive di evasione delle syscall come io_uring non sono disponibili, TFO potrebbe essere utile. Ancora una volta, questo è solo un semplice PoC e non uno stack TFO robusto.
Build portabile:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
Riferimenti: