Key takeaways

  • Separate detection from dispatch: a finding is not automatically a sprint item.
  • Score reachability, exposure, and business consequence alongside severity.
  • Publish the triage model so teams can see why one defect outranks another.
  • Let matched threat intelligence jump the queue; ignore unmatched noise.
  • Keep the working backlog short. Everything else is inventory or exception.

CVSS answers a different question

CVSS estimates how bad a vulnerability could be in a generic environment. Application vulnerability management has to decide what this team should do this week. Those are not the same question. A remotely exploitable injection in an internet-facing payment API and the same CWE in an internal report generator behind a jump host can share a score and demand completely different urgency.

When the backlog is sorted only by severity, two failure modes appear. High scores on unreachable or already-mitigated issues consume engineering time. Lower scores on authenticated, data-rich, or actively exploited paths wait. The queue looks disciplined and the exposure is not.

Teach stakeholders this distinction once, in writing. Otherwise every intake meeting becomes a debate about whether “the score is wrong.” The score is often fine. The work order is what was wrong.

Build a decision, not a colour

A useful triage record states the asset, the reachable attack path, the current compensating controls, the likely consequence if exploited, and the effort to verify or fix. “Critical” is a label. “Unauthenticated attacker can read any tenant’s invoices through the export endpoint on billing-api, internet-facing, no WAF rule, customer data” is a decision input.

Keep the first pass cheap. Many scanner findings can be dismissed or deferred with a documented reachability check: Is the component deployed? Is the vulnerable function invoked? Is the service exposed? Is there already a control that changes the path? Only then spend a human on exploitability and fix design.

Time-box the first pass. Fifteen minutes of inventory beats two hours of hypothetical exploit narrative on a library the production image never loads.

  • Identify the service, environment, and data classification.
  • Confirm the code or dependency is actually reachable in production.
  • Note exposure: internet, partner, internal, or break-glass only.
  • Check whether a compensating control already changes the path.
  • Record exploit maturity or active use when threat intelligence exists.

A simple scoring overlay

You do not need a new industry standard. You need five questions the room can answer consistently: Is it running? Is it reachable from a trust boundary that matters? What data or action is at risk? Is there a known exploit or KEV match? How hard is the durable fix versus a temporary control?

Turn the answers into a small matrix that maps to SLA clocks. Internet-facing plus reachable plus sensitive data is this week. Internal plus unreachable plus already mitigated is this quarter or never. Write the matrix down so two analysts produce the same dispatch.

Resist multiplying weights until nobody can explain a ranking. If a manager cannot restate why item A beat item B, the model is a black box and will be ignored under pressure.

Let threat intelligence change the order

A theoretically severe issue in an unused library is not equivalent to a moderate issue on CISA’s Known Exploited Vulnerabilities catalog that your production image still ships. Intelligence should move a finding when it changes a fact: public exploit, ransomware use, or a regression in a component you actually run.

Do not ingest every advisory as a page. Correlate identifiers—CVE, package, image, service—against a current inventory. Unmatched intelligence is context for monitoring. Matched intelligence is work. This is how vulnerability management stays connected to operations instead of becoming a newsreader.

Re-triage when intelligence changes. A deferred item can become this week’s work without anyone being “wrong” last month. The record should show the new fact, not a silent priority edit.

Make ownership obvious at intake

Triage fails when the finding has a severity and no owner. Map services to teams before the scanner runs, not after the argument starts. Include a fallback: unmatched assets go to a named intake owner with a timebox to assign or accept as unowned risk.

Give developers the context they need to challenge or accept the item: evidence, affected version, suggested fix pattern, and what “done” means. A ticket that only says “upgrade lodash” produces delay, partial upgrades, and reopen. A ticket that says which service, which lockfile, which function is reachable, and which test will prove closure produces a patch.

Hold a short intake huddle on a fixed cadence. The meeting’s job is to empty the unsorted pile into owned, deferred, or exception—not to perform live exploitation stories.

Review the model when the queue lies

If everything is critical, nothing is. If engineering constantly disputes rankings, the model is opaque or wrong. Sample closed and deferred items monthly: Were unreachable issues still being patched? Were exploited-class issues waiting behind cosmetic findings? Adjust weights in public.

The output of triage is a short, ordered list of owned work—not a dashboard of thousands of open rows. Everything else is inventory, exception, or noise waiting to be tuned.

Watch for “priority inflation.” If teams learn that only Critical moves, they will relabel everything. That is a process failure, not a developer attitude problem.

Talk to engineering like a product manager

Bring capacity math. “This class will take roughly two days per service across six services” is a planning input. “Please take security seriously” is not. Offer a paved-road patch when the class repeats so the estimate shrinks next time.

Separate interrupt work from planned work. KEV-matched internet-facing issues may break the sprint. Informational findings should not. If both arrive as PagerDuty, you trained the organization to mute you.

Close the loop after the fix. Tell the team whether recurrence dropped. People support a triage model that is visibly learning.

Put it into practice

Connect findings to current exploit signals

Use Threat Intel to see KEV, NVD, and active reporting, then practice the matching weakness class in the Playground—without treating every CVE as a page.

Start practicing