From e3b9e2543bb98cec74a5fe2436c4fea4c6b7276f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Wed, 7 May 2025 14:14:30 +0000 Subject: [PATCH] Add packet length valid check --- common/protocol/quic/sniff.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/protocol/quic/sniff.go b/common/protocol/quic/sniff.go index 73b9bf97..0f07f6ff 100644 --- a/common/protocol/quic/sniff.go +++ b/common/protocol/quic/sniff.go @@ -4,8 +4,8 @@ import ( "crypto" "crypto/aes" "crypto/tls" - "fmt" "encoding/binary" + "fmt" "io" "github.com/quic-go/quic-go/quicvarint" @@ -169,6 +169,10 @@ func SniffQUIC(b []byte) (*SniffHeader, error) { return nil, err } + // very stange packet length, maybe a fake QUIC header + if packetNumberLength > int(packetLen) { + return nil, errNotQuic + } extHdrLen := hdrLen + packetNumberLength data := b[extHdrLen : int(packetLen)+hdrLen] decrypted, err := cipher.Open(b[extHdrLen:extHdrLen], nonce, data, b[:extHdrLen])