Skip to content

Reading the Inventory

The Discovery section lists every domain you have run discovery against. Opening one shows its application inventory: the hosts found under it, what each appears to be, how exposed it looks, and whether anything is scanning it.

ColumnWhat it shows
DomainThe domain this inventory tracks, with the company name underneath when one is known.
HostsHow many hosts the inventory currently holds.
NewHow many hosts the most recent run saw for the first time. Click it to open the inventory narrowed to those hosts.
Last runWhen that run happened.

The search box reaches hostnames as well as domain names, so searching for admin finds the domains that have a matching host, with a matching chip showing how many.

The page is titled Application Inventory and has, top to bottom:

  • The header, with the domain and Run discovery for re-running it. A banner appears underneath when hosts are waiting to be classified.
  • The summary, two panels that describe the estate as a whole. See The summary panels.
  • Run history, collapsed by default, one line per run. Click a date to open that run, or Show only this run to narrow the table to what it found.
  • Tabs that split the inventory by what the hosts are.
  • The filters and the host table.
A domain's inventory: the summary, the tabs, the filters, and the hosts found.
A domain's inventory: the summary, the tabs, the filters, and the hosts found.

The tab, search, filters, sort and run narrowing are all carried in the URL, so a view can be bookmarked or shared.

TabCategories it holds
All applicationsEverything.
Authenticated appsLogin portal, Admin panel
APIsAPI
Public webMarketing site, Docs, Acquired product
Non-productionStaging/dev
UntriagedUnknown, Dead/parked, and hosts not yet classified

Each tab counts the live applications it holds. Hosts that no longer resolve are listed when you ask for them but never counted.

ColumnWhat it shows
ApplicationThe page title, or Untitled. A chip marks hosts that are New, Changed or Reappeared since the previous run, and a marker says how the host relates to the domain.
URLThe hostname, linked. Sortable.
AuthWhat stood between the probe and the application: no auth, login page, 401 challenge, a redirect to a login, or dead if the host did not answer. no auth on a live host is highlighted.
Key assetA switch to mark the host as one you want to protect. See Key assets.
ExposureCritical, High, Medium, Low or Info. An asterisk marks a provisional score. See How exposure is decided.
Breach recordsHow many records in a breach and infostealer corpus mention this host. Sortable. See Breach records.
CoverageWhether a scan target covers this host: Not covered, Never scanned or Scanned.
Last scanWhen the covering target was last scanned. Sortable.
ActionsCreate target, or once one exists, Start scan and a link to the target. See Creating targets from discovery.

Hover an exposure score for the facts that produced it, and a relation marker for where the host was found and why it was attributed to the company. The table sorts by exposure by default and loads a hundred rows at a time as you scroll.

FilterDefaultEffect
CriticalityOffShow only the exposure levels you pick.
Live & confirmedOnHide hosts that did not answer, and related domains that could not be confirmed.
Not coveredOffShow only hosts with no live target.
Key assetsOffShow only hosts marked as a key asset.
Other domainsOffShow only confirmed hosts on a root domain other than the one you ran discovery against.
NewOffShow only hosts the most recent run saw for the first time.

Live & confirmed hides a lot, for two reasons. Certificate transparency logs remember every name a certificate was ever issued for, including hosts retired years ago, so a real inventory is dominated by hostnames that no longer resolve. And unconfirmed related domains may not be yours at all, as explained next.

Every host is one of three things, and the marker beside its name says which.

RelationMarkerMeaning
Same rootAn info glyphA subdomain of the domain you ran discovery against. Not an inference: it shares the registrable domain.
Confirmed siblingOther domainA host on a different domain that NightVision confirmed belongs to the same company, on weighted evidence such as a shared favicon, analytics id, TLS certificate, network, registrant, nameservers, or a public record of the acquisition.
Sibling candidateUnconfirmedA different domain that related-domain discovery suggested and confirmation could not verify.

Related-domain discovery works from the company name, so a name that is also a common word or product category returns other companies’ domains, and those are real, live and unrelated to you. Candidates are hidden by default for that reason, are never actively checked or queried for breach records, and are worth confirming yourself before creating a target from one. Switch Live & confirmed off to review them.

Classification decides what a host is and assigns a category. It runs as the last-but-one phase of every run, working through the live hosts in batches. The tab a host appears under is its category.

CategoryTypical host
Marketing sitePublic brochure or campaign site.
Login portalA sign-in surface for an application.
APIA machine interface rather than a page.
DocsDocumentation or a knowledge base.
Staging/devA non-production environment.
Admin panelAn administrative or internal console.
Acquired productA product running under an acquired company’s brand.
Dead/parkedResolves but serves nothing meaningful.
UnknownThe signals were not enough to choose.

Unknown is a decision, not an omission. A host that has not been looked at yet has no category, and sits in Untriaged until it does.

When hosts are waiting, a banner at the top of the page says how many, with a Classify button. While a run’s own classification phase is working the button is disabled and the count falls on its own; otherwise it classifies the whole inventory now, including hosts the filters and tabs are hiding, and reports what it did as it goes.

A host that fails classification three times is left without a category. Each workspace may classify 10,000 hosts per month; a workspace that reaches the limit is told so and can contact NightVision to raise it.

Classification never scans anything and never judges risk. It assigns a category, and the exposure score is then recalculated against it by fixed rules.

An asterisk after an exposure score means the host has not been classified yet, so it was scored from its hostname and response alone, or that the classifier was not confident in its answer. Either way the score is a floor rather than a verdict.

A category set by hand is never provisional and is never overwritten by a later classification. Setting one is available through the API today rather than the portal.

The Key asset switch marks a host as one you particularly want to protect: a customer login, a payment page, an internal console. The mark does nothing to the score; it exists so the Key assets filter and the summary can answer “are the things we care about covered?” without you re-deriving the list every time.

Exposure is calculated by rules, not by a model, and every host records the facts that produced it. It is the product of two things.

Sensitivity is how much the host would matter if it were exposed.

SensitivityWhen
HighCategory Admin panel or Staging/dev, or a hostname containing a label like admin, staging, stage, dev, test, qa, uat, preview, sandbox, internal, int, jenkins, grafana, kibana, gitlab, jira or vpn.
MediumCategory Login portal, API or Acquired product, or a portal-like hostname such as portal, login, signin, secure, sso, auth, app, api, my, dashboard, console, account, customer, client, partner or remote.
LowEverything else.

A hostname can raise sensitivity above what the category alone would give, so an Unknown host called jenkins.example.com is still high sensitivity.

Observed exposure is what the response actually showed: the highest severity among the signals observed on the host, or none.

SignalSeverityFires when
Directory listingHighThe server returns an autoindex page.
Debug pageHighA framework debug or stack-trace page is served.
Sensitive surface with no authHighA high-sensitivity host returns 2xx with no authentication in the way.
Exposed .git repositoryHigh/.git/HEAD is readable and contains a Git ref.
Exposed .env fileHigh/.env is readable and contains environment variables.
Exposed server statusHigh/server-status is readable and is an Apache status page.
Exposed actuatorHigh/actuator/env is readable.
Dev or staging publicly reachableMediumA non-production surface answers publicly with no authentication.
Unexpected login formMediumA password field appears on a host that is not a login portal.
Wildcard CORSMediumAccess-Control-Allow-Origin: *. Informational on low-sensitivity hosts, where it is normal.
Server version disclosedLowServer or X-Powered-By reveals a version.
Missing HSTS, CSP or X-Frame-OptionsLowThe header is absent on an HTML 2xx response.
security.txt publishedInfoGood hygiene, recorded rather than counted against the host.
robots.txt discloses sensitive pathsInfoEntries reference admin, internal, private or .git.

Authentication gates exposure: when a host redirects to a login or answers with an authentication challenge, the “openly reachable” signals do not fire.

The score is sensitivity crossed with observed exposure:

Sensitivity / ObservedHighMediumLowNone
HighCriticalHighMediumLow
MediumHighMediumLowLow
LowHighMediumLowInfo

Low sensitivity with high observed exposure stays High: a readable .git directory or .env file is serious whatever the site is for. A host that did not answer, with nothing observed, is Info.

A numeric score sits inside each level, so hosts at the same level still sort against each other: Critical is 90-100, High 70-89, Medium 50-69, Low 20-49, Info 0-19.

After each run, NightVision counts how many records in a third-party breach and infostealer corpus mention each confirmed host over the last 90 days. The query is a count only; no record, account or credential is retrieved or stored.

The cell showsMeaning
A numberThat many records mentioned the host in the window. Hover for when it was counted.
0Counted, and nothing mentioned the host.
A dashNot counted yet.
n/aNot counted, and will not be: the host is an unconfirmed related domain.
!The query failed. Hover for why.

The number is not a count of accounts, since one account can appear in many records, and it is not additive, since records on a root domain may include records on its subdomains. Counts refresh weekly.

Two panels above the run history describe the inventory as a whole. Both follow the filters and count every matching host, not just the rows loaded so far. Hide them with the icon in their corner; the choice is remembered.

Scanned Application Breakdown shows how many of the live applications a scan has covered, and the exposure levels among the scanned ones, so you can see what has actually been tested, level by level.

Exposed Applications Over Time shows how many applications are critically exposed now, and a chart of critical, high and medium counts across completed runs. It takes two completed runs to have a shape.

Re-running a domain merges into the same inventory rather than replacing it, so NightVision can say what moved.

ChangeMeaning
NewThe latest run saw this host for the first time.
ChangedIts exposure level, authentication state, status class or signals differ from the previous run.
ReappearedIt had stopped appearing and is back.
(blank)Nothing meaningful changed.

Change is calculated from stable facts only. Page titles, technology strings and the category are ignored, so a classifier changing its mind cannot look like the estate changing.

A host that stops appearing is kept rather than deleted, because one run missing a host is far more often a quiet source than a decommissioning. A partial run never marks hosts as gone.