OIXLY open threat intelligence

About OIXLY

OIXLY aggregates seven public threat intelligence feeds into one searchable, filterable view. It is free, requires no account, and the underlying data files are open for anyone to download.

What this is for

The individual feeds are all public, but each ships a different format — a bare text file of IPs here, a CSV there, a JSON API somewhere else. Checking an indicator against all of them means writing a parser for each. OIXLY does that once, normalises the result into a single schema, and publishes it as static files.

It is a lookup and triage surface, not a detection product. Treat every entry as a lead to verify, not a verdict.

Sources

Core feeds

FeedContributesCategoriesSeverity
CISA KEVVulnerabilities confirmed exploited in the wildCVE, CISA KEV, ExploitedCritical
NVDPublished CVEs from the last 90 daysCVE, NVD CVEFrom the CVSS score
OpenPhishConfirmed credential-harvesting URLsPhishingHigh
Threatview.ioMalware file hashes (MD5)MalwareHigh
SANS ISCNetwork blocks recorded as heavy attack sourcesScanningHigh
Blocklist.deIPs reported for brute force, spam and DDoSBrute forceMedium
Tor Exit NodesCurrent Tor exit relaysTor exitLow

Supplementary feeds

FeedContributesCategoriesSeverity
Spamhaus DROPHijacked and criminally controlled netblocksBotnet C2High
CINS ArmyIPs with poor reputation across the Sentinel networkScanningMedium
Binary DefenseArtillery ban listScanningMedium
Emerging ThreatsCompromised hosts generating attack trafficBrute forceMedium
Feodo TrackerBotnet command-and-control serversBotnet C2, MalwareCritical
URLhausMalware distribution URLsMalware (+ Phishing)High
ThreatFoxIndicators tied to named malware familiesMalware, Botnet C2High

The last three require a free abuse.ch API key. If the operator of this instance has not configured one, those feeds contribute nothing and the pipeline reports them as skipped rather than pretending they ran.

A record can be in several categories

Categories are not exclusive. A CVE on CISA's KEV list that was exploited before disclosure and is used by a ransomware crew appears under CVE, CISA KEV, Exploited, Zero-day and Ransomware — filtering by any one of them finds it.

This means category counts add up to more than the number of records, on purpose. The headline count is always one per record.

NVD CVE is the vulnerability roll-up: every CVE carries it, whichever feed surfaced it. CISA KEV is the exploited subset — a KEV entry is an NVD-published CVE, so it carries both NVD CVE and CISA KEV. Filtering NVD CVE shows every vulnerability; filtering CISA KEV narrows to the ones confirmed exploited in the wild. There is no separate generic CVE category — it was redundant once every CVE carries NVD CVE.

How zero-day is determined

CISA does not publish a zero-day flag. What it publishes is the date a CVE was added to the KEV catalog, and NVD publishes the date the CVE became public. When a CVE reaches KEV at or within seven days of publication, it was already being exploited when it became public, and OIXLY marks it as a zero-day.

This is an inference, not a vendor statement. It errs toward under-reporting: a missing date on either side means no flag rather than a guess. Treat it as a strong hint to prioritise, not as an authoritative classification.

Duplicates

Records are deduplicated twice. First by identifier, so the same entry from the same feed never appears more than once. Then by indicator, so an IP reported by three different feeds becomes one record rather than three.

Merging keeps the most severe assessment and the union of the categories, and names the other feeds in an Also Reported By field. Corroboration is worth seeing — three independent feeds agreeing is a stronger signal than one — so it is surfaced rather than discarded.

CVEs are exempt from indicator merging. An NVD entry and a KEV entry for the same CVE are merged earlier, by CVE identifier, because they are two statements about one vulnerability rather than two sightings of one host.

Every entry links back to its origin. Where a feed does not assign a severity, OIXLY assigns one per the table above — that is an editorial judgement about the feed as a whole, not an assessment of the individual indicator.

How severity is meant to be read

Processing

The pipeline runs every six hours and does the following, in order:

  1. Fetch each feed. A feed that fails or returns an empty body is skipped, never treated as empty.
  2. Parse each into the common schema: id, title, category, severity, source, indicators, timestamp.
  3. Merge against everything already published, keyed by id. Existing records are preserved.
  4. Merge duplicate reports of the same CVE from different sources into one entry.
  5. Merge records that describe the same indicator, keeping the strongest assessment.
  6. Drop anything older than the 90-day retention window.
  7. Write the day-bucketed static files this site reads.

Retention

OIXLY keeps a rolling 90 days. Older records are removed, not archived. The window is applied in one place, at build time, so what you see and what you download always agree.

What this does not cover

Being explicit about the gaps matters more than the feature list:

Accuracy and false positives

Public feeds contain false positives. Compromised sites get cleaned, IPs get reassigned, and shared hosting means one bad URL can implicate a domain serving thousands of legitimate sites. Verify before you block anything with a blast radius, and prefer the narrowest indicator that solves your problem.

To report a mistake, open an issue against the repository. Corrections belong upstream — if a feed is wrong, reporting it to the feed fixes it for everyone rather than only here.

Licensing

The aggregation, code and site are open. The underlying data belongs to the feed operators and carries their terms — check each source before redistributing commercially. Attribution to the original feed is included on every record for exactly this reason.