A scanner can show nothing after a headline because it only reports what exists in its advisory data. If no advisory has been written yet, or it has not been mapped to your package and version, the scan stays quiet. Treat silence as "not yet known" and check your exposure by hand.
What a scanner actually compares
A dependency scanner does one job. It lists the packages and versions you use, then looks each one up in an advisory database. No record, no finding.
That makes the scan only as current as the records behind it. GitHub's documentation describes its advisory database as a set of advisories for specific security problems, imported from sources such as the National Vulnerability Database, ecosystem databases and community contributions. Each one has to be written, reviewed and mapped to a package before it can match anything in your repository.
News moves faster than that pipeline. A maintainer post, a researcher thread or a registry notice can land hours before a structured record exists.
Vulnerability records and malware records behave differently
GitHub's docs separate two kinds of advisory. A vulnerability advisory lists the range of affected versions and the earliest fixed version. A malware advisory has no fixed version, because the defining feature is that there are no safe versions: the safe course is to stop using the package.
This matters when you read the news. If the headline describes a malicious release, "no fix available" is expected. You are looking for a version to avoid and a version to roll back to, not a patch to apply. A scan that lists nothing for a malicious release may simply mean no malware record has been created for that package yet.
A manual check that does not wait for the database
When the headline names a package, do the lookup yourself.
- Write down the exact package name, ecosystem and the versions the source says are bad. Use the primary source, not a repost.
- Search your lockfiles and manifests for the name. In an npm project,
npm ls package-nameshows every copy in the tree. In a Python environment,pip show package-nameandpip freezeshow what is installed. - Compare the installed version to the bad list. A name match with a safe version is a no.
- Check whether any build or CI run installed the package during the bad window, since an old lockfile may not reflect what a build fetched. See the post on building the exposure window.
- Record the answer and the time you checked.
If you run many repositories, an inventory of every package and version across them turns step 2 into a single search instead of a repository by repository hunt.
Check back, because records change
Advisory records get created, edited and withdrawn after first publication. A scan that was silent in the morning may report a finding by evening. Set a recheck time, and write it in the ticket so the answer does not depend on someone remembering.
GitHub also notes that Dependabot alerts fire when a new vulnerability is added to the advisory database, and when your dependency graph changes. So an alert can appear later even with no change from you. Do not close the news item on the strength of an empty alert list.
Six reasons a scan can stay silent
Silence has more than one cause, and the cause decides what you do next. Work through this table before you decide anything.
| Reason | What it looks like | What to do |
|---|---|---|
| No advisory exists yet | The news is hours old, no record in any database | Check by hand, set a recheck time |
| Advisory exists but is not mapped to your package | A record exists under another name or ecosystem | Search the advisory database by name and ecosystem |
| The scan is older than the advisory | Last scan ran before the record appeared | Rerun the scan, or wait for the next scheduled run |
| The package is not in your manifest | It arrives as a transitive dependency your scanner does not read | Check the lockfile, not only the manifest |
| The scanner does not support the ecosystem | Nothing is ever reported for that language | Use a separate check for that ecosystem |
| You really are not affected | Name matches, version does not | Record the evidence and close |
Only the last row is good news, and you cannot tell it apart from the first five without looking.
A worked example
Suppose a news item says a popular npm package shipped two bad versions, 3.4.1 and 3.4.2, early on a Tuesday. At 10:00 your dependency scan shows nothing for that package.
You do not stop there. You run these steps.
- You open the primary source and copy the package name and the two versions into the ticket, along with the time you read it.
- You search your lockfiles. The package appears in two services. Service A pins 3.4.0. Service B resolves 3.4.2 through a caret range in a transitive dependency.
- That is a hit. The scanner was silent because no advisory record existed yet, not because Service B was safe.
- You pause the automated updates for that package, pin Service B to 3.4.0 with an override, and ask the build owner whether any job installed 3.4.2 fresh.
- At 14:00 you check the advisory database again. A malware record now exists. Your scanner picks it up on its next run and the ticket gains an official finding that matches what you already knew.
The by hand result arrived four hours before the database record. That is the whole point of the manual check.
What to tell colleagues while the scan is quiet
People will ask whether the scanner is clean. A useful answer has three parts: what you checked, what you found, and when you will check again. For example: "Scanner shows nothing, which only means no record exists yet. We checked lockfiles for both bad versions and found one service resolving 3.4.2, now pinned. We recheck the advisory data at 14:00."
Avoid "we are fine" until the by hand check is done and recorded. Avoid "we are vulnerable" until the version match is confirmed. Say what is known.
Make the next time faster
Teams that handle this calmly usually prepared two things in advance. First, a way to search every package and version across all repositories in one query, so step 2 takes minutes. Second, a short written routine so that nobody improvises under pressure. If you do not have either, the news item you are reading now is a good prompt to start one.
Try it yourself
Click through it at your own pace, or open it full screen. Look at how a project is watched over time, since a dependency can change status after you last checked.
Safeguard's SBOM and dependency scanning, plus continuous monitoring, are built around the same idea: your inventory is checked again when new advisory data arrives. You can try a free scan at gold.safeguard.sh/scan.
Quick check
Does a clean scan mean the news does not affect me?
No. It means no matching record exists in that scanner's data right now. Check the named package and versions by hand and set a recheck time.
Why would a malicious package have no fixed version?
Because there is no safe release to move to. GitHub's docs say a malware alert has no fix version since the safe course is to stop using the package.
How soon should I look again?
Pick a specific time, such as the end of the day and again the next morning, and write it in the ticket. Records are created and edited after first publication.
Sources
Last reviewed: 19 October 2026.