
# TCP Fast Open(CVE-2026-63828 PoC)を用いたconnect()ベースのシステムコールルールのバイパス
TCP Fast Open(TFO)は、クライアントがサーバーに送信する最初のSYNパケットにデータを含めることができるTCP接続の初期化方法です。初期のTCPハンドシェイクの往復を省略できるため、速度の面で優れています。本番環境レベルで使用する場合には実装の詳細がさらにありますが、connect syscallを明示的に使用せずにTCP接続を開く方法の1つであるため、syscallベースのルールエンジンの一部を回避するのに役立ちます。
syscallの観点から見ると、基本的なTCP接続は一般的に次のようになります:
socket() -> connect() -> write()/read()
一方、TFO接続はMSG_FASTOPENフラグを指定したsendto syscallを使用して初期化されます:
socket() -> sendto(...,MSG_FASTOPEN,...) -> write()/read()
これは、私が取り組んでいた別の作業のサイドクエストとして探索したものですが、TFOについてさらに調査を進める中で、CVE-2026-63828が、AppArmorでネットワークに制限されたプロセスに固有の(最近の)既知のバイパスとして浮上しました。ただし、これはAppArmorだけに当てはまるわけではないため、ここに基本的なPoCを投稿しようと思いました。
たとえば、侵害後の偵察の一環としてコンテナ内からKubernetes APIサーバーにクエリを実行したいが、eBPF、AppArmor、またはその他のsyscallベースの監視・ブロックルールが適用されているとします。
ユーザーランドでより重厚なネットワーク実装・ライブラリを使用したくなく、io_uringなどの他のsyscall回避プリミティブが利用できない場合、TFOが役立つ可能性があります。繰り返しになりますが、これは単純なPoCであり、堅牢なTFOスタックではありません。
ポータブルビルド:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
参考: