Free tools / DNS and network

Online Vulnerability Scanner

Finds the software a host runs and looks each version up against known advisories.

What this tool does

Most servers that get broken into were not attacked cleverly. They were running a version of something with a published flaw, and somebody scanning the whole internet found them. The versions are not secret: a web server, PHP, SSH and most mail software announce themselves to anyone who connects. This scan reads what yours announces and looks each version up.

Enter a host name or public IP address. The scan connects once to each of a short list of ports, reads the greeting or the HTTP headers, works out the product and version, and reports every advisory in our signature database that covers that version, plus any version that has passed its end of security support.

Nothing is exploited and nothing is guessed. The scan sends one connection per port and, on a web port, one request for the home page — the same bytes a browser sends. That makes it safe to run against production, and it also sets the limit of what it can prove: a match means the version announced is one an advisory covers, not that the flaw is reachable on your build.

Reading the result

Likely
The version announced falls inside the range an advisory covers, and the version string shows no sign of a distribution's own packaging.
Possible
The same match, but the version carries a distribution suffix such as 1ubuntu2.14. Debian, Ubuntu and Red Hat backport fixes without changing the upstream number, so the server may already be patched.
End of life
The version is in a branch whose maintainers have stopped issuing security fixes. No particular flaw is needed for this to matter: the next one found will not be fixed either.
No version announced
The software answered but withheld its version. That is good practice, and it means this scan cannot tell you whether it is patched.
CVSS
The severity score published with the advisory, from 0 to 10. It rates the flaw in the abstract, not your exposure to it.
Signature
One record in our database: a product, the version ranges an advisory affects, and what to do about it.

How an unauthenticated scan actually works

A scanner that has no account on your server cannot read the package list, so it does the only thing left: it listens to what your software says about itself. A web server puts its name and often its version in the Server header of every response. PHP adds an X-Powered-By line unless told not to. SSH, SMTP and FTP daemons send a greeting before a single byte is typed at them. None of that is a leak in the dramatic sense. It is how the protocols were designed, and a browser receives it on every page load.

The scan reads those strings, works out a product and a version, and looks the version up in a database of published advisories. That is the whole method, and it is the method behind the internet-wide scanning that finds most compromised servers: somebody indexes who is running what, an advisory is published, and the list of targets already exists.

Knowing this tells you how to read the result. The scan proves what your server announced. It does not prove the flaw is present, because the same version number can describe a build with the fix and a build without it.

Note. Everything sent is one TCP connection per port and, on a web port, one request for the home page. No exploit, no password, no altered parameter, no guessed path. The scan cannot break what it looks at.

Where the signatures come from and how one is added

A signature is one record: a product, the version ranges a published advisory covers, the CVE identifiers, what an attacker gains, what the owner should do, and a link to the entry in the National Vulnerability Database so the claim can be checked rather than believed. Records live one file per product family, so adding one changes nothing else.

Version ranges are half-open: a version matches when it is at or above the version a flaw was introduced in, and below the version that fixed it. A single record usually carries several ranges, because a vendor fixes the same flaw in every supported branch on the same day. The flaw in PHP's CGI handler published in 2024 was fixed in 8.1.29, 8.2.20 and 8.3.8 together, and a record that listed only one of those would miss two thirds of the affected servers.

Three routes bring a record in. By hand, from a vendor advisory, when something matters enough to add the day it is published. In bulk from the NVD feed, which is read by a maintenance script from a shell and never from a visitor's request, so a slow or missing feed can never affect a scan. And from the end-of-life list, which needs no CVE at all: when a branch stops receiving security fixes, every flaw found in it from that date onwards stays unfixed, which is worth reporting on its own.

Every record is validated before it ships: the identifier has to be well formed, the severity has to be one of the five levels, each CVE has to look like a CVE, each reference has to be https, no range may be open at both ends, and the product has to be one the scanner can actually detect. A record for software nothing can recognize would never fire, so it is rejected rather than quietly carried. The test suite runs the validator over every file, so a malformed signature fails the build instead of a scan.

FieldWhat it holdsWhy it is checked
idSXV-PHP-0001 and so on, unique across the databaseTwo records with one identifier would collide in a report
productThe canonical name, such as apache httpdIt must match a product the fingerprinter can detect
affectedOne or more ranges of introduced and fixed versionsA range open at both ends would match every version ever released
cvesThe CVE identifiers, which become links to NVDSo a reader can check the claim at its source
severity and cvssOne of critical, high, medium, low, info, and the scoreThe score rates the flaw in the abstract, not your exposure
fixWhat the owner should do, in a sentenceA finding without an action is a complaint

Why a match is a lead and not a verdict

The honest weakness of version matching is backporting. When a flaw is found in PHP, Ubuntu and Red Hat do not ship the new upstream release to a stable system. They apply the fix to the version already there and bump their own packaging number, so a patched server can keep announcing 8.1.2 for years. Match on the upstream number alone and you report a flaw that was fixed eighteen months ago.

So the scan looks at the shape of the version string. A suffix such as 1ubuntu2.14 or el9 says a distribution built it, and the match drops from likely to possible with the reason written into the finding. Confirm it from the inside, where the answer is certain: ask your package manager what is installed and read the vendor's advisory for that package rather than the upstream project's.

The error runs the other way too. A server that hides its versions produces a clean report and may be years out of date. Suppressing version strings is sound practice and makes this kind of scan useless against you, which is rather the point of it. Patch levels are answered from your own inventory.

Note. A version match belongs in the same part of a report as a port that should not be open: something to go and check, with the evidence attached, not a conclusion to act on blindly.

Turning a scan into a patch that actually happens

The finding is the easy part. What fails in most organizations is the loop after it, so run the result into one rather than filing it.

  1. Confirm it on the host. Ask the package manager what version is installed and whether the vendor has issued a fix for this advisory.
  2. Decide the deadline by exposure, not by the score alone. A critical flaw in something only reachable from inside is less urgent than a medium one facing the internet, whatever the CVSS number says.
  3. Fix the source, not the symptom. If the version is end of life, upgrading the branch is the fix; patching around it buys weeks and costs the same effort.
  4. Re-scan, and keep the before and after. An auditor asking how you manage vulnerabilities wants evidence of the cycle, not a list of findings.
  5. Find out why it was old. A server behind on patches is usually a process fault, not a server fault, and the same process is behind the others.
Note. ISO 27001:2022 control 8.8 and PCI DSS v4.0 requirement 6.3 both ask for exactly this loop: identify, rate, fix within a defined window, and keep the record.

Use it with

Standards and references

Questions people ask

Does this attack my server?

No. It opens one connection to each port and, on a web port, asks for the home page once. No exploit is attempted, no password is tried, no parameter is altered and no hidden path is guessed. Everything it reads is what your server tells any visitor. It is safe to run against production.

A finding says my PHP is vulnerable, but my distribution says it is patched.

Both can be true. Ubuntu, Debian and Red Hat fix flaws by patching the version they already ship, so PHP 8.1.2 on Ubuntu may contain a fix that upstream released in 8.1.29 while still calling itself 8.1.2. Where the version string shows that packaging we mark the match as possible rather than likely. Confirm with your package manager: rpm -q or dpkg -l, then the vendor's advisory for that package.

Why does it find less than a commercial scanner?

Because it is unauthenticated and non-intrusive, which is deliberate. A scanner that logs in can read the installed package list and is far more accurate; one that sends exploits can confirm a finding but may also break what it is testing. This tool shows what a stranger on the internet can learn about you in a few seconds, which is the exposure worth knowing.

My scan found nothing. Am I safe?

It means nothing announced a version an advisory covers. A host that hides its versions gives this scan very little to work with, which is good practice and a weak test. Patch levels are answered properly from your own inventory, not from outside.

Where do the signatures come from?

Each one records a product, the version ranges a published advisory affects, the CVE identifiers and a link to the entry in the National Vulnerability Database so you can check it yourself. They are added by hand from vendor advisories and in bulk from the NVD feed, and every record is validated before it ships. The guide below sets out the format and the process.

Can I scan any host?

Only one you own or are authorized to test, which you confirm before the scan runs. Private, loopback and cloud-metadata addresses are refused, and so are names that point to them.

Related tools

Need someone to read the result? A version match is a lead. A penetration test confirms what an attacker could actually reach, and rates it by that rather than by a scanner's score. See penetration testing →