VA

Vulnerability Assessment

VA security

Vulnerability Assessment

Definition and Overview

Vulnerability assessment is a systematic, evidence-based process of identifying, quantifying, classifying, and prioritizing security weaknesses across information systems, applications, and network infrastructure. Unlike penetration testing, which actively exploits discovered weaknesses to demonstrate real-world impact, vulnerability assessment focuses on comprehensive discovery and risk-ranked classification. The process leverages automated scanning tools, configuration audits, known vulnerability databases (CVE, NVD, EPSS), and manual review to produce a prioritized inventory of security gaps requiring remediation.

The discipline has evolved significantly since the early days of network scanning. Modern vulnerability assessment encompasses not just traditional infrastructure scanning but also application security testing (SAST, DAST, IAST), cloud configuration audits, container image scanning, API security analysis, and supply chain dependency analysis. The shift toward continuous assessment -- rather than periodic point-in-time scans -- reflects the reality that attack surfaces are dynamic, with new assets, services, and vulnerabilities appearing constantly.

Vulnerability assessment forms the foundation of any mature security program. Without accurate, current knowledge of existing weaknesses, organizations cannot prioritize remediation efforts, allocate security budgets effectively, or demonstrate compliance with regulatory frameworks such as NIS2 and ZKB. The assessment process produces structured outputs -- typically vulnerability reports with severity scores, affected assets, remediation guidance, and verification procedures -- that feed into broader risk management workflows.

The Common Vulnerability Scoring System (CVSS) provides the industry-standard framework for rating vulnerability severity, while the Exploit Prediction Scoring System (EPSS) adds probabilistic estimates of exploitation likelihood. Together, these scoring systems enable risk-based prioritization that accounts for both technical severity and real-world threat context.

Assessment Types

Modern vulnerability assessment spans multiple domains, each requiring specialized tools, techniques, and expertise. A comprehensive assessment program covers all domains relevant to the organization's technology stack.

Assessment TypeScopeMethodOutput
NetworkInfrastructure, services, protocolsAutomated scanning + manual reviewOpen ports, misconfigurations, known CVEs
ApplicationWeb apps, APIs, mobile appsSAST, DAST, IAST, manual testingCode vulnerabilities, logic flaws, injection points
CloudIaaS, PaaS, SaaS configurationsConfiguration audit, CIS benchmarksMisconfigurations, excessive permissions, exposed storage
ContainerDocker images, Kubernetes clustersImage scanning, runtime analysisVulnerable base images, insecure manifests
Supply ChainDependencies, libraries, packagesSCA tools, SBOM analysisKnown vulnerable dependencies, license risks
IoT/OTIndustrial control, embedded devicesProtocol analysis, firmware reviewDefault credentials, unpatched firmware, insecure protocols

Each assessment type produces findings in different formats and severity scales, requiring normalization before integration into a unified risk view. The Prismatic Platform normalizes findings from all assessment types into a common schema with standardized severity levels, CVSS scores, and remediation guidance.

Assessment Lifecycle

A complete vulnerability assessment follows a structured lifecycle with defined phases, each producing artifacts that feed into subsequent phases.

Phase 1 - Scope Definition establishes the boundaries of the assessment. This includes identifying target assets, defining assessment depth (authenticated vs. unauthenticated), establishing testing windows, and confirming authorization. Scope creep is the primary risk in this phase; without clear boundaries, assessments become unfocused and produce overwhelming volumes of low-value findings.

Phase 2 - Discovery maps the target environment. This phase identifies live hosts, open ports, running services, application endpoints, and technology stacks. Discovery tools include network scanners (Nmap, Masscan), web crawlers, DNS enumeration, and WHOIS lookups. The output is an asset inventory that serves as the input for vulnerability scanning.

Phase 3 - Vulnerability Identification applies automated scanners and manual techniques to discover weaknesses. Scanners compare discovered services and software versions against vulnerability databases, test for common misconfigurations, and perform active checks where authorized. Manual review supplements automated scanning by identifying logic flaws, business logic vulnerabilities, and context-dependent issues that scanners miss.

Phase 4 - Analysis and Prioritization evaluates each finding against multiple risk dimensions: CVSS score (technical severity), EPSS score (exploitation probability), asset criticality (business impact), exposure level (internal vs. external), and compensating controls (existing mitigations). The output is a prioritized remediation roadmap.

Phase 5 - Reporting and Remediation produces actionable reports for different audiences: executive summaries for leadership, detailed technical findings for engineering teams, and compliance-mapped results for auditors. Remediation guidance includes specific steps, expected effort, and verification procedures.

Phase 6 - Verification and Reassessment confirms that remediation efforts successfully addressed the identified vulnerabilities. This phase involves rescanning remediated assets and verifying that fixes do not introduce new vulnerabilities. Verification closes the assessment loop and provides measurable evidence of security posture improvement.

Scoring and Prioritization

Effective vulnerability prioritization requires combining multiple scoring inputs to produce a composite risk score that reflects both technical severity and real-world context.

Composite Risk = CVSS_Base x EPSS_Probability x Asset_Criticality x Exposure_Factor
                                                                       |
                                                       [1.0 = internet-facing]
                                                       [0.5 = internal network]
                                                       [0.2 = air-gapped]

This multi-factor approach prevents the common mistake of treating all "Critical" CVSS findings equally. A CVSS 9.8 vulnerability on an air-gapped development server with no exploitation activity (low EPSS) receives a lower composite risk score than a CVSS 7.5 vulnerability on an internet-facing production server with active exploitation (high EPSS).

Scoring SystemPurposeRangeStrengthsLimitations
CVSS v3.1Technical severity0.0-10.0Industry standard, well-understoodDoes not account for exploitation likelihood
CVSS v4.0Technical severity + context0.0-10.0Better environmental scoringNewer, less tooling support
EPSSExploitation probability0.0-1.0Data-driven, updated dailyFocused on known exploits only
SSVCDecision-driven prioritizationAct/Track/Track*/DeferOutcome-focusedRequires organizational context

Architecture and Implementation

Prismatic Assessment Pipeline

The Prismatic Platform implements vulnerability assessment as part of the Prismatic Perimeter EASM module. The assessment pipeline operates continuously, evaluating discovered assets against multiple vulnerability dimensions.

defmodule PrismaticPerimeter.VulnerabilityAssessment do
  @moduledoc """
  Continuous vulnerability assessment for discovered attack surface assets.
  Evaluates TLS, services, DNS, certificates, and known CVEs with
  composite risk scoring combining CVSS, EPSS, and business context.
  """

  @type severity :: :critical | :high | :medium | :low | :info

  @type finding :: %{
    asset_id: String.t(),
    vulnerability: String.t(),
    severity: severity(),
    cvss_score: float(),
    epss_score: float(),
    evidence: map(),
    remediation: String.t(),
    first_seen: DateTime.t(),
    last_seen: DateTime.t()
  }

  @spec assess_asset(Asset.t()) :: {:ok, list(finding())} | {:error, term()}
  def assess_asset(%Asset{type: :domain} = asset) do
    findings =
      []
      |> assess_tls_configuration(asset)
      |> assess_dns_security(asset)
      |> assess_certificate_health(asset)
      |> assess_exposed_services(asset)
      |> assess_known_cves(asset)
      |> assess_http_headers(asset)
      |> assess_email_security(asset)
      |> deduplicate_findings()
      |> score_and_prioritize()

    {:ok, findings}
  end

  @spec assess_tls_configuration(list(finding()), Asset.t()) :: list(finding())
  defp assess_tls_configuration(findings, asset) do
    case TLSAnalyzer.evaluate(asset.hostname) do
      {:ok, %{protocol: protocol, cipher_suites: suites}} ->
        tls_findings =
          []
          |> check_protocol_version(protocol)
          |> check_cipher_strength(suites)
          |> check_certificate_chain(asset.hostname)
          |> check_hsts_policy(asset.hostname)

        findings ++ tls_findings

      {:error, :connection_refused} ->
        findings ++ [%{
          vulnerability: "TLS not available",
          severity: :high,
          cvss_score: 7.5,
          epss_score: 0.3,
          remediation: "Enable TLS on all public-facing services"
        }]
    end
  end

  @spec score_and_prioritize(list(finding())) :: list(finding())
  defp score_and_prioritize(findings) do
    findings
    |> Enum.map(fn finding ->
      composite_score =
        finding.cvss_score * finding.epss_score *
        asset_criticality(finding.asset_id) *
        exposure_factor(finding.asset_id)

      Map.put(finding, :composite_risk_score, composite_score)
    end)
    |> Enum.sort_by(& &1.composite_risk_score, :desc)
  end

  defp assess_dns_security(findings, _asset), do: findings
  defp assess_certificate_health(findings, _asset), do: findings
  defp assess_exposed_services(findings, _asset), do: findings
  defp assess_known_cves(findings, _asset), do: findings
  defp assess_http_headers(findings, _asset), do: findings
  defp assess_email_security(findings, _asset), do: findings
  defp deduplicate_findings(findings), do: Enum.uniq_by(findings, & &1.vulnerability)
  defp check_protocol_version(findings, _protocol), do: findings
  defp check_cipher_strength(findings, _suites), do: findings
  defp check_certificate_chain(findings, _hostname), do: findings
  defp check_hsts_policy(findings, _hostname), do: findings
  defp asset_criticality(_id), do: 1.0
  defp exposure_factor(_id), do: 1.0
end

Assessment Categories

The Prismatic assessment engine evaluates assets across multiple security dimensions, each contributing to the overall security rating.

defmodule PrismaticPerimeter.AssessmentCategories do
  @moduledoc """
  Defines weighted assessment categories contributing to security ratings.
  Each category contains multiple individual checks, and scores are
  aggregated into the composite A-F rating.
  """

  @type category :: :tls_security | :dns_security | :application_security |
                    :infrastructure_security | :compliance_posture

  @categories %{
    tls_security: %{
      weight: 0.20,
      checks: [:protocol_version, :cipher_suite_strength, :certificate_validity,
               :certificate_chain, :hsts_enforcement, :ocsp_stapling]
    },
    dns_security: %{
      weight: 0.15,
      checks: [:dnssec_validation, :spf_record, :dkim_record,
               :dmarc_policy, :caa_record]
    },
    application_security: %{
      weight: 0.25,
      checks: [:security_headers, :content_security_policy, :cors_configuration,
               :cookie_security, :information_disclosure]
    },
    infrastructure_security: %{
      weight: 0.20,
      checks: [:exposed_services, :default_credentials, :known_cves,
               :patch_currency, :network_segmentation]
    },
    compliance_posture: %{
      weight: 0.20,
      checks: [:nis2_requirements, :zkb_requirements, :gdpr_indicators,
               :incident_response_readiness]
    }
  }

  @spec weighted_score(map()) :: float()
  def weighted_score(category_scores) do
    Enum.reduce(@categories, 0.0, fn {category, %{weight: weight}}, acc ->
      category_score = Map.get(category_scores, category, 0.0)
      acc + category_score * weight
    end)
  end

  @spec categories() :: map()
  def categories, do: @categories
end

Continuous Assessment Workflow

The platform performs assessment as an ongoing process rather than periodic scans, reflecting the reality that attack surfaces change continuously.

  1. Asset Discovery: New domains, IPs, certificates, and services are discovered and added to the asset inventory
  2. Initial Assessment: Each new asset undergoes comprehensive vulnerability assessment across all categories
  3. Continuous Monitoring: Existing assets are re-assessed on a configurable schedule (default: daily for critical assets, weekly for standard)
  4. Change Detection: Significant changes (new services, expired certificates, configuration drift) trigger immediate reassessment
  5. Rating Integration: Assessment findings feed directly into the A-F security rating calculation
  6. Trend Analysis: Historical assessment data reveals whether security posture is improving or degrading over time

Security Rating Integration

Assessment findings are aggregated into the security rating system visible at /perimeter. The rating provides a single-number summary of an organization's externally observable security posture.

RatingScore RangeAssessment Implication
A850-900No critical/high findings, strong security posture
B750-849Minor findings, good security practices
C650-749Moderate findings requiring attention
D500-649Significant findings, remediation required
F300-499Critical findings, immediate action needed

White Team Verification

The White Team provides constructive verification of assessment findings through the Color Team framework. When automated scanners identify potential vulnerabilities, White Team agents validate findings through independent verification methods, reducing false positive rates and ensuring that remediation efforts target genuine vulnerabilities.

The verification process uses three methods: independent rescanning with different tools, manual confirmation of the vulnerability's exploitability, and formal reasoning about whether the finding represents a genuine security risk given the asset's context and compensating controls.

Custom Assessment Rules

The Prismatic Platform supports organization-specific assessment rules for regulatory requirements that are not covered by standard vulnerability databases.

defmodule PrismaticPerimeter.CustomChecks do
  @moduledoc """
  Custom vulnerability checks for Czech-specific regulatory requirements.
  Extends standard assessment categories with ZKB 264/2025 Sb. compliance
  checks and data residency verification.
  """

  @spec check_czech_specific_requirements(Asset.t()) ::
          {:ok, list(map())} | {:error, term()}
  def check_czech_specific_requirements(asset) do
    findings =
      []
      |> check_zkb_compliance(asset)
      |> check_data_residency(asset)
      |> check_incident_reporting_capability(asset)
      |> check_czech_language_support(asset)

    {:ok, findings}
  end

  @spec check_zkb_compliance(list(map()), Asset.t()) :: list(map())
  defp check_zkb_compliance(findings, asset) do
    case ZKBComplianceChecker.evaluate(asset) do
      {:ok, %{compliant: true}} ->
        findings

      {:ok, %{compliant: false, gaps: gaps}} ->
        finding = %{
          asset_id: asset.id,
          vulnerability: "ZKB compliance gaps: #{Enum.join(gaps, ", ")}",
          severity: :high,
          cvss_score: 0.0,
          epss_score: 0.0,
          remediation: "Address ZKB 264/2025 Sb. requirements"
        }
        [finding | findings]

      {:error, _reason} ->
        findings
    end
  end

  defp check_data_residency(findings, _asset), do: findings
  defp check_incident_reporting_capability(findings, _asset), do: findings
  defp check_czech_language_support(findings, _asset), do: findings
end

Remediation SLA Framework

Effective vulnerability management requires defined Service Level Agreements (SLAs) for remediation based on finding severity and business context. The Prismatic Platform tracks remediation against configurable SLA targets.

SeverityDefault SLAInternet-Facing SLACompliance Deadline
Critical24 hours4 hoursNIS2: 24 hours
High7 days48 hoursNIS2: 72 hours
Medium30 days14 daysQuarterly review
Low90 days30 daysAnnual review
InformationalBest effort90 daysDocumentation only

SLA compliance is tracked as a metric in the security rating calculation. Organizations with consistent SLA compliance receive higher scores than those with overdue remediation items, even if the total finding count is similar.

Best Practices

Assess continuously, not periodically: Point-in-time assessments miss vulnerabilities introduced between scans. Continuous assessment catches issues as they appear, reducing the window of exposure.

Prioritize by composite risk, not CVSS alone: A CVSS 9.8 on an internal development server may be less urgent than a CVSS 7.0 on a public-facing production API. Combine CVSS, EPSS, asset criticality, and exposure level for accurate prioritization.

Validate findings before remediation: False positives waste engineering time and erode trust in the assessment process. Use the White Team verification approach to confirm findings before allocating remediation resources.

Track remediation SLAs: Define and enforce maximum time-to-remediate by severity. Track compliance against these SLAs and include SLA performance in security metrics.

Correlate across data sources: Single-source findings are less reliable. Correlate scanner results with OSINT data, Certificate Transparency logs, and manual review for higher confidence.

Maintain historical records: Vulnerability trends over time reveal whether security posture is improving or degrading. Track metrics like mean time to remediate, finding recurrence rates, and assessment coverage.

Automate where possible: Automated scanning catches known vulnerabilities efficiently. Reserve manual assessment for logic flaws, business process vulnerabilities, and context-dependent issues that scanners cannot detect.

Common Pitfalls

Scanner dependency: Relying solely on automated scanners misses logic flaws, business process vulnerabilities, and context-dependent issues. Automated scanning should be supplemented with manual review and security architecture analysis.

Alert fatigue from unprioritized findings: Presenting hundreds of findings without prioritization overwhelms engineering teams. Always score, rank, and group findings by composite risk before reporting.

Neglecting authenticated scanning: Unauthenticated scans only see the external attack surface. Authenticated scans (with valid credentials) reveal significantly more vulnerabilities, including those in authenticated areas of applications.

Ignoring informational findings: Informational findings (exposed version strings, directory listings, verbose error messages) may not be vulnerabilities themselves but provide valuable reconnaissance data to attackers. Track and remediate them.

Treating assessment as compliance checkbox: Assessment that exists only to satisfy audit requirements misses its purpose. The goal is accurate risk visibility for informed decision-making, not checkbox compliance.

One-size-fits-all severity: Treating all findings of the same CVSS score identically ignores business context. A SQL injection on a public-facing application handling financial data is far more urgent than the same vulnerability on an internal documentation server.

  • Penetration Testing - Active exploitation validating assessment findings
  • EASM - External attack surface management where assessments are performed
  • Security Rating - Aggregate score incorporating assessment findings
  • Compliance Framework - Regulatory requirements for vulnerability management
  • NIS2 - EU directive requiring regular vulnerability assessment
  • ZKB - Czech regulation mandating vulnerability management
  • OSINT - Open source intelligence supplementing assessment data
  • White Team - Constructive verification of assessment findings
  • Attack Surface - The scope that vulnerability assessment covers
  • Certificate Transparency - Supplementary data source for certificate-related findings
  • Broadway - Pipeline framework processing assessment results at scale

See Also

  • Architecture - Platform architecture overview
  • Technologies - Technology stack details
  • Apps - Application ecosystem including Prismatic Perimeter
  • Agents - Security agents performing assessment operations

Connect & Contribute

Created by Tomáš Korcak (korczis) | Open Source under GHL