Back to Checks
vercel

Vercel domains are verified

domain_verified
Service: domainSeverity: high
OfficialBuilt-inVerified
Categories:trust-boundariesvercel-hobby-plan
Resource Type:NotDefined

Vercel domains are assessed for ownership verification status. Unverified domains may not serve traffic correctly and could indicate a pending or incomplete domain setup. Domain verification confirms that the domain owner has authorized Vercel to manage the domain.

Risk

Unverified domains may fail to resolve or serve content, causing downtime for users. An unverified domain could also indicate a stale or orphaned configuration, or a domain that was added but never properly transferred, creating potential for domain takeover if the ownership verification is left incomplete.

Run this check with Prowler

Run in Prowler Cloud
Run
prowler vercel --checks domain_verified

Recommendation

Complete domain verification by configuring the required DNS records at your domain registrar. Remove any domains that are no longer needed to reduce the attack surface. Regularly audit domain configurations to ensure all domains remain verified.

Remediation

Other

1Sign in to the Vercel dashboard
2Navigate to the project Settings > Domains
3For any unverified domain, follow the verification steps shown
4Add the required DNS records (CNAME or A record) at your domain registrar
5Wait for DNS propagation and verify the domain

Check Code

from typing import List

from prowler.lib.check.models import Check, CheckReportVercel
from prowler.providers.vercel.services.domain.domain_client import domain_client


class domain_verified(Check):
    """Check if domains have been verified by Vercel.

    This class verifies whether each Vercel domain has passed ownership
    verification. Unverified domains may not function correctly and could
    indicate domain misconfiguration or hijacking attempts.
    """

    def execute(self) -> List[CheckReportVercel]:
        """Execute the Vercel Domain Verified check.

        Iterates over all domains and checks if each is verified.

        Returns:
            List[CheckReportVercel]: A list of reports for each domain.
        """
        findings = []
        for domain in domain_client.domains.values():
            report = CheckReportVercel(
                metadata=self.metadata(),
                resource=domain,
                resource_name=domain.name,
                resource_id=domain.id or domain.name,
            )

            if domain.verified:
                report.status = "PASS"
                report.status_extended = f"Domain {domain.name} is verified."
            else:
                report.status = "FAIL"
                report.status_extended = (
                    f"Domain {domain.name} is not verified. "
                    f"The domain may not be serving traffic correctly."
                )

            findings.append(report)

        return findings