Vulnerability Triage When the Reports Keep Coming
More findings arrive than teams can fix. Triage is the skill of deciding what is reachable, exploitable and important in your environment.

On this page
Scanners now report more findings than most teams can fix in a quarter, and the list tends to grow faster than the capacity to work through it. A severity score is a starting point. It describes how bad a flaw could be in general and says nothing about your systems. Triage is the work of deciding, for each finding, whether it is reachable in your environment, whether it matters to the asset it sits on, whether there is evidence of exploitation in the wild, and what fixing it would cost. Those questions order the work far better than the score alone.
Start with the asset
Begin with what the finding sits on. An asset record should say who owns the system, what data it holds, whether it faces the internet and how critical its function is. Without that record, every finding looks equally urgent, and the queue is ordered by whichever scanner reported last. Ownership belongs in the same record. A finding without an owner tends to stall, because each team assumes it belongs to someone else. Assign an owner at intake, even a provisional one, and let that owner dispute the assignment with evidence.
Consider two findings with the same score. One sits on a component reachable only from an internal administrative network that requires strong authentication. The other sits on a public service that handles customer accounts. A team that works by score fixes the first one first, and the second waits. Ordering by asset context reverses that, and the reversal is usually the right call.
Check reachability in the real configuration
Reachability asks whether the flaw can be triggered in the configuration you actually run. A vulnerable library may load only when a feature is switched on, or it may sit behind a gateway that rejects the request shape before it arrives. Check the configuration, not just the version string. Distributions and vendors often ship fixes without changing the visible version, so a version comparison can mark a patched system as vulnerable or an unpatched one as safe. Where the two checks disagree, read the package changelog or the vendor advisory and record what it says.
Reachability also includes authentication. A flaw that needs a logged-in administrator differs from one reachable before login, and that difference should be visible in the ticket. Note the preconditions alongside the finding so the next person reading it does not have to rediscover them.
Read exploitation signals with their limits
Several signals suggest whether a flaw is being used. Public exploit code makes exploitation easier. Some governments maintain catalogs of vulnerabilities known to be exploited, and inclusion there is a strong reason to raise a finding's priority. Vendor advisories sometimes state that exploitation has been seen. Some organizations publish scores that estimate the likelihood of exploitation within a period. Each signal has limits. Public code may be a proof of concept that fails against your build. A catalog lags behind activity. An estimated likelihood describes a population rather than your exposure. Use the signals together, and treat the absence of one as weak evidence of safety rather than proof of it.
Use AI for grouping, not for the decision
Models can help with the mechanical parts of triage. Several scanners may report the same underlying flaw under different names, and a model can cluster findings by root cause, draft a ticket from scanner output or summarize a long advisory. That work saves time. It does not set priority.
Check the outputs. A grouping that merges two distinct findings can hide a second vulnerability behind a single fix. A ticket draft can carry the wrong asset identifier, and the team then patches the wrong machine. Compare a sample of grouped findings with the raw data each week, and keep the decision about what gets fixed with an owner who can see the asset context. Review cluster labels with someone who knows the components, since two names that look alike can refer to different products.
Set service levels by risk
A single deadline for every finding is easy to state and hard to meet. Tie targets to the combination of exposure and exploitation. Findings reachable from outside, on critical assets, with evidence of exploitation, get the shortest target. Findings that are internal, behind strong controls and unexploited get a longer one. Exceptions should exist, but each needs a named owner, a compensating control and an expiry date, so a deferred finding returns to view rather than disappearing.
Re-triage when the context changes. A finding moved to a more exposed network zone, or a new public advisory about the same component, should trigger a fresh look rather than waiting for the next scheduled review.
Measure what the targets do. A queue that is always past its deadlines usually means the targets are not matched to capacity, which is a different problem from slow work.
Practice on a sample
Take twenty findings from a scanner export, or build a sample in a lab. Add three pieces of context to each: whether the asset is internet-facing, what data it holds, and whether a signal of exploitation exists. Rank the twenty. Write a sentence for each of the top five and bottom five explaining its position. Then list the information that would change the ranking, such as a configuration check or an owner's confirmation. That last list is the one to take back to the team, because it shows where triage depends on data the scanner does not provide. Repeat the exercise a month later and compare the rankings. Changes you did not expect usually point to assumptions in the context data that need correcting.

