How to Set Up CISA KEV Alerts Without a SIEM (Free, Under 30 Minutes)

Retool's new app builder is where AI-generated code ships safely
Building apps with AI is easy. Getting them to production safely is another story.
The CISA Known Exploited Vulnerabilities catalog is the most operationally relevant public vulnerability feed available. It lists only CVEs with confirmed active exploitation. Every entry is an attacker-confirmed weapon.
Most organizations either check it manually (inconsistently) or rely on an enterprise scanner that surfaces KEV data days after the fact. Neither approach works when CISA deadlines expire within 21 days of addition.
CISA publishes the full catalog as a free JSON feed. You can build an automated alert system that notifies you within hours of a new entry using a Python cron job, a GitHub Actions workflow, or a no-code tool. None of these options require a SIEM, a security vendor contract, or anything beyond a free tier account.
The CISA KEV JSON Feed: Structure and Access
CISA publishes the full KEV catalog at a stable public URL. The feed returns a JSON object with a top-level vulnerabilities array. Each entry includes:
{
"cveID": "CVE-2026-0257",
"vendorProject": "Palo Alto Networks",
"product": "PAN-OS",
"vulnerabilityName": "Palo Alto Networks PAN-OS Authentication Bypass Vulnerability",
"dateAdded": "2026-05-11",
"shortDescription": "Palo Alto Networks PAN-OS contains an authentication bypass...",
"requiredAction": "Apply mitigations per vendor instructions...",
"dueDate": "2026-06-01",
"knownRansomwareCampaignUse": "Unknown",
"notes": ""
}
The feed URL is:
https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
CISA also provides a CSV version at the same base path with a .csv extension. The JSON feed is easier to parse programmatically. The baseline detection approach is simple: download the feed, extract all CVE IDs, compare against yesterday's known set, and alert on the difference.
Option A: Python Script with Daily Cron Job
This option works on any Linux or macOS server and requires only Python 3 and an SMTP server or webhook URL for notifications.
Step 1: Create the monitoring script
Save this as kev_monitor.py:
import json
import urllib.request
import os
from datetime import date
KEV_URL = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
STATE_FILE = os.path.expanduser("~/.kev_seen.json")
def fetch_kev():
with urllib.request.urlopen(KEV_URL) as r:
return json.loads(r.read())
def load_seen():
if os.path.exists(STATE_FILE):
with open(STATE_FILE) as f:
return set(json.load(f))
return set()
def save_seen(ids):
with open(STATE_FILE, "w") as f:
json.dump(list(ids), f)
def format_alert(entry):
return (
f"NEW KEV ENTRY: {entry['cveID']}\n"
f" Product: {entry['vendorProject']} {entry['product']}\n"
f" Due Date: {entry['dueDate']}\n"
f" Action: {entry['requiredAction'][:120]}"
)
data = fetch_kev()
current_ids = {e["cveID"] for e in data["vulnerabilities"]}
seen_ids = load_seen()
new_entries = [
e for e in data["vulnerabilities"] if e["cveID"] not in seen_ids
]
if new_entries:
for entry in new_entries:
print(format_alert(entry))
# Add your notification here: email, Slack webhook, PagerDuty, etc.
save_seen(current_ids)
Step 2: Schedule with cron
Run crontab -e and add:
0 8 * * * /usr/bin/python3 /path/to/kev_monitor.py >> /var/log/kev_monitor.log 2>&1
This runs every morning at 8 AM. The script stores the previously seen CVE IDs in ~/.kev_seen.json. On first run, it will report all 1,600+ current entries as new. After that, only genuine additions trigger output.
Briefings like this, every morning before 9am.
Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.
Option B: GitHub Actions Workflow (Zero Infrastructure)
This option requires no server. GitHub Actions runs the check on a schedule using free tier compute, commits the updated KEV state to your repository, and can trigger a webhook notification on any new entries.
Step 1: Create a private repository named kev-monitor (or add to an existing private repo).
Step 2: Create .github/workflows/kev-monitor.yml:
name: CISA KEV Monitor
on:
schedule:
- cron: '0 8 * * *' # Daily at 8 AM UTC
workflow_dispatch:
jobs:
check-kev:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Fetch KEV catalog
run: |
curl -s https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json \
| jq -r '.vulnerabilities[].cveID' | sort > kev_current.txt
- name: Compare to previous
run: |
if [ -f kev_previous.txt ]; then
NEW=$(comm -23 kev_current.txt kev_previous.txt)
echo "NEW_ENTRIES<<EOF" >> $GITHUB_ENV
echo "$NEW" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
else
echo "NEW_ENTRIES=FIRST_RUN" >> $GITHUB_ENV
fi
cp kev_current.txt kev_previous.txt
- name: Notify on new entries
if: env.NEW_ENTRIES != '' && env.NEW_ENTRIES != 'FIRST_RUN'
run: |
curl -s -X POST ${{ secrets.SLACK_WEBHOOK_URL }} \
-H 'Content-type: application/json' \
--data "{\"text\": \"New CISA KEV entries detected:\\n${{ env.NEW_ENTRIES }}\"}"
- name: Commit updated state
run: |
git config user.name "kev-monitor"
git config user.email "bot@example.com"
git add kev_previous.txt
git diff --staged --quiet || git commit -m "KEV state update $(date -u +%Y-%m-%d)"
git push
Step 3: Add your Slack webhook (or other notification endpoint) as a GitHub Actions secret named SLACK_WEBHOOK_URL.
This workflow commits a sorted CVE ID list daily and diffs it against the previous run. New entries trigger the notification step. The entire setup takes about 10 minutes.
Option C: Slack Webhook Notification with Rich Formatting
If you want enriched Slack alerts that include the product name, due date, and required action text (not just the CVE ID), extend the Python script from Option A with a direct Slack webhook call.
Replace the comment in the script with:
import urllib.request
import json
def send_slack_alert(entries, webhook_url):
lines = []
for e in entries:
lines.append(
f"*{e['cveID']}* -- {e['vendorProject']} {e['product']}\n"
f"> Due: {e['dueDate']} | {e['requiredAction'][:100]}"
)
payload = {
"text": f":rotating_light: *{len(entries)} new CISA KEV entr{'y' if len(entries)==1 else 'ies'}*",
"blocks": [
{"type": "section", "text": {"type": "mrkdwn", "text": "\n\n".join(lines)}}
]
}
req = urllib.request.Request(
webhook_url,
data=json.dumps(payload).encode(),
headers={"Content-Type": "application/json"}
)
urllib.request.urlopen(req)
To get a Slack webhook URL: go to api.slack.com/apps, create a new app, enable Incoming Webhooks, add a webhook to your chosen channel, and copy the URL. Store it as an environment variable rather than hardcoding it in the script.
Option D: No-Code Alert via Zapier or Make
If you want zero code, Zapier and Make both support polling a JSON URL and triggering an action when new items appear.
Zapier setup (free tier):
- Create a new Zap with trigger: "Webhooks by Zapier" or "Schedule" (daily)
- Add an action step: "Code by Zapier" (JavaScript) that fetches the KEV JSON and compares against a stored list in Zapier Storage
- Add a filter step that only continues when new entries exist
- Add an action step: send to email, Slack, or SMS
Make (formerly Integromat) setup:
- Create a scenario triggered on a schedule (daily)
- Use the HTTP module to GET the KEV JSON feed
- Use the JSON module to parse the response
- Use the Data Store module to track previously seen CVE IDs
- Use a Router to filter for new entries only
- Connect to your notification channel
The no-code approach is slower to set up correctly (data store comparison logic requires some effort) but requires no infrastructure. Use it if you are not comfortable running Python scripts or GitHub Actions.
The bottom line
You do not need a SIEM, a vendor contract, or any budget to monitor the CISA KEV catalog. The JSON feed is public and stable. A 30-line Python cron job or a GitHub Actions workflow gives you same-day alerts on every new KEV entry. Pick Option B (GitHub Actions) if you want zero infrastructure and have an existing GitHub account. Pick Option A if you have a Linux server and want richer notification formatting. Either way, set this up today: CISA adds new entries faster than most manual review cycles can catch them, and the deadline clock starts ticking the moment they do.
Frequently asked questions
How often does CISA update the KEV catalog?
CISA adds new entries on an irregular basis, typically several times per week. During periods of active exploitation discovery, multiple entries can be added within a single day. The feed does not have a fixed update schedule, which is why polling daily (rather than weekly) is recommended. CISA does not publish a changelog or announcement feed for individual additions, so automated diff monitoring is the most reliable way to catch new entries.
Does CISA ever remove entries from the KEV catalog?
Rarely. CISA occasionally removes entries when CVE records are disputed, merged, or determined to have been incorrectly added. The monitoring scripts above detect removals as well as additions because they diff the full ID list. Treat a removal notification as informational rather than urgent: it means CISA updated their assessment, not that the vulnerability is no longer exploited.
Can I filter KEV alerts by vendor or product?
Yes. The JSON feed includes vendorProject and product fields for every entry. In the Python script, add a filter before the format_alert call: only alert if entry['vendorProject'] is in your approved vendor list. This lets a team running primarily Palo Alto, Microsoft, and Cisco products ignore KEV entries for products they do not run. Start unfiltered to avoid missing relevant entries, then add product filters once you know your environment coverage.
Is there an official CISA RSS or email subscription for KEV updates?
CISA does not publish an RSS feed or email subscription specifically for KEV catalog additions. They send general alerts through US-CERT, but those cover all advisories and are not scoped to KEV additions only. The JSON feed approach in this guide is the most direct and reliable method for KEV-specific monitoring.
Can I use the CISA KEV JSON feed to automatically create tickets in my vulnerability management system?
Yes. The CISA KEV JSON feed (cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json) provides a machine-readable catalog with CVE ID, vendor, product, vulnerability name, short description, required action, and due date fields. Integrate it with your vulnerability management workflow: a Python script that fetches the JSON, compares it against your asset inventory's CVE exposure list, and creates tickets in Jira, ServiceNow, or your VM platform for each matching KEV entry. Schedule the script daily. The cveID field can be cross-referenced with your scanner's CVE outputs directly. Most enterprise VM platforms (Tenable, Qualys, Rapid7) now have built-in KEV prioritization that surfaces KEV-listed CVEs automatically without custom scripting.
How do you validate that your KEV monitoring script is actually catching every new entry and not silently missing additions?
Validate your KEV monitoring pipeline with three checks run monthly. First, compare your stored historical CVE ID list against the current feed and confirm the count of unique IDs only ever increases -- a decrease indicates a data loss or state file corruption in your monitoring script. Second, pick three CVEs added to the KEV catalog in the past 30 days from the CISA website's date-sorted view and verify each one appears in your alert history with a timestamp within 24 hours of the CISA addition date. Third, intentionally corrupt your state file by deleting it and re-running the script -- confirm it does not send a flood of 1,600 false alerts, which would indicate your first-run handling is broken. For GitHub Actions-based monitoring, check the Actions run history to confirm the workflow has not silently stopped running due to a repository inactivity timeout -- GitHub disables scheduled workflows after 60 days of no repository activity. Push a trivial commit to the monitoring repository monthly to reset the inactivity timer.
Sources & references
Free resources
Critical CVE Reference Card 2025–2026
25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.
Ransomware Incident Response Playbook
Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.
Get threat intel before your inbox does.
50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, daily, no spam.
Unsubscribe anytime. We never sell your data.

Founder & Cybersecurity Evangelist, Decryption Digest
Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.
Win a $2,495 Black Hat pass.
Full-access to Black Hat USA 2026 in Las Vegas. Subscribe free to enter.
