SFOLN

Catalogue / Compliance & public records

CVE & Package Vulnerability Lookup

sfoln/cve-lookup · Developer tools, AI, Automation On request

CVE details from NVD: CVSS v3.1 and v4.0 scores and vectors, CWE, references, EPSS exploit probability and CISA KEV status with a patch priority. Also scans open-source packages (npm, PyPI, Maven, Go, crates.io, NuGet, RubyGems) via OSV with fixed versions. $2 per 1,000 lookups.

About

What it does

Look up CVE details and open-source package vulnerabilities in one call. For each CVE id you get the NVD record (description, CWE, CVSS v4.0, v3.1 and v2 scores and vectors, references, affected products and CPEs), the EPSS exploit probability, CISA KEV status (date added, due date, ransomware use), CISA's SSVC decision points and a computed patch priority. For each package (npm:lodash@4.17.20, a purl, …) you get every known advisory from OSV for that version, merged across databases, with severity, CVSS, CWE, fixed versions, EPSS and KEV, plus the version to upgrade to. Built for security teams, vulnerability management and SBOM pipelines, and for coding agents checking a dependency before they add it.

Price

Price per delivered record

EventPricePer 1,000Charged for
CVE record
cve
$0.002$2 / 1,000One CVE with NVD details (CVSS, CWE, references), EPSS score, CISA KEV status and patch priority.
Package vulnerability report
package
$0.002$2 / 1,000One open-source package version checked against OSV: advisories with severity, CVSS, fixed versions, EPSS and KEV, and the version to upgrade to.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~cve-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cveIds":["CVE-2021-44228"],"packages":["npm:lodash@4.17.20"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/cve-lookup"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~cve-lookup/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Look up CVE-2021-44228 and check npm:lodash@4.17.20 for known vulnerabilities: give CVSS, EPSS, whether it is in CISA KEV, and the version to upgrade to.

Input

Input fields

CVE ids and/or open-source packages. Each produces one dataset record with a normalized status.

FieldTypeDefaultMeaning
cveIdsarray—CVE ids
CVE identifiers, one per line (CVE-2021-44228). Each returns NVD details (CVSS, CWE, references), the EPSS score and CISA KEV status. Accounts on the Apify free plan can process up to 10 CVEs and packages per run.
packagesarray—Packages
Open-source packages, one per line, as ecosystem:name@version (npm:lodash@4.17.20, pypi:requests==2.19.0, maven:org.apache.logging.log4j:log4j-core@2.14.1, go:golang.org/x/net@v0.17.0, cargo:serde@1.0.0, nuget:Newtonsoft.Json@12.0.1, gem:rails@6.1.0, composer:symfony/http-kernel@5.4.0) or a purl (pkg:npm/lodash@4.17.20). Without a version, every known advisory of the package is listed.
maxItemsinteger1000Max items
Safety cap on CVEs plus packages processed in this run; the rest are ignored and counted as inputItemsDropped in the OUTPUT record. Range 1–10000.
concurrencyinteger4Concurrency
Items processed in parallel (NVD's own limit of 5 requests per 30 s applies to CVE lookups whatever this value). Range 1–8.
includeRawbooleanfalseInclude raw upstream data
Attach the NVD / CVE.org record, EPSS and KEV entries (CVEs) or the OSV advisories (packages).
Example input
{
  "cveIds": [
    "CVE-2021-44228"
  ],
  "packages": [
    "npm:lodash@4.17.20"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The CVE id or package spec as entered (CVE ids upper-cased).
recordTypestringRecord type
cve | package. e.g. "cve"
cveIdstringCVE e.g. "CVE-2021-44228"
foundbooleanFound
dataSourcestringData source
nvd, or cve.org when NVD has no record yet or could not be reached.
vulnStatusstring | nullStatus at source
NVD: Analyzed, Awaiting Analysis, Modified, Deferred, Rejected, …; CVE.org: PUBLISHED, REJECTED.
publishedstring | nullPublished
lastModifiedstring | nullLast modified
descriptionstring | nullDescription
cwesarrayCWEs e.g. ["CWE-502"]
cvssScorenumber | nullCVSS score
Headline score: CVSS v3.1, else v3.0, else v4.0, else v2.
cvssSeveritystring | nullSeverity
cvssVersionstring | nullCVSS version
cvssVectorstring | nullCVSS vector
cvssV40Scorenumber | nullCVSS 4.0 score
cvssV40Severitystring | nullCVSS 4.0 severity
cvssV40Vectorstring | nullCVSS 4.0 vector
cvssV31Scorenumber | nullCVSS 3.x score
cvssV31Severitystring | nullCVSS 3.x severity
cvssV31Vectorstring | nullCVSS 3.x vector
cvssV2Scorenumber | nullCVSS 2 score
cvssV2Severitystring | nullCVSS 2 severity
cvssV2Vectorstring | nullCVSS 2 vector
epssScorenumber | nullEPSS
FIRST EPSS: probability of exploitation activity in the next 30 days (0–1).
epssPercentilenumber | nullEPSS percentile
epssDatestring | nullEPSS date
kevboolean | nullIn CISA KEV
Listed in CISA's Known Exploited Vulnerabilities catalogue (null when the catalogue could not be read).
kevDateAddedstring | nullKEV added
kevDueDatestring | nullKEV due date
kevRansomwareUsestring | nullRansomware use
Known | Unknown.
kevRequiredActionstring | nullKEV required action
kevVulnerabilityNamestring | nullKEV name
ssvcExploitationstring | nullSSVC exploitation
CISA SSVC: none | poc | active.
ssvcAutomatablestring | nullSSVC automatable
ssvcTechnicalImpactstring | nullSSVC technical impact
prioritystringPatch priority
critical | high | medium | low (see priorityReason).
priorityReasonstringPriority reason
affectedarrayAffected products
[{ vendor, product, versions[] }] as stated by the CVE's assigner (at most 25).
cpesarrayVulnerable CPEs
NVD's vulnerable CPE match criteria with version bounds (at most 100).
referencesarrayReferences
[{ url, tags[] }] (at most 50).
nvdUrlstringNVD page
packagestringPackage
Canonical ecosystem:name@version. e.g. "npm:lodash@4.17.20"
ecosystemstringEcosystem
namestringName
versionstring | nullVersion
vulnerablebooleanVulnerable
vulnCountintegerVulnerabilities
Distinct vulnerabilities (advisories of several databases for one CVE count once).
maxSeveritystring | nullMax severity
maxCvssScorenumber | nullMax CVSS
knownExploitedboolean | nullKnown exploited
Any of its CVEs is in CISA KEV.
maxEpssnumber | nullMax EPSS
upgradeTostring | nullUpgrade to
Lowest version that fixes every fixable advisory of the queried version (best-effort version ordering).
unfixedCountinteger | nullWithout a fix
advisoriesarrayAdvisories
[{ id, aliases, cveIds, databases, summary, severity, cvssScore, cvssVersion, cvssVector, cwes, fixedIn, fixedVersions, published, modified, epss, epssPercentile, kev, kevDateAdded, kevDueDate, kevRansomwareUse, url, references }]
osvUrlstringOSV page
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered e.g. "ok"
chargedbooleanCharged
chargedEventstringCharged event
chargedCountintegerEvents charged
sourcestringSource
nvd-osv
fetchedAtstringFetched at
errorobjectError
{ code, message, provider?, status? } when status is not ok. Codes: invalid_package, not_found, rate_limit, timeout, network, server, client, invalid_response; runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed.
warningsarrayWarnings
rawobjectRaw
Upstream records (only with includeRaw).
Example record
Example record
{
  "input": "CVE-2021-44228",
  "recordType": "cve",
  "cveId": "CVE-2021-44228",
  "found": true,
  "dataSource": "nvd",
  "vulnStatus": "Analyzed",
  "published": "2021-12-10T10:15:09.143Z",
  "lastModified": "2026-08-11T19:33:44.513Z",
  "description": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. …",
  "cwes": [
    "CWE-20",
    "CWE-400",
    "CWE-502",
    "CWE-917"
  ],
  "cvssScore": 10,
  "cvssSeverity": "CRITICAL",
  "cvssVersion": "3.1",
  "cvssVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
  "cvssV40Score": null,
  "cvssV40Severity": null,
  "cvssV40Vector": null,
  "cvssV31Score": 10,
  "cvssV31Severity": "CRITICAL",
  "cvssV31Vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
  "cvssV2Score": 9.3,
  "cvssV2Severity": "HIGH",
  "cvssV2Vector": "AV:N/AC:M/Au:N/C:C/I:C/A:C",
  "epssScore": 0.99999,
  "epssPercentile": 1,
  "epssDate": "2026-10-14",
  "kev": true,
  "kevDateAdded": "2021-12-10",
  "kevDueDate": "2021-12-24",
  "kevRansomwareUse": "Known",
  "kevRequiredAction": "For all affected software assets for which updates exist, the only acceptable remediation actions are: 1) Apply updates; OR 2) remove affected assets from agency networks. …",
  "kevVulnerabilityName": "Apache Log4j2 Remote Code Execution Vulnerability",
  "ssvcExploitation": "active",
  "ssvcAutomatable": "yes",
  "ssvcTechnicalImpact": "total",
  "priority": "critical",
  "priorityReason": "listed in CISA Known Exploited Vulnerabilities",
  "affected": [
    {
      "vendor": "Apache Software Foundation",
      "product": "Apache Log4j2",
      "versions": [
        "2.0-beta9 to < log4j-core* (affected)"
      ]
    }
  ],
  "cpes": [
    "cpe:2.3:o:siemens:6bk1602-0aa12-0tp0_firmware:*:*:*:*:*:*:*:* <2.7.0"
  ],
  "references": [
    {
      "url": "http://packetstormsecurity.com/files/165225/Apache-Log4j2-2.14.1-Remote-Code-Execution.html",
      "tags": [
        "Third Party Advisory",
        "VDB Entry"
      ]
    }
  ],
  "nvdUrl": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
  "status": "ok",
  "charged": true,
  "chargedEvent": "cve",
  "source": "nvd-osv",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

FAQ

Questions

Where does the data come from?
CVE details from the NVD CVE API 2.0 (falling back to the CVE.org record when NVD has not published or cannot be reached), exploit probability from FIRST EPSS, known exploitation from the CISA KEV catalogue, and package advisories from OSV (GitHub, PyPA, RustSec, Go and other databases), with deps.dev to tell an unknown package from a clean one.
How is the patch priority computed?
critical when the CVE is in CISA KEV or CISA's SSVC says exploitation is active; high when EPSS ≥ 0.1 or CVSS ≥ 9.0; medium when CVSS ≥ 7.0 or EPSS ≥ 0.01; otherwise low. The reason is in priorityReason.

Machine-readable

This page for agents