mirror of
https://github.com/drwetter/testssl.sh.git
synced 2026-06-02 22:48:49 +02:00
Fix DNS CAA check for IP scans and subdomains
- Skip CAA lookup entirely when NODE is an IP address; show "not checked (IP address scan)" instead of spuriously querying IP octets as domain labels and reporting "not offered" - Force FQDN (trailing dot) on the initial caa_node before the walk loop so dig does not apply the resolv.conf search domain to the first query, which could return a false result - Add a visible warning in the scan header when scanning by IP address, noting that trust/CAA and other domain-specific checks may be unreliable and the user should rescan with the hostname
This commit is contained in:
+41
-32
@@ -10268,39 +10268,44 @@ certificate_info() {
|
|||||||
|
|
||||||
out "$indent"; pr_bold " DNS CAA RR"; out " (experimental) "
|
out "$indent"; pr_bold " DNS CAA RR"; out " (experimental) "
|
||||||
jsonID="DNS_CAArecord"
|
jsonID="DNS_CAArecord"
|
||||||
caa_node="$NODE"
|
if is_ipv4addr "$NODE" || is_ipv6addr "$NODE"; then
|
||||||
caa=""
|
out "not checked (IP address scan -- no domain to query)"
|
||||||
while [[ -z "$caa" ]] && [[ -n "$caa_node" ]]; do
|
fileout "${jsonID}${json_postfix}" "INFO" "not checked (IP address scan)"
|
||||||
caa="$(get_caa_rr_record $caa_node)"
|
|
||||||
tmp=${PIPESTATUS[@]}
|
|
||||||
[[ $DEBUG -ge 4 ]] && echo "get_caa_rr_record: $tmp"
|
|
||||||
[[ $caa_node =~ '.'$ ]] || caa_node+="."
|
|
||||||
caa_node=${caa_node#*.}
|
|
||||||
done
|
|
||||||
if [[ -n "$caa" ]]; then
|
|
||||||
pr_svrty_good "available"; out " - please check for match with \"Issuer\" below"
|
|
||||||
if [[ $(count_lines "$caa") -eq 1 ]]; then
|
|
||||||
out ": "
|
|
||||||
else
|
|
||||||
outln; out "$spaces"
|
|
||||||
fi
|
|
||||||
while read caa; do
|
|
||||||
if [[ -n "$caa" ]]; then
|
|
||||||
all_caa+="$caa, "
|
|
||||||
fi
|
|
||||||
done <<< "$caa"
|
|
||||||
all_caa=${all_caa%, } # strip trailing comma
|
|
||||||
pr_italic "$(out_row_aligned_max_width "$all_caa" "$indent " $TERM_WIDTH)"
|
|
||||||
fileout "${jsonID}${json_postfix}" "OK" "$all_caa"
|
|
||||||
elif [[ -n "$NODNS" ]]; then
|
|
||||||
out "(instructed to minimize/skip DNS queries)"
|
|
||||||
fileout "${jsonID}${json_postfix}" "INFO" "check skipped as instructed"
|
|
||||||
elif "$DNS_VIA_PROXY"; then
|
|
||||||
out "(instructed to use the proxy for DNS only)"
|
|
||||||
fileout "${jsonID}${json_postfix}" "INFO" "check skipped as instructed (proxy)"
|
|
||||||
else
|
else
|
||||||
pr_svrty_low "not offered"
|
caa_node="$NODE"
|
||||||
fileout "${jsonID}${json_postfix}" "LOW" "--"
|
[[ $caa_node =~ '.'$ ]] || caa_node+="." # force FQDN to prevent dig search-domain expansion
|
||||||
|
caa=""
|
||||||
|
while [[ -z "$caa" ]] && [[ -n "$caa_node" ]]; do
|
||||||
|
caa="$(get_caa_rr_record $caa_node)"
|
||||||
|
tmp=${PIPESTATUS[@]}
|
||||||
|
[[ $DEBUG -ge 4 ]] && echo "get_caa_rr_record: $tmp"
|
||||||
|
caa_node=${caa_node#*.}
|
||||||
|
done
|
||||||
|
if [[ -n "$caa" ]]; then
|
||||||
|
pr_svrty_good "available"; out " - please check for match with \"Issuer\" below"
|
||||||
|
if [[ $(count_lines "$caa") -eq 1 ]]; then
|
||||||
|
out ": "
|
||||||
|
else
|
||||||
|
outln; out "$spaces"
|
||||||
|
fi
|
||||||
|
while read caa; do
|
||||||
|
if [[ -n "$caa" ]]; then
|
||||||
|
all_caa+="$caa, "
|
||||||
|
fi
|
||||||
|
done <<< "$caa"
|
||||||
|
all_caa=${all_caa%, } # strip trailing comma
|
||||||
|
pr_italic "$(out_row_aligned_max_width "$all_caa" "$indent " $TERM_WIDTH)"
|
||||||
|
fileout "${jsonID}${json_postfix}" "OK" "$all_caa"
|
||||||
|
elif [[ -n "$NODNS" ]]; then
|
||||||
|
out "(instructed to minimize/skip DNS queries)"
|
||||||
|
fileout "${jsonID}${json_postfix}" "INFO" "check skipped as instructed"
|
||||||
|
elif "$DNS_VIA_PROXY"; then
|
||||||
|
out "(instructed to use the proxy for DNS only)"
|
||||||
|
fileout "${jsonID}${json_postfix}" "INFO" "check skipped as instructed (proxy)"
|
||||||
|
else
|
||||||
|
pr_svrty_low "not offered"
|
||||||
|
fileout "${jsonID}${json_postfix}" "LOW" "--"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
outln
|
outln
|
||||||
|
|
||||||
@@ -23606,6 +23611,10 @@ display_rdns_etc() {
|
|||||||
outln " A record via: $CORRECT_SPACES supplied IP \"$CMDLINE_IP\""
|
outln " A record via: $CORRECT_SPACES supplied IP \"$CMDLINE_IP\""
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
if is_ipv4addr "$NODE" || is_ipv6addr "$NODE"; then
|
||||||
|
prln_warning " Warning: IP scan -- Trust, CAA and SNI-dependent checks may be unreliable. Rescan with hostname for accurate results."
|
||||||
|
fileout "ip_scan_warning" "WARN" "Scanning by IP address: Trust, CAA and SNI-dependent checks may be unreliable"
|
||||||
|
fi
|
||||||
if [[ "$rDNS" =~ instructed ]]; then
|
if [[ "$rDNS" =~ instructed ]]; then
|
||||||
out "$(printf " %-23s " "rDNS ($nodeip):")"
|
out "$(printf " %-23s " "rDNS ($nodeip):")"
|
||||||
out "$rDNS"
|
out "$rDNS"
|
||||||
|
|||||||
Reference in New Issue
Block a user