All notes

Vulnerability assessment: how to tell if the critical findings in your report are real

We received a vulnerability assessment of our company website with critical findings. How do we know they are real before paying to fix them?

The file was called wp-config.php.bak and, according to the report, anyone could download it from a browser and read the database password inside. It was not on the server. The three database copies the report listed as downloadable were missing too, and the "open" admin console did not exist. Eight critical findings, a score of 71 out of 100, and none of them was real. We had produced that report ourselves, with Quascan, the security scanner we built.

The explanation was a courtesy of their server. Ask it for a page that does not exist and it says everything is fine and shows a friendly page. It does this for any address, including one made up on the spot like /asdfghjkl.php, and always returns the same 8,921-byte page. The scanner asked whether the password file was there, got a yes and wrote it into the report as found.

We went back through every domain the tool had scanned up to that day. The same behaviour was there on 29 sites out of 294: one site in ten had received a report with at least one alert nobody had verified.

What a vulnerability assessment is, and what it sees from outside

A vulnerability assessment is a check that looks for the known weaknesses of a system and ranks them by severity. The kind that most often lands on a business owner's desk is the external, automated one: a scanner asks the website the questions anyone on the internet could ask (which files it serves, which certificate it uses, how email is configured) and tries to interpret the answers. Quascan works this way, without ever entering the company's systems.

The limit is the interpretation. Many sites answer in ways the scanner does not expect: the friendly page where an error should be, Cloudflare's anti-bot screen covering the real site, the email configuration written on the domain without the www while the scanner looks for it on the one with the www. Faced with an answer like that, a scanner can declare the check inconclusive, or it can guess. Guessing almost always produces an alert, because a report full of red looks more useful than one that admits what it could not see. And a report full of red makes the fix easier to sell.

It went wrong for us in several different ways:

  • a company with its email protected as strictly as possible was told that protection was missing entirely, because the scanner was looking for it at the wrong address
  • a name server slow to answer turned into email protection declared absent
  • a certificate installed without one of its intermediate pieces ended up in the report as a site without HTTPS, in red, while the padlock was right there in the browser
  • an application that answers any address with its home page was credited with WordPress files it has never had

The first fix was wrong too

To recognise courteous servers we added a simple check. Before looking for files, the scanner asks for a made-up address and keeps the answer aside; if a "found" file then has roughly the same length, it is discarded. The site from the beginning went from 71 to 95, with no criticals left. We also recomputed every score we use to compare sites with each other, because they had been built on the dirty numbers: the same principle as measuring on real data before trusting a comparison.

A month later, two reports that had gone out to clients were wrong again. One said "database copy exposed". That server inserted a random code into every page, different on each request, so two identical answers always had different lengths. The check written to prevent false alarms had no way of noticing.

The rule: a critical finding needs proof

In September we went through every check with a single rule. A problem goes into the report when there is proof. For an exposed file, the proof is having read its content and recognised it as that exact file. For a certificate that fails verification, the scanner has to say what is wrong: expired, issued for another name, incomplete chain.

When a check cannot reach a conclusion, because the server does not answer or shows an anti-bot screen, the result goes into a separate section of the report, the inconclusive checks. It stays there, and never becomes an alert. The report is shorter now, and your own technician can verify every line in it.

For an internal audit we would make the opposite choice. With a team that can check in five minutes, a false alarm costs a ticket closed at once and a missed problem costs far more, so reporting everything is right. A report sent to management has a different reader: whoever receives it cannot check an alert alone and passes it to the IT lead or to the website supplier. If the first critical that person opens is false, the whole document loses credibility, including the true things written in it. For the same reason we prefer systems that declare when they cannot answer: we cover it in the note on a switch for every fragile integration.

Vulnerability assessment or penetration test: which one you need

They are two different jobs answering two different questions. A vulnerability assessment asks which known weaknesses are present, and returns a list ranked by severity. It is largely done with automated tools, costs less and can be repeated often, for example after every major release. A penetration test asks how far a real attacker would get: a person tries to exploit the weaknesses, one after another, and documents the paths that work. It takes more time and more expertise, and is done less often.

For a company starting from scratch, the sensible order is almost always the same: an assessment first, then verification of the criticals it produces, then a penetration test on the parts that matter most, such as a business system exposed online or the customer area. A critical from an automated assessment is a hypothesis. A penetration test, or a manual check, tells you whether it can be reached.

NIS2 for small and mid-sized companies: is a vulnerability assessment enough?

On its own, no. NIS2, transposed in Italy by Legislative Decree 138/2024, asks for security measures that are mostly invisible from the internet: who has access to what, how backups are made and tested, what happens during an incident, who is accountable inside the company. An external scan of the website covers a small slice of that list. It is useful for finding doors left open and for building evidence over time, and on its own it does not prove compliance.

In Italy, organisations added to the NIS list in 2025 have 18 months from the national cybersecurity agency's (ACN) notice to adopt the baseline measures: for most of them the deadline falls in October 2026. The exact date is on the notice they received. There is also an effect that reaches companies outside the list: organisations subject to NIS2 must keep their suppliers' security under control, and the questionnaires travel down the chain. For many smaller companies the first request for a vulnerability assessment comes from a client, or from a tender in the public sector.

In that case it pays to hand over a report that survives a second reading. A document with false criticals, passed on to a client, opens questions that will then have to be closed one by one.

What to ask whoever sends you the report

These questions fit in one email, and the answers make sense without being technical.

  • For each critical finding, what is the proof? If the answer is that the server responded in a certain way, the proof is missing.
  • Does the report separate problems found from checks that failed? If everything is green or everything is red, with nothing in between, something was guessed.
  • Does the report say what it cannot see? Backups, staff access and procedures are invisible from outside. For NIS2 that is the part that weighs most.
  • Is the author of the report also the one selling you the fix? If so, have someone else check the criticals before approving the spend.
  • Does the same check, run again today, give the same result? An alert that comes and goes on every scan depends on how the server answers.

If you have a report in hand and do not know how far to trust it, we read it with you and tell you which criticals have proof behind them. It is part of our work in cybersecurity, for companies in general and for those working in the security sector. When security has to be built into a new business system or application, it enters the custom software project from day one. How the scanner is built is told in the case, and Quascan is also listed among our products.

Frequently asked questions

How do I know if a critical finding in a vulnerability assessment is real?
Ask for the proof. For an exposed file, the content the scanner read; for a protection declared absent, the exact address where it was looked for. If the proof is missing, a technician repeats the check by hand from the internet and sees whether the result holds. Only then does it make sense to pay for the fix.
What is the difference between a vulnerability assessment and a penetration test?
A vulnerability assessment lists known weaknesses, usually with automated tools, and is repeated often. A penetration test is a person actually trying to exploit them, showing how far an attack would get. The first tells you what to check, the second tells you what can be reached. A smaller company usually starts with the first and runs the second on its most exposed parts.
Is a vulnerability assessment enough for NIS2?
No. It covers what the website shows to the internet and produces useful evidence to keep. NIS2 also asks for processes, accountability, access management, backups and incident response, which cannot be seen from outside. In Italy, organisations on the NIS list since 2025 must adopt the baseline measures within 18 months of the ACN notice, for most of them by October 2026.
What is a false positive in a vulnerability assessment?
A reported problem that does not exist: a file declared exposed that is missing from the server, a protection declared absent that is actually configured. It almost always comes from a scanner that interpreted an ambiguous answer without verifying it. In our own history, one site in ten answered in a way that could fool a badly written check.
Who should check the report before acting on it?
The IT lead or an external technician who is not selling you the fix. Start from the criticals and ask for the proof of each one. Those without proof get verified by hand before any money is spent.

Describe the system. We'll tell you what we see.

Ten minutes, one question at a time. At the end, our honest read of the case. It's the filter, before the call.