Blog · BL-15
How to Turn Vulnerability Intelligence into an Actionable Product: From Alert Lists to Remediation Queues
Vulnerability intelligence APIs only provide candidate risks. This article discusses how to combine assets, dependency scopes, reachability, in-the-wild exploitation, and fixed versions to turn security alerts into actionable, closable engineering tasks.
Submitting a dependency list to a vulnerability intelligence API and receiving a batch of CVEs or security advisories does not equal building a vulnerability management product. What development teams actually need is an actionable queue: which service is affected, why it must be handled now, who will modify it, what upgrades will break, and how to prove the risk has been closed.
Hacker News discussions about https://news.ycombinator.com/item?id=47094192 focus on issues like alert noise, call reachability, and shifting security tasks onto developers. Comments do not represent industry consensus, but they remind product designers: if every scan only increases red numbers without providing enough context to take action, users will eventually ignore the entire channel.
Vulnerability Records Are Only Candidates; Asset Context Determines Tasks
A vulnerability database describes certain versions of a package as affected. Organizations must answer internally: does this version actually exist in the current build, which environment is it deployed in, can it be reached externally, does the vulnerable function enter the execution path, and are patches or feasible mitigations already available? Severity level is only one input.
The https://google.github.io/osv.dev/api/ supports querying by package version or commit, and also provides batch queries and reading vulnerability records by ID. This is suitable for connecting software bills of materials with public vulnerability records, but query results alone cannot prove production exposure. Lockfiles, build artifacts, container images, and running instances may have drifted, so the scanned object must be clearly stated.
The first step should establish an asset relationship for each candidate: repository, component, resolved version, build identifier, deployment environment, and owner. If only dependency information for the repository's default branch is available, limit the conclusion to that branch; do not expand it to claim that the production system has vulnerabilities. If deployment status cannot be determined, the task should be to complete asset evidence, not to fabricate certainty.
When Multiple Intelligence Sources Meet, Preserve Sources Before Merging
The https://google.github.io/osv.dev/data/ lists the ecosystems and upstream databases it covers. A vulnerability may be described by multiple sources, and may later be corrected, retracted, or supplemented with affected ranges. Products can display merged views by alias and package coordinates, but must preserve each source's ID, update time, affected range, and original text link.
Multiple sources do not automatically double credibility. Several websites may repost the same advisory, and multiple databases may use the same upstream record. Truly useful cross-checking compares whether they independently support the same key fields: affected versions, fixed versions, exploitation preconditions, or retraction status. Conflicting fields must be explicitly exposed rather than having a model silently select one.
Standardized objects can include the following parts:
- Primary vulnerability identifiers, aliases, affected packages, and version ranges.
- Source records, first-observed and last-checked times, and revision or retraction status.
- Known fixed versions, vendor mitigations, and their applicability conditions.
- Internal assets, environments, dependencies, and evidence timestamps matched within the organization.
- Priority signals, manual judgments, owners, and disposition statuses.
This way, even if external descriptions change, the team knows what the old judgment was based on rather than only seeing a current overwritten record.
Priority Is Not Sorting CVSS from High to Low
⟦GitHub's Dependabot documentation](https://docs.github.com/en/code-security/how-tos/manage-security-alerts/manage-dependabot-alerts/view-dependabot-alerts) explains that its priority considers signals such as CVSS, dependency scope, and whether vulnerable function calls are detected. This demonstrates an important direction: severity, relevance, and actionability need to be combined rather than just displaying a single score.
The ⟦CISA Known Exploited Vulnerabilities Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) is used to flag vulnerabilities known to be exploited in the wild and is recommended as an input to vulnerability management priority frameworks. Matching KEV should raise attention, but still does not automatically prove an organization has been attacked, nor does it replace asset exposure assessment.
An explainable priority can answer the following in sequence:
- Whether the asset is deployed and in a production, internal, or development environment.
- Whether the vulnerable component is a direct or transitive dependency and whether it is packaged into the final artifact.
- Whether external or low-privileged users can reach related entry points and whether vulnerable code might execute.
- Whether known in-the-wild exploitation, public mitigations, and available fixed versions exist.
- What the upgrade costs, compatibility risks, and business windows are.
Products do not need to compress these questions into a mysterious AI risk score. Displaying evidence and gaps is often more useful: for example, production image confirmed to contain; external exposure unconfirmed; fixed version available; upgrade testing not yet started. Owners know at a glance which evidence to supply next.
Remediation Queues Must Have Closing Conditions
Many security dashboards only have three coarse-grained statuses: Open, Dismissed, and Fixed, which fail to express real engineering processes. More practical queues can include: pending asset confirmation, confirmed affected, remediation planned, change validation, mitigated pending upgrade, closed, mismatched, and risk accepted. Each status must have entry and exit conditions.
Upgraded version does not necessarily equal closed. Verification must at least confirm that new lockfiles or build artifacts no longer hit the affected range, related tests pass, and target environments actually run the new artifacts. If configuration mitigations are adopted, record the source, applicability conditions, expiration date, and final upgrade owner to prevent temporary solutions from becoming permanent.
Ignoring alerts also requires reasons. Test fixtures not entering artifacts, misidentified package ecosystems, or existence only in decommissioned branches can all be reasonable closing reasons; currently have no time is not the same kind of evidence. Products must allow reopening because both asset and vulnerability records can change.
In-site ⟦operational capability and documentation drift analysis](https://everyinfra.com/build/live-capability-catalog) explains that declarations, configurations, and actual runtime cannot be mixed; ⟦failure return and reconciliation guide](https://everyinfra.com/build/failure-refund-reconciliation), while discussing billing, provides the equally important event ledger mindset: every state change must be able to trace its cause, inputs, and subsequent actions.
Alerts Should Be Sent to the Owner's Work Queue, Not Everyone's Inbox
The same vulnerability may hit dozens of repositories, but the actual fix might only require upgrading a shared base image, or each service might need separate verification. Merge before notifying: establish master tasks by common root cause, then create sub-items for affected assets. Otherwise, duplicate messages create false workloads.
Sent content should include asset, version, environment, priority basis, remediation or mitigation entry points, missing evidence, and a clear owner. When there is no owner, the system should expose unassigned rather than broadcasting to the entire engineering organization. Emergency channels are only used for events meeting pre-defined conditions, while the rest enter daily queues.
Rescan failures should also be explicitly prompted. If intelligence sources are unavailable or bill of materials generation is interrupted, a green no new vulnerabilities message produces dangerous misleading information. Referring to in-site ⟦API error and self-healing guide](https://everyinfra.com/build/api-errors-self-healing), scan completion, partial completion, and non-execution must be distinct states.
Commercialization Can Focus on Reducing Loop Costs Rather Than Selling More Alerts
Early services can connect a limited number of repositories and deployment environments for an engineering team, with human participation in mismatch cleanup, asset attribution, and upgrade verification. Pricing units can be designed around managed assets, workflow depth, and response collaboration rather than charging per vulnerability captured. More alerts do not mean customers get more value.
During pilots, record time from candidate to confirmation, unassigned proportion, duplicate task merge rate, closing time after entering remediation, reopening reasons, and expired risk acceptance items. Do not only display discovered vulnerability count decreased, because numbers can also drop due to scan failures, missing assets, or rough ignoring.
Renewal decisions should return to engineering results: whether owners understand risks faster, whether duplicate research is reduced, whether remediation leaves verifiable evidence, and whether coverage interruptions are caught in time. This article discusses vulnerability intelligence productization methods, does not imply that EveryInfra provides vulnerability management services, and does not constitute safety conclusions for specific systems.
Vulnerability data is the public information layer, and true product value happens inside organizations: connecting external records with real assets, explaining risks as actionable tasks, and closing them using build, deployment, and runtime evidence. Without this, even the most complete vulnerability library will only generate longer to-do lists.