Skip to main content
Integration

MISP and TAXII 2.1: STIX import script and blocklist feed

MISP pushes events to TAXII 2.1 servers and can browse their collections, but it does not import from one into events. Bring isMalicious STIX 2.1 objects in with a short taxii2-client + PyMISP script, add the daily blocklists as a native MISP feed, and enrich single attributes with the expansion module.

No credit card required · Free API key

Capabilities

Key features at a glance.

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 to evaluate first.

  1. Scheduled feed

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

  2. Analyst hover

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

  3. Sharing communities

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

MISP and TAXII 2.1, in one answer

MISP 2.4.166 added push support: administrators can configure MISP to push content to TAXII 2.1 servers (MISP 2.4.166 release notes, 30 November 2022). The release describes no import, and MISP does not turn a TAXII collection into events on its own; current versions can browse a configured server’s collections, not ingest them. So the isMalicious collections at https://api.ismalicious.com/taxii2/ come into MISP through a client: the script below polls them and creates the event.

Setup

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.

FAQ

Frequently asked questions.

Can MISP pull a TAXII 2.1 feed?

Not natively. MISP 2.4.166 (release notes of 30 November 2022, misp-project.org) lets administrators push content to TAXII 2.1 servers; current MISP can also browse a configured server’s collections and objects, but it does not import them into events. To bring isMalicious STIX objects into MISP, poll https://api.ismalicious.com/taxii2/ with taxii2-client and create the event with PyMISP, as the script on this page does. For bare values, a blocklist added as a Simple CSV feed needs no script.

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

No. MISP pushes to TAXII 2.1 servers and can browse them (Sync Actions → Servers is MISP-to-MISP sync), but it does not import 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 does not import from it — use it from taxii2-client or any other TAXII 2.1 consumer.

How often is the MISP feed refreshed?

Nightly, for the blocklists and the TAXII collections. Schedule the MISP feed fetch (or the TAXII script) once a day, after the refresh.

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 the full list; the TAXII collections need Pro or Enterprise. TAXII pages follow a next token: a Pro page holds up to 1,001 objects, an Enterprise page has no object cap.

Where is the expansion module?

In misp-modules itself: MISP/misp-modules#798 was merged on 21 August 2026, and the module ships with misp-modules from v3.0.10 (8 September 2026). Enable it under Administration → Server Settings & Maintenance → Plugin → Enrichment. On an older misp-modules, 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.

Test it with your own indicators.

The free plan includes website lookups with no monthly cap and 250 API requests a month. Check the sources and limits, then connect the API.

No credit card required · Free API key