Artificial Intelligence (AI) has brought transformative advantages to the cyber realm. Faster detection and response, reduced false positives and alert fatigue, proactive vulnerability management, operational efficiency and cost savings, adaptability to evolving threats- just to name a few. But it has also led to serious headaches, like the zero-day bug discovery crisis, which isn’t slowing down and seems to be getting out of control. There have been more zero-day vulnerabilities coming out lately, and the exploit time for those vulnerabilities has shrunk significantly. This is a big issue for us Defenders. Especially for small security teams that can’t afford to add more staff.
To keep my team and me updated on the latest zero-day vulnerabilities, I want an automated way to alert us when a zero-day is known. I want something I don’t have to pay for. So, I came up with my zero-dollar zero-day vulnerabilities tracker. The first challenge was finding a free source that lists known zero-day vulnerabilities. There are some paid services, but again, this is a poor man’s setup. Also, Google Project Zero Day does not track all vulnerabilities, just some major players like Microsoft, Apple, Adobe, Qualcomm, Google. This is not the perfect source for zero-days, but they have the commonly used ones.
What You Need:
- URL to the Google Project Zero’s 0day “In the Wild” spreadsheet, 2026 worksheet: https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view?gid=1331951416#gid=1331951416
- Claude (Scheduled Tasks)
- CVE-MCP-Server: https://github.com/mukul975/cve-mcp-server
- Slack or whatever alerting mechanism you choose
Set up:
Download the 0day “In the Wild” Google Sheet. Download and store this file locally on your machine. Even if you have a Google Account and add this as a shortcut to Google Drive, it won’t work.
Since the spreadsheet is now a local file, we need a way to update it periodically. Here’s a bash script I used to update the contents of the file; name it however you want and save it as a .sh file:
#!/usr/bin/env bashset -euo pipefailOUT_DIR="/Users/xxxxx/Desktop/"TARGET_FILE="${OUT_DIR}/0day_In_The_Wild.csv"EXPORT_URL="https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/export?format=csv&gid=1331951416"mkdir -p "${OUT_DIR}"curl -sL "${EXPORT_URL}" -o "${TARGET_FILE}"echo "Synced $(wc -l < "${TARGET_FILE}") lines to ${TARGET_FILE}"
I named the bash script as update_0day_data.sh. Set up a cron job to run the bash script on schedule, so you don’t have to manually run the script. Here’s how I setup mine scheduled to run Monday-Friday at 3:45 PM:
45 15 * * 1-5 /bin/bash -c "Users/xxxxx/Desktop/update_0day_data.sh > /dev/null 2>&1"
Set up a scheduled task on Claude, and use the below skill.md:
Runs once per day. Checks whether any tracked zero-day was patched today, and if so posts a notification to Slack.Tracker data/Users/xxxxx/Desktop/0day_In_The_Wild.csvSlack destination#your_slack_channel_for_alerting (private channel, ID XXXXXXXXXXX)CSV columns: CVE, Vendor, Product, Type, Description, Date Discovered, Date Patched, Advisory, Analysis URL, Root Cause Analysis, Reported By.Steps1. Find today's rowsRead the CSV and compare each Date Patched value (format YYYY-MM-DD) against today's date.No match → stop. Do not post to Slack. Report: date checked, row count scanned, and the most recent Date Patched in the file. This is the normal outcome most days.One or more matches → continue. Handle every matching row; post one message per row.2. Pull the row dataTake CVE, Vendor, Product, Type, Description, Reported By, and Advisory from the matching row.3. Fill the gaps the CSV doesn't coverThe template asks for CVSS score, affected/patched versions, exploitability, and remediation guidance. None of these are in the CSV. Get them from the vendor advisory URL in the Advisory column, and from the CISA KEV catalog if the CVE is listed there.Handle missing or placeholder data explicitly:CVE blank → look it up in the vendor advisory. If still not found, use Not yet assigned and say so in the message.??? in any field → treat as unknown. Never present ??? in the Slack message.CVSS not published → write Not yet scored rather than estimating one.Severity wording (HIGH, CRITICAL) → take from the vendor or CISA, not from your own judgment.Never carry values over from a previous run's message or from pre-filled example text in the template. The template's example content is formatting reference only — do not reuse its CVE, versions, or dates.4. Post to SlackUse the template:Subject line — Zero-Day Notification — [CVE] — [Vendor] [Product] [Type] (Exploited in the Wild)Bottom Line Up Front — one or two sentences: severity, affected product, sourceVulnerability Details — CVE ID, CVSS score, then the technical descriptionAffected Versions — table: Software / Component | Affected versions | Patched versionExploitability — Attack Vector, Authentication Required, Attack Complexity, Known Exploits in the WildSolution — patch versions, restart requirements, downstream products, any CISA KEV deadlineReferences — Vendor, Product, Type, Reported by, Advisory link, Date PatchedFormatting rules:Use standard Markdown — *bold**, ## headers, [text](url), and pipe-delimited tables. The Slack tool converts this; do not hand-write Slack mrkdwn (bold*, <url|text>).Slack has no underline. Where the template underlines a field label, render it bold instead.Add one relevant emoji to each section header — for example 🚨 Bottom Line Up Front, 🔍 Vulnerability Details, 📦 Affected Versions, 💥 Exploitability, 🛠️ Solution, 🔗 References. One per header, none inside body text.Bold every field label (*CVE ID:**, *Attack Vector:**).Link the advisory rather than pasting the raw URL.5. Verify and reportAfter posting, confirm:Every field in the message traces to the CSV row, the vendor advisory, or CISA — nothing invented, nothing left as ??? or a template placeholderThe CVE in the message matches the CVE in the matched rowDates in the message match Date PatchedThen report: the date checked, the CVE(s) posted, the Slack message link, and any field where data was unavailable or assumed.GuardrailsPost to Slack only when a Date Patched value equals today's date. Do not post near-misses or the most recent entry as a substitute.One message per matching row. Do not re-post a CVE already sent.If the CSV is missing, unreadable, or empty, report that and post nothing
Using the skill.md above will check the file 0day_In_The_Wild.csv daily for a new zero-day entry, and if a new entry is found, it sends a Slack message like the one below: 
Hope you’ll find this helpful and have fun playing whack-a-mo..zero-day!
If you have not subscribed to my blog, please do so. Mahalo!!!!
