check inner packet srcIP against server-verified srcIP, Windows support
This commit is contained in:
@@ -217,7 +217,7 @@ func handleReq(req []byte, addr *net.UDPAddr) {
|
||||
log.Println(srcIP + " -/> " + destIP + " (unrecognized IP)")
|
||||
}
|
||||
case shared.BROADCAST_PKT:
|
||||
if len(req) <= 36 {
|
||||
if len(req) <= 52 {
|
||||
log.Println("BROADCAST_PKT packet too short")
|
||||
return
|
||||
}
|
||||
@@ -227,6 +227,12 @@ func handleReq(req []byte, addr *net.UDPAddr) {
|
||||
return
|
||||
}
|
||||
|
||||
srcIP := net.IP(req[36:52]).String()
|
||||
if srcIP != peer.InternalIP {
|
||||
log.Println("rejected spoofed srcIP in BROADCAST_PKT")
|
||||
return
|
||||
}
|
||||
|
||||
mac := hmac.New(sha256.New, peer.AuthSecret)
|
||||
mac.Write(req[36:])
|
||||
if !hmac.Equal(mac.Sum(nil), req[4:36]) {
|
||||
@@ -241,17 +247,23 @@ func handleReq(req []byte, addr *net.UDPAddr) {
|
||||
log.Println("REQ_GET_PUBKEY packet too short")
|
||||
return
|
||||
}
|
||||
peerIP := net.IP(req[36:52]).String()
|
||||
peer := peersByInternal.Get(peerIP)
|
||||
if peer != nil {
|
||||
mac := hmac.New(sha256.New, peer.AuthSecret)
|
||||
mac.Write(req[36:])
|
||||
if !hmac.Equal(mac.Sum(nil), req[4:36]) {
|
||||
log.Println("failed to authenticate REQ_GET_PUBKEY")
|
||||
return
|
||||
}
|
||||
|
||||
pubKey, err := hex.DecodeString(peer.HexPublicKey)
|
||||
peer := peers.Get(addr.String())
|
||||
if peer == nil {
|
||||
log.Println("REQ_GET_PUBKEY from unregistered peer:", addr.String())
|
||||
return
|
||||
}
|
||||
mac := hmac.New(sha256.New, peer.AuthSecret)
|
||||
mac.Write(req[36:])
|
||||
if !hmac.Equal(mac.Sum(nil), req[4:36]) {
|
||||
log.Println("failed to authenticate REQ_GET_PUBKEY")
|
||||
return
|
||||
}
|
||||
|
||||
peerIP := net.IP(req[36:52]).String()
|
||||
targetPeer := peersByInternal.Get(peerIP)
|
||||
if targetPeer != nil {
|
||||
pubKey, err := hex.DecodeString(targetPeer.HexPublicKey)
|
||||
if err != nil {
|
||||
panic(err) // should never happen
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user