Skip to content

Asset Model

hxEASM keeps Scope and Asset as separate domain concepts.

Scope is customer-provided scan/discovery input and configuration. The existing scopes table, approval workflow, and scope APIs remain intact; the former URL scope type is now named webapp.

Asset is an observed or managed attack-surface entity that belongs to an organization.

Canonical Asset Types

Canonical Asset types are exactly:

Type Meaning
organization System-managed organization root Asset
domain Registered/root domain observed for the organization
subdomain Hostname under a domain
ip Observed IP address
service Network service represented as host:port/protocol
webapp HTTP(S) origin, represented as scheme://host[:non-default-port]
certificate TLS certificate identified by SHA-256 fingerprint

The organization Asset is created automatically for each organization. Its stable identity is organization:<organization_uuid> in normalized_value; its display value follows the organization name. It is hidden from normal inventory and dashboard counts, but it is the Asset Graph root and can be used as a fallback association for organization-level Threats.

Scopes

Scopes remain the authoritative model for scan input. Scope types may still include values that are not canonical Asset types, such as cidr, ip_range, asn, and org_name. HTTP(S) scope input uses webapp, not url.

Domain and IP can exist as both Scope records and Asset records. The Scope record represents customer intent/input; the Asset record represents observed attack-surface state.

ip_range Scope records are stored as a single approved scope value such as 10.0.0.1-10.0.0.254. At scan execution time, the worker expands valid IPv4 ranges into individual ip plugin targets. It does not create IP Assets, does not create additional Scope rows, and does not alter CIDR behavior. CIDR scopes remain CIDR inputs. The runtime expansion limit is 65,536 IPs per range and 65,536 unique expanded IP range targets per scan.

Removed Asset Types

The following are no longer canonical Assets:

Old type New representation
url Replaced by webapp; new create/restore paths must use webapp directly
path webapp.metadata.web.paths where a parent WebApp is known
parameter webapp.metadata.web.parameters where a parent WebApp is known
technology service.metadata.technologies or webapp.metadata.web.technologies
port Folded into service values and metadata
cidr Scope/configuration or intermediate discovery context
ip_range Scope/configuration or intermediate discovery context
asn Scope/configuration or intermediate discovery context

New production code must not emit removed Asset types. Old backup imports that contain removed Asset types are rejected instead of silently reintroducing obsolete inventory.

Identity Rules

Type Identity
organization organization:<organization_uuid>
domain normalized FQDN
subdomain normalized FQDN
ip canonical IP address
service host or IP + port + protocol, for example 203.0.113.10:443/tcp
webapp scheme + normalized hostname + effective non-default port
certificate SHA-256 certificate fingerprint

WebApp is an origin, not a page. For example https://example.com, https://example.com/, https://example.com:443, and https://example.com/admin?id=1 all identify the same WebApp Asset: https://example.com. The path /admin and parameter id belong under metadata.web.

Graph Model

The canonical graph is rooted at the Organization Asset:

Organization
  |
 owns
  v
Domain
  |
 contains
  v
Subdomain
  |
 resolves_to
  v
IP
  |
 exposes
  v
Service
  |
 serves
  v
WebApp
  |
 has_certificate
  v
Certificate

Paths, parameters, technologies, CIDRs, ASNs, IP ranges, and standalone ports are not normal graph nodes.

Threats are not Asset Graph nodes. The Threat types remain vulnerability, data_leak, misconfiguration, phishing, and employee; vulnerability is never an Asset type.

Threat Association

Every Threat has an Asset association. A specific affected Asset is preferred. Organization-level Threats such as employee exposure, broad phishing, or data leaks can use the Organization Asset as a fallback when there is no more specific infrastructure Asset.

Future Asset History Hook

Richer scanner-driven change history should hook into the Asset upsert/metadata merge path, after canonical identity resolution and before metadata persistence. That is the right point to compare previous metadata with normalized incoming metadata for events such as WebApp path changes, technology changes, certificate renewal, service fingerprint changes, or rediscovery.