add explicit CAA RDATA length check
This commit is contained in:
parent
8846fd2c90
commit
5c235e0000
|
|
@ -7,6 +7,8 @@ package va
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -140,10 +142,20 @@ func getCaa(client *dns.Client, server string, domain string, alias bool) ([]*CA
|
||||||
var CAAs []*CAA
|
var CAAs []*CAA
|
||||||
for _, answer := range r.Answer {
|
for _, answer := range r.Answer {
|
||||||
if answer.Header().Rrtype == dns.TypeCAA {
|
if answer.Header().Rrtype == dns.TypeCAA {
|
||||||
|
caaLenStr := strings.Fields(answer.String())[5]
|
||||||
|
caaLen, err := strconv.Atoi(caaLenStr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
caaData, err := hex.DecodeString(answer.String()[len(answer.String())-int(answer.Header().Rdlength*2):])
|
caaData, err := hex.DecodeString(answer.String()[len(answer.String())-int(answer.Header().Rdlength*2):])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if caaLen != len(caaData) {
|
||||||
|
// Malformed record
|
||||||
|
err = errors.New("RDATA length field doesn't match RDATA length")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
CAAs = append(CAAs, newCAA([]byte(caaData)))
|
CAAs = append(CAAs, newCAA([]byte(caaData)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue