fortres

Your data sits behind thousands of locks.

Every app you use is built from software, and all software has weak spots called security holes. Think of each brick in this wall as one of them.

1in 855

Only a few are ever used by attackers.

About one hole in 855 ends up on CISA's list of holes attackers have exploited. That's the one you need to find.

$4.99M

Miss it, and it gets expensive.

That's the average cost of one data breach worldwide, from IBM's Cost of a Data Breach Report 2026. So choosing which holes to fix first is a five-million-dollar decision. And it's ordinary people's passwords and bank details that leak.

72,670

New holes announced in 2026.

No team can fix them all, and attackers are speeding up: IBM reports AI-driven attacks rose 56%, led by deepfake impersonation and AI-written malware. Most teams can fix a few hundred. So which few hundred?

1in 9

Dangerous holes often look harmless on paper.

Every hole gets a label: Low, Medium, High or Critical. Most teams fix Critical and High first. But of the 1,484 holes on CISA's list of ones attackers have used (2021 to 2025), 162 were labelled only "Medium". That's 1 in 9. Medium is the most common label, about a third of all holes, so a critical-first team gets to these last.

labels from the US National Vulnerability Database · this describes CISA's list, not fortres
500

Fortres picks the 500 to fix first.

Fortres is a triage system for security holes. A statistical model ranks all 72,670 and picks the 500 most likely to be attacked. IBM Granite helps read the descriptions and explains every pick in plain words.

6 of 855 bricks: the same share as 500 of 72,670
52×better than chance

We flag under 1% of holes and find over a third of the ones that matter.

Only 1 in 855 holes ever gets added to CISA's list. 1 in 16 of fortres's picks did. In our 2024 and 2025 test, fortres flagged 441 of 64,119 holes (0.69%) and caught 27 of the 75 that landed on the list (36%). The top of the list is sharpest: of its top 100 each year, 1 in 9 got added.

27fortres
19usual rule
11EPSS score alone
5by severity
27 vs 19 for the usual rule: +8, 90% range from +2 to +14 · 18 to 13 in 2025, 9 to 6 in 2024 · 2.5× EPSS alone · 5.4× severity
23×less work

Fortres caught those 27 with a list of only 441 fixes.

To reach the same 27, the usual rule would have to go 1,116 deep. Sorting by severity, 6,858. EPSS alone, 10,026. Every fix costs a team time and money, so fewer, better-chosen fixes is the whole point.

441fortres
1,116usual rule
6,858by severity
10,026EPSS alone
each brick is about 100 fixes · same 2024 and 2025 test as the 27 · fortres's 27th catch is at position 353
44of 75

Most holes that end up on CISA's list give no warning first.

For 44 of the 75, nobody had posted code to attack them, and their warning score was low. Most teams only rush to patch holes with those signs, so all 44 would slip past.

5of those 44

Fortres still spotted 5 of the quiet ones.

Five is small, and three come from one Ivanti event. But the usual rule can't see this group at all.

178,175descriptions

First, IBM Granite reads every hole.

It reads each description the way an analyst would, on our own laptop, and scores how much it sounds like holes attackers used before.

IBM Granite Embeddinggranite-embedding-30m-english · run locally

0.59seconds

Then a model ranks all 72,670, on a laptop.

It weighs public attack code, warning scores, the vendor's track record and what Granite read. Twenty models vote, and the top 500 make the list. Projected from a timing test: ten million holes would take about 79 seconds. That's more than a century of holes at today's pace.

318of 500

Every pick tells you why it made the list.

IBM Granite writes one plain sentence per pick. Granite Guardian checks it only says what the facts say. The 182 that fail get a simple fill-in sentence, so nothing made up reaches you.

Pick 472: “Prioritised because it has public exploit code in Exploit-DB and GitHub, and it's an SQL injection vulnerability.”

IBM Granite GuardianGranite Guardian 3 (2B) · run locally · 318 of 500 passed

IBM watsonx.governanceIBM Cloud · scored all 500 reasons · 0 of 500 flagged for harm or personal data

27not 33

We could have claimed 33. We didn't.

Some data only shows up after an attack. Using it would have taken us from 27 to 33, so we left it out. We also reran it with four sets of random seeds and got 26 to 28 every time. Trained on shuffled answers, it catches less than 1.

A fortress can't guard every brick. It can guard the ones attackers aim for.

fortres.us · IBM "Before the Breach" · Sheridan Datathon 2026 · Yahya and Jack
Data: NVD, FIRST EPSS, CISA KEV · IBM Granite and Granite Guardian, run locally · IBM watsonx.governance on IBM Cloud
Design inspired by taste-skill, impeccable and Emil Kowalski, with IBM Carbon touches

What is fortres?

Fortres is a triage system for security holes: a statistical model ranks all 72,670 of 2026's new vulnerabilities and picks the 500 most likely to be attacked, and IBM Granite models help read the descriptions and explain every pick in plain language.

  1. readGranite Embedding reads every description.
  2. rank20 models that vote, each built from 150 small decision trees.
  3. explainGranite writes each reason. Guardian checks it.

What else we found

The story has the headline results. These are the things we learned along the way.

01 67events

Attacks come in bursts.

The 75 holes in our test came from 67 separate events, often one vendor's holes on the same day. So our error ranges count each event once, not each hole.

outputs/discovery_events.csv
02 Halfthe catches, without vendor history

Attackers go back to the same vendors.

Hiding whole vendors from training cut the 2025 test's catches from 19 to 10. It's a strong clue, and a limit: a brand-new vendor gets less help.

outputs/rank_vendor_cv.csv
03 6.37×EPSS jump

A popular warning score changed scale.

EPSS scores jumped 6.37 times from the July 2026 snapshot on. Fortres only compares holes scored in the same month, so the jump can't fool it.

outputs/discovery_epss_jump.csv
04 249links dated after the fact

Some outside data knows the answer.

In Metasploit, 249 of 490 links to a hole were added more than 30 days after the attack code. Trusting those dates would be peeking at the answer, so we didn't.

outputs/newdata_provenance.md
05 1idea kept, out of 18

Simpler beat clever.

We wrote the rules before seeing any results, then tried 18 ideas. We kept one: the more constrained model.

outputs/rank_summary.csv · outputs/zoo_summary.md

Questions judges ask

Is fortres an LLM?
No. The ranking is 20 models that vote, each built from 150 small decision trees. IBM Granite reads the descriptions to give the ranking one clue, and writes the plain reason for each pick, which Granite Guardian checks against the facts.
Why not use an LLM to rank?
A ranking model can be tested against known outcomes, and it gives the same answer every time. A language model can make things up, so we only let it explain.
72,670

holes ranked. Look up any of them.

Paste a CVE ID, or a whole advisory with one in it. fortres shows where that hole sits in its 2026 ranking, and why, if it made the top 500.

Try one:
500

holes to fix first in 2026.

Every pick Fortres made, in order. Each bar below is one pick. Hover to see it, click to jump to it, or search the table.

Hover a barreason passed Granite Guardian plain template · taller = higher EPSS

500 picked from 72,670136 would let an attacker take over the machine318 reasons passed Granite Guardian~85 of 2026's holes expected on CISA's list

rankCVEwhat it lets an attacker doflawreported byEPSS in monthattack codereason