Skip to main content
Integration

MISP Scheduled feed and live enrichment

Add the daily isMalicious blocklists as a MISP feed, pull STIX 2.1 objects from the TAXII collections with a short script, then enrich individual attributes with the expansion module.

No credit card required · Free API key

Capabilities

Key features. Everything you need to protect your infrastructure and users.

Native MISP feed

Sync Actions → Feeds → Add Feed with a blocklist URL and your X-API-KEY header. MISP fetches it on its own schedule.

Expansion + hover

Live /check lookups for IPs, domains, hostnames, and URLs without leaving the event.

Score and categories

Malicious flag, 0–100 risk score, threat categories, and detection source count.

Same credential

X-API-KEY, or Basic Auth with apiKey:apiSecret (legacy: password = the Base64 credential).

Applications

Use cases. How security teams use this tool.

Scheduled feed

Fetch the malicious-domains and malicious-ips lists into a feed event daily, then correlate with your own attributes.

Analyst hover

Hover an IP on an event to see the isMalicious score before expanding.

Sharing communities

Keep org-reported collections separate from the global malicious-* feeds.

isMalicious as a MISP threat feed

MISP's TAXII 2.1 support is push-only: the Servers screen syncs MISP to MISP and, from 2.4.169, pushes events to a TAXII server, but it never pulls from one. The path that works is a native feed: under Sync Actions → Feeds, add a Simple CSV feed pointing at a blocklist such as https://api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt with your X-API-KEY header, and MISP fetches it on its own schedule, no plugin needed. Teams that want STIX objects rather than bare values pull the TAXII 2.1 collections at https://api.ismalicious.com/taxii2/ with taxii2-client and create events with PyMISP — the fifteen-line script on this page. Blocklists and collections are refreshed nightly, so a daily fetch picks up each day's new indicators in one pass. Neither blocklist downloads nor TAXII polls count against the monthly API quota; full blocklists need a paid plan, TAXII collections need Pro or Enterprise, and TAXII pagination is by size with a next token — up to 1,001 pages per collection on Pro, no page cap on Enterprise.

Filtering the feed by score

Every indicator in the feed carries a 0–100 risk score, threat categories, and a detection source count — the same fields the expansion module returns when an analyst hovers an attribute. Filter on score inside MISP before wiring a collection into a blocklist, so low-confidence sightings never block production traffic and analysts and automation act on one number.

Blocklist feed in MISP

  1. Sync Actions → Feeds → Add Feed. Source format Simple CSV, value field 1 — comment lines starting with # are skipped, whereas Freetext would import the URL in the header.
  2. URL: https://api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt. Swap domains for ips, and critical for high, medium, low, all or a category such as phishing, c2 or ransomware.
  3. Headers: X-API-KEY: base64(apiKey:apiSecret), one header per line. A Free key returns a 10% sample, paid plans the full list.
  4. Tick Enabled and Caching enabled, pick a distribution, run Fetch and store all feed data once, then let the daily fetch_feeds scheduled task keep it current.

STIX objects via TAXII 2.1

MISP only pushes to TAXII 2.1 servers. To bring STIX objects in, pull the collection with taxii2-client and create the event with PyMISP (pip install taxii2-client pymisp):

from pymisp import MISPEvent, PyMISP
from taxii2client.v21 import Server

# API key and secret: https://ismalicious.com/app/account
server = Server("https://api.ismalicious.com/taxii2/", user=API_KEY, password=API_SECRET)
collection = next(c for c in server.api_roots[0].collections if c.id == "malicious-domains")
bundle = collection.get_objects(limit=1000)  # add added_after="2026-09-20T00:00:00Z" on later runs

misp = PyMISP("https://misp.example.org", MISP_KEY)
event = MISPEvent()
event.info = "isMalicious malicious-domains"
for obj in bundle.get("objects", []):
    if obj["type"] == "indicator":
        # pattern is [domain-name:value = 'evil.example'] (ipv4-addr:value for malicious-ips)
        event.add_attribute("domain", obj["pattern"].split("'")[1], comment=obj.get("name", ""))
misp.add_event(event)

Run it daily after the nightly refresh, passing added_after with the previous run's timestamp so each pass fetches only new indicators. Collections: malicious-domains, malicious-ips, malicious-urls, c2-indicators, phishing-indicators, ransomware-iocs.

Support

Frequently asked questions.

Do I need a custom MISP plugin to ingest the feed?

No. MISP only pushes to TAXII 2.1 servers (Sync Actions → Servers is MISP-to-MISP sync); it never pulls from one. Add isMalicious under Sync Actions → Feeds as a Simple CSV feed pointing at a blocklist URL. For STIX objects, a short taxii2-client + PyMISP script does the pull. The expansion module is for live attribute lookups, not bulk ingest.

What is the discovery URL?

https://api.ismalicious.com/taxii2/ with Basic Auth: username = API key, password = API secret (username api with the Base64 credential as password still works). MISP itself cannot pull from it — use it from taxii2-client or any other TAXII 2.1 consumer.

How often is the MISP feed refreshed?

The isMalicious blocklists and TAXII collections are refreshed nightly. Schedule the feed fetch (or the TAXII script) daily, after the refresh, so each run picks up the day's new malicious IPs and domains in a single pass.

Do feed fetches count against my API quota?

No. Blocklist downloads and TAXII polls sit outside the monthly API quota. A Free key gets a 10% sample of each blocklist, paid plans get the full list; the TAXII collections need Pro or Enterprise. TAXII pagination is by size with a next token — Pro can page through up to 1,001 pages per collection, Enterprise has no page cap.

Where is the expansion module?

The module is proposed upstream in MISP/misp-modules#798. Until that merges, drop ismalicious.py into misp_modules/modules/expansion/ (auto-discovered).

Which attributes does the module enrich?

ip-src, ip-dst, hostname, domain, url, and domain|ip. Hover and expansion both return malicious flag, risk score, categories, and source count.
Get Started

Ready to get started?

Join thousands of security teams using isMalicious to protect their infrastructure.

No credit card required · Free API key