-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlow_mss.go
31 lines (25 loc) · 758 Bytes
/
low_mss.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package badcapt
import (
"encoding/binary"
"github.com/google/gopacket"
"github.com/google/gopacket/layers"
)
// LowMSSIdentifier adds low-mss tag for a packet which TCP Maximum Segment
// Size is less than 500. This fact indicates potential SACK Panic attack
// (CVE-2019-11477).
// Details: https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md#1-cve-2019-11477-sack-panic-linux--2629
func LowMSSIdentifier(p gopacket.Packet) []string {
tcp := unpackTCP(p)
if tcp == nil {
return nil
}
if tcp.SYN == false {
return nil
}
for _, o := range tcp.Options {
if o.OptionType == layers.TCPOptionKindMSS && binary.BigEndian.Uint16(o.OptionData) < 500 {
return []string{"low-mss"}
}
}
return nil
}