Skip to content

Threats

The Threats module is ShadowMap's triage and remediation layer. Every confirmed weakness the platform finds across your external attack surface — an exposed service, a misconfigured app, a defaced page, a vulnerable host — lands here as an alert that an analyst can prioritise, assign, investigate, and close. It is the queue your security team actually works.

Overview

Threats

Navigating to Threats drops you on the Alerts list at the Needs Review tab (/threats/alerts/needs_review). This is the default landing surface because it answers the first operational question: what needs my attention right now?

The page is table-first. From top to bottom you see:

  • A metrics strip of five KPI cards (Needs Review, Investigating, Accepted Risk, Closed, Unassigned). The first four are clickable and jump you to the matching tab; Unassigned is a read-only count.
  • A collapsible analytics panel with trend and breakdown charts.
  • A row of disposition tabs (Needs Review, Investigating, Accepted Risk, Closed, All) with live counts.
  • A filter bar with a Bookmarked toggle and Export action.
  • The alerts table, where each row opens a detail drawer.

The Threats module groups several related finding surfaces under one route. The primary one is Alerts (the consolidated triage queue). Alongside it sit IP Reputation, Vulnerability Overview, Open Ports, Network Services, Technology Stack, App Misconfigurations, and Defacements — each a focused view of one finding class. In the sidebar these are split for convenience: Alerts, IP Reputation, and Vulnerability Overview appear under CART (Continuous Automated Red-Teaming), while Open Ports, Network Services, and Technology Stack live under Attack Surface. They all share the same alert and disposition mechanics described below.

This page documents the Alerts queue

Because /threats redirects to the Alerts list, the rest of this page covers Alerts — the default view and the model that every other Threats surface follows. Each sub-module has its own page (see Related).

How it works

The Threats queue runs on a model you cannot infer from the table alone: two independent status axes, a numeric risk score, and SLA-driven prioritisation. Understanding these is the difference between drowning in the queue and working it efficiently.

Two status axes: Scanner Status vs Analyst Response

Every alert carries two states that mean entirely different things. Conflating them is the single most common mistake new users make.

AxisOwned byQuestion it answersValues
Scanner StatusThe platform's scannersIs this still observable on your surface?New, Open, Closed
Analyst ResponseYour teamWhat have we decided to do about it?Needs Review, Investigating, Accepted Risk, Closed
  • Scanner Status is automatic. New/Open mean the finding was present in the most recent scan; Closed means the scanner no longer detects it (the port was firewalled, the page was fixed, the host went offline). You never set this — the scanner does.
  • Analyst Response is your disposition. It only changes when a human (or an automation rule) acts on the alert.

Crucially, the word "Closed" means different things on each axis. A scanner-closed alert is one that vanished from your surface; an analyst-closed alert is one your team explicitly dispositioned. The two are independent — an alert can be analyst-closed while the scanner still detects it (you accepted it as expected), or scanner-closed while still in Needs Review (it disappeared before anyone triaged it).

To keep the axes from colliding visually, the Scanner Status column is hidden by default. Instead, each row shows a small dot next to the title:

IndicatorMeaning
● (filled)Currently Detected — present in the latest scan
○ (hollow)Not Detected in Latest Scan — the scanner no longer sees it

The disposition tabs and the KPI strip both track the Analyst Response axis, so a green "Closed" card always reflects work your team did — not findings that merely disappeared.

Why the Closed tab can show more than you closed

The Closed tab is a deliberate union: it shows alerts that are analyst-closed OR scanner-closed (no longer detected). This is intentional — a finding that resolved itself is, operationally, also closed. The count on the tab matches what the list shows.

Risk score and severity

Each alert carries a numeric risk score. The platform maps it to a severity label using fixed thresholds:

ScoreSeverity
≥ 8High
≥ 5Medium
≥ 2Low
< 2Informational

Severity is the default sort: opening the queue puts the highest-risk alerts at the top. For vulnerability-backed alerts you can also filter on the CVE exploit-prediction score (EPSS) as a separate field — see Filtering and search.

SLA-driven prioritisation

Alerts are governed by SLA policies (the queue's SLA type is ALERT). A policy can require, for example, that any High-risk alert be acted on within a set number of days. When an alert breaches its policy it surfaces as an SLA Policy Violation, which you can filter on. This is how the queue distinguishes "important" from "overdue" — and it feeds the platform's SLA-violation reporting.

How findings become alerts

The scanners that feed Threats run on a continuous cadence. When a scan confirms a weakness, it creates (or re-opens) an alert with New/Open scanner status and Needs Review analyst response. On subsequent scans:

  • If the finding is still present, the alert stays Open.
  • If it disappears, the scanner flips the alert to Closed (and stamps the last-detected time).
  • If a previously-resolved finding reappears, the alert re-opens — you do not get a duplicate.

The customer-facing taxonomy for what kind of finding an alert is comes from the Finding Type field (filterable). ShadowMap deliberately does not expose the underlying third-party scanner names; Finding Type is the stable, vendor-neutral classification you filter and report on.

Understanding the data

Columns

The table is column-customisable (the Title column is locked on). Defaults are marked below.

ColumnDefaultDescription
TitleYes (locked)The alert headline, prefixed with the ●/○ scanner-detection dot.
HostYesThe affected hostname or bare IP. Links into Subdomains (or IP Addresses if the host is an IP).
IPYesThe resolved IP. Links into IP Addresses.
PortYesThe affected port. Links into Open Ports, scoped to that IP and port.
PathNoThe URL path the finding was observed on, where applicable.
RiskYesSeverity badge (High / Medium / Low / Informational).
RelevanceYesA relevance score badge indicating how material the alert is to your environment.
Scanner StatusNoNew / Open / Closed. Hidden by default in favour of the title dot.
Analyst ResponseYesNeeds Review / Investigating / Accepted Risk / Closed / Reviewed.
Custom TagsYesKey:value tag pills applied manually or by tag rules.
Assigned ToYesThe owning analyst, shown as initials.
First SeenYesWhen the alert was first raised (relative time).

The host, IP, and port cells are pivot links — they carry you straight into the relevant asset surface filtered to that exact value, so you can see everything else known about the affected asset without re-searching.

Analyst Response values

ResponseMeaning
Needs ReviewUntriaged. The default state of every new alert.
InvestigatingA human is actively working it.
Accepted RiskReviewed and consciously accepted (e.g. expected exposure, compensating control in place).
ClosedDispositioned and done — remediated, false positive, or otherwise resolved.
ReviewedLooked at and acknowledged without a stronger disposition.

The filter bar supports a rich, field-level query builder. Available filter fields:

FieldNotes
Alert Title, Host, IP Address, Port, PathAsset and finding identifiers.
CVE ID, CWE IDTie alerts to specific vulnerabilities or weakness classes.
RiskHigh / Medium / Low / Informational.
Scanner StatusNew / Open / Closed (the automatic axis).
Analyst ResponseThe disposition axis.
Assigned ToFilter by owning analyst.
Country, ASNGeo / network ownership of the affected IP.
Finding TypeThe vendor-neutral finding taxonomy.
Tag RuleAlerts matched by a given tag rule.
SLA Policy ViolationAlerts that have breached their SLA.
EPSS ScoreCVE exploit-prediction score, for vulnerability-backed alerts.
BookmarkedLimit to bookmarked alerts.
First Seen, Last DetectedDate ranges.

Each disposition tab pre-applies a filter preset (for example, Needs Review = analyst response needs_review and scanner status new/open). You can layer additional filters on top, and the filter bar always shows exactly what the active tab is querying. The Bookmarked star toggle is a one-click shortcut to your starred alerts.

Save the views you run daily

A filter combination you return to — say, "High-risk SLA violations, unassigned" — can be saved. See Saved Searches.

Detail view

Clicking a row opens a side drawer; the expand icon opens the full alert page. The drawer is built for fast, keyboard-driven triage.

Header / navigation

  • Previous / Next chevrons step through the current result set (keyboard: k / j). They disable at the first and last alert. Esc closes the drawer.
  • An "open full page" icon takes you to the standalone alert view.

Top panel shows the three states side by side — Risk, Scanner Status, Analyst Response — followed by a row of disposition action buttons.

Summary tab lists the core fields: Scanner Status, Analyst Response, Host, IP, Port, First Seen, Last Detected, Assigned To.

Context tab surfaces the supporting evidence:

  • Tags and Custom Tags applied to the alert.
  • An Evidence Snapshot — a structured classification of why the finding fired.
  • A proof-of-concept screenshot where the scanner captured one.

Taking action

You can disposition alerts one at a time from the drawer, or in bulk from the list.

Per-alert (drawer):

  • Set Analyst Response: Needs Review, Investigating, Accept Risk, or Close.
  • Share the alert (to a connected integration).
  • Add comments and bookmarks from the row.

Bulk (selection bar): select alerts via the row checkboxes (or the header "select all on page") and a bulk action bar appears, letting you:

  • Change status for all selected alerts.
  • Assign them to an analyst.
  • Bookmark them.
  • Share them.
  • Apply a custom tag value.

Selection resets when you change pages

Bulk selection is scoped to the current page. Moving to another page, changing the page size, or paging the drawer clears your selection — this is deliberate, so a bulk action can never silently hit alerts you can't see. Select and act page by page.

Export: the Export button generates a download of the alerts matching your current filter, sort, and search — not just the visible page. See Exports.

Common questions

Why does an alert say "Closed" but still show a filled ● dot? Those are the two different axes. The badge or tab is the Analyst Response (your team closed it). The filled dot is the Scanner Status — the scanner still detects it on your surface. That combination usually means you accepted or closed a finding that is genuinely still present (expected exposure, or remediation in progress).

An alert disappeared from Needs Review on its own — what happened? The scanner stopped detecting it, so its scanner status flipped to Closed and it dropped out of the open tabs into the Closed tab (the union). The underlying weakness was fixed, the asset went offline, or the exposure was otherwise removed. It was never deleted — you can find it under Closed or "All".

What's the difference between "Accepted Risk" and "Closed"? Accepted Risk is an explicit decision to live with a finding that remains valid (compensating control, business exception). Closed means the issue is resolved or not actionable. Both remove the alert from your active Needs Review queue, but Accepted Risk signals an ongoing, knowingly-tolerated exposure.

Where do alerts come from? From ShadowMap's continuous external scans — open ports, network services, application misconfigurations, web defacements, vulnerable technology, IP reputation hits, and more. Each of those finding classes has its own focused view, but they all roll up into the Alerts queue here.

Why can't I see the name of the scanner that found it? By design. ShadowMap normalises findings into a vendor-neutral Finding Type taxonomy so your reporting and filtering stay stable regardless of the underlying tooling. Filter and report on Finding Type instead.

How do I make sure the right things bubble up? Sort by Risk (the default), filter on SLA Policy Violation to surface overdue items, and use tag rules and SLA policies to automate prioritisation and routing.

ShadowMap - External Attack Surface Management