v3nomtech/V3nom-Intel

GitHub: v3nomtech/V3nom-Intel

Stars: 0 | Forks: 0

# VENOM/INTEL **Signature:** `CYbErXV3nOm` ## Table of contents - [What it is](#what-it-is) - [Feature tour](#feature-tour) - [Live data sources](#live-data-sources) - [Architecture](#architecture) - [How it works — request flow](#how-it-works--request-flow) - [File map (what every file does)](#file-map-what-every-file-does) - [Local preview](#local-preview) - [Refreshing local snapshots](#refreshing-local-snapshots) - [Deploy to Netlify](#deploy-to-netlify) - [How CORS is handled](#how-cors-is-handled) - [Caching strategy](#caching-strategy) - [Customization](#customization) - [Privacy & legal](#privacy--legal) - [Tech stack](#tech-stack) ## What it is - the latest CVEs with EPSS exploit-probability scores - the CISA Known Exploited Vulnerabilities (KEV) catalog - a derived **Active Exploitation Tracker** that ranks "patch this first" using KEV ∩ EPSS ∩ ransomware usage - an animated **Global Threat Map** plotting live C2 servers on a Leaflet map - recent malware IOCs, malicious URLs, active botnet C2 IPs - recent public data breaches - aggregated infosec news + exploit publication feeds - an **IOC reputation lookup** (paste an IP, domain, URL, hash, or CVE-ID) - a curated OSINT directory (researchers and orgs worth following) - live charts: severity distribution, KEV-over-time, top vendors, malware families, C2 by country, EPSS top 15 Everything updates automatically every 15 minutes (also on-demand via the per-section Refresh button or the top-bar **Refresh all**). ## Feature tour | Section | What it shows | How it's built | |---|---|---| | **Hero / stats strip** | 8 live counters: CVEs (7d), KEV total, Critical (7d), KEV (30d), C2 countries, active IOCs, active C2, news (24h) | `updateStats()` + `countUp()` ease-out animation | | **🎯 Active Exploitation Tracker** | Ranks every KEV CVE by a priority score: ransomware = +100, overdue = +60, freshness ≤ 30d = +40, EPSS ≥ 0.5 = +30. Chips filter by ransomware / overdue / fresh / high-EPSS | `buildExploitList()` joins KEV + EPSS, sorts by score | | **🌐 Global Threat Map** | Leaflet dark-tile map (CARTO). Plots Feodo Tracker C2 IPs by country centroid. Pulsing markers (low/mid/high tiers), live attack feed (animated curved arcs), popup with top malware per country | `renderThreatMap()` + `COUNTRY_CENTROIDS` lookup table + `curvedPath()` bezier helper | | **Quick tools — IOC lookup** | Paste IPv4/v6, domain, URL, MD5/SHA1/SHA256, or CVE-ID. Auto-detects type, cross-references the in-memory threat feeds, calls CIRCL for CVEs, calls URLhaus host API for domains/IPs | `IOC.detect()` + `IOC.lookup()` | | **Threat metrics charts** | CVE severity doughnut, KEV-by-month bars (12mo), top vendors, top malware families (ThreatFox), C2 by country | Chart.js 4 | | **CISA KEV** | Sortable table of all KEV vulnerabilities; filter box | `fetchKEV()` → local snapshot → live → proxy chain | | **Latest CVEs (NVD)** | Card grid of last 7 days of NVD CVEs with EPSS badges and product chips. Filter by severity and product/vendor | `fetchCVEs()` + `enrichEPSS()` | | **ThreatFox IOCs** | Recent malware IOCs from abuse.ch | `fetchThreatFox()` | | **URLhaus URLs** | Recent malicious URLs (phishing, payload delivery, C2 panels) with cross-check links to VirusTotal & MalwareBazaar | `fetchURLhaus()` | | **Feodo Tracker C2** | Table of active botnet C2 IPs (IP:port, malware family, country, ASN, first-seen, status) | `fetchFeodo()` | | **Recent data breaches** | XposedOrNot breach feed: name, records, industry, date | `fetchBreaches()` | | **Infosec news wire** | Aggregated RSS from Krebs, Bleeping, The Hacker News, SANS ISC, Dark Reading, The Register, Schneier | `fetchRssSet()` + `parseRss()` | | **Exploit feeds** | Exploit-DB, PacketStorm, GitHub Security Advisories | Same RSS pipeline | | **OSINT directory** | Curated cards for CISA, CERT-In, vx-underground, MalwareHunterTeam, Krebs, Beaumont, MSTIC, Google TAG, etc., with X / blog / Nitter links | `renderOsint()` over `CONFIG.OSINT_ACCOUNTS` | | **Top-bar global search** | Searches across CVE, KEV, news, and exploits in one box | `globalSearch()` | | **JSON export** | ⬇ JSON button dumps the entire in-memory `STATE` snapshot to a download | `exportAll()` | | **Star / favorite** | ★ on a CVE card persists to `localStorage` | `getStars()` / `toggleStar()` | | **Status pills + diagnostics panel** | Every section has a pill (loading / ok / cached / error). Click **Show diagnostics** for a per-feed timeline | `setStatus()` + `renderDiagnostic()` | ## Live data sources All sources are public, no API keys required. | Source | What it provides | Endpoint | |---|---|---| | **NIST NVD** | Latest CVEs (7-day window) | `services.nvd.nist.gov/rest/json/cves/2.0` | | **CISA KEV** | Known Exploited Vulnerabilities catalog | `cisa.gov/.../known_exploited_vulnerabilities.json` | | **FIRST EPSS** | Exploit Prediction Scoring System — probability a CVE will be exploited in the next 30 days | `api.first.org/data/v1/epss` | | **CIRCL CVE-Search** | CVE detail lookup (CORS-friendly) | `cve.circl.lu/api/cve/...` | | **URLhaus (abuse.ch)** | Malicious URLs | `urlhaus.abuse.ch/downloads/json_online/` | | **ThreatFox (abuse.ch)** | Recent malware IOCs | `threatfox.abuse.ch/export/json/recent/` | | **Feodo Tracker (abuse.ch)** | Active botnet C2 IPs (Emotet, Dridex, TrickBot, QakBot, etc.) | `feodotracker.abuse.ch/downloads/ipblocklist.json` | | **XposedOrNot** | Data breach catalog | `api.xposedornot.com/v1/breaches` | | **RSS feeds** | News & exploit publications | Krebs, Bleeping, THN, SANS, Dark Reading, Register, Schneier, Exploit-DB, PacketStorm, GitHub Advisories | ## Architecture ┌─────────────────────────────────────────────────────────────────────┐ │ BROWSER (index.html) │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ js/app.js (IIFE — single ~1670-line module) │ │ │ │ │ │ │ │ CONFIG ─── URLs, RSS list, OSINT accounts, TTLs │ │ │ │ STATE ─── { cves, kev, news, exploits, urlhaus, │ │ │ │ threatfox, feodo, breach, exploitItems } │ │ │ │ │ │ │ │ fetch layer: timedFetch → proxyFetch → cache │ │ │ │ render layer: renderXxx() + Chart.js + Leaflet │ │ │ │ orchestration: refreshAll() → critical path + onIdle() │ │ │ └─────────────────────────────────────────────────────────────┘ │ └────────────┬────────────────────────────────────────────────────────┘ │ ┌─────────┼────────────────────────────────────────────┐ ▼ ▼ ▼ [CORS-OK] [Same-origin snapshots] [Proxy chain] NVD, EPSS, /data/kev.json 1. /.netlify/functions/proxy (whitelisted hosts) CIRCL /data/feodo.json 2. api.allorigins.win/raw /data/urlhaus.json 3. corsproxy.io /data/threatfox.json 4. api.codetabs.com/v1/proxy /data/breaches.json (refreshed by update-data.sh) The site is intentionally **dependency-free at runtime** except for three CDN-hosted libraries pulled with SRI hashes: - **Chart.js 4.4.1** — all charts - **Leaflet 1.9.4** — global threat map - **Google Fonts** (Inter + JetBrains Mono) — typography There is no npm install step, no bundler, no framework. `js/app.js` is one self-contained IIFE. ## How it works — request flow 1. Sets the year + a random build ID. 2. Wires the IntersectionObserver-based scroll reveal animation. 3. Starts the UTC clock. 4. Renders the OSINT cards (synchronous, from `CONFIG.OSINT_ACCOUNTS`). 5. Wires events (filters, search, refresh buttons, IOC lookup, star toggles). 6. Calls `refreshAll()`. 7. Schedules `refreshAll()` to re-run every 15 minutes. `refreshAll()` is the orchestrator: // 1. Hydrate from localStorage cache (instant first paint) ['cves','kev','news','exploits','urlhaus','threatfox','feodo','breach'] .forEach(k => { const c = cache.get(k); if (c) STATE[k] = c; }); // 2. Re-render everything we have cached // 3. Critical path (above-the-fold): KEV + Feodo + CVE in parallel const critical = Promise.all([refreshKEV(), refreshFeodo(), refreshCVE()]); // 4. Below-the-fold deferred to requestIdleCallback onIdle(() => { refreshNews(); refreshExploits(); refreshURLhaus(); refreshThreatFox(); refreshBreaches(); }); Each `fetchXxx()` follows a 3-tier fallback (`tryLocalThenRemote()`): 1. **Local snapshot** (`data/*.json`) — same-origin, no CORS issues, always works. 2. **Direct remote** — works for CORS-friendly endpoints (NVD, EPSS, CIRCL). 3. **Proxy chain** (`proxyFetch`) — tries the Netlify function first, then three public CORS proxies in sequence. Every fetch is wrapped in `timedFetch()` with a 20-second AbortController timeout, and every successful response is written to `localStorage` with a 30-minute TTL. The diagnostics panel (`Show diagnostics` button in Quick tools) shows the per-feed status pill, source ("live" / "local snapshot" / "live (proxied)" / "cached"), and time since last update. ### Active Exploitation Tracker scoring `buildExploitList()` combines the KEV catalog with EPSS scores from the CVE feed and computes a priority score for each vulnerability: score = 0 if knownRansomwareCampaignUse === "Known" → score += 100 if dueDate is past → score += 60 if dateAdded within last 30 days → score += 40 if EPSS >= 0.5 → score += 30 + round(epss * 30) score += max(0, 30 - ageDays) // freshness boost Cards are sorted descending and tagged with the chips that triggered (🦠 Ransomware, ⏰ Overdue, 🆕 fresh, 📈 EPSS%). The four summary cards at the top count items in each bucket. ### Global Threat Map Built on Leaflet with the CARTO dark-no-labels tile set. The `COUNTRY_CENTROIDS` table maps ISO-2 country codes to `[lat, lon]` centroids. For each country with active C2s: - A pulsing `divIcon` is layered for visual heartbeat (CSS animation, sized by `sqrt(count)`). - A clickable `circleMarker` shows the count, top malware families, and ASN samples in its popup. - The "Live attack feed" sidebar animates curved bezier arcs (`curvedPath()`) from a random origin to a C2 endpoint, prepending each event to the feed. ### IOC reputation lookup `IOC.detect()` is a regex switchboard that classifies the input: ^[a-f0-9]{32}$ → md5 ^[a-f0-9]{40}$ → sha1 ^[a-f0-9]{64}$ → sha256 ^\d{1,3}(\.\d{1,3}){3}$ → ipv4 ^[a-fA-F0-9:]+$ with ":" → ipv6 ^https?:// → url ^[\w.-]+\.[a-z]{2,}$ → domain ^CVE-\d{4}-\d{4,}$ → cve Then `IOC.lookup()`: - For CVEs: hits CIRCL CVE-Search directly (CORS-friendly). - For everything else: cross-references the already-loaded URLhaus / ThreatFox / Feodo arrays in memory (zero-cost local matches), then issues a live POST to the URLhaus host endpoint via the Netlify proxy. - Renders a verdict card plus quick cross-check links to AbuseIPDB, VirusTotal, Shodan, OTX, urlscan.io, MalwareBazaar, etc. ## File map (what every file does) threat-intel-site/ ├── index.html # Single-page HTML shell ├── css/ │ └── style.css # ~1500 lines of dark-mode UI (CSS vars, no framework) ├── js/ │ └── app.js # ~1670 lines — all logic, all rendering ├── data/ # Same-origin JSON snapshots (CORS bypass) │ ├── kev.json # CISA KEV catalog (~1.5 MB) │ ├── feodo.json # Feodo Tracker C2 list (~2 KB) │ ├── threatfox.json # Recent ThreatFox IOCs (~2 MB) │ ├── urlhaus.json # Recent URLhaus URLs (~70 KB) │ └── breaches.json # XposedOrNot breach catalog (~575 KB) ├── netlify/ │ └── functions/ │ └── proxy.js # Whitelisted CORS proxy (Netlify function) ├── netlify.toml # Netlify build + headers + cache rules ├── _redirects # SPA fallback (/* → /index.html 200) ├── update-data.sh # Cron-able script to refresh data/*.json └── README.md # You are here ### `index.html` The HTML shell. ~420 lines. Defines every section and every empty container that `js/app.js` later fills: - `
` topbar — brand, global search input, anchor nav, UTC clock, **Refresh all**, **⬇ JSON** buttons. - `
` — title, tag pills, CTA buttons, 8-stat strip. - `
` — Active Exploitation Tracker with summary cards, filter chips, grid, and 3 charts. - `
` — Leaflet container, top-attack-origins sidebar, live attack feed. - `
` — IOC lookup form, diagnostics panel. - `
` — 5 chart canvases. - `
` — KEV table. - `
` — CVE card grid + severity/product filters. - `
` — ThreatFox grid. - `
` — URLhaus grid. - `
` — Feodo Tracker table. - `
` — breach grid. - `
` — news grid. - `
` — exploit feeds grid. - `
` — OSINT directory grid (populated from `CONFIG.OSINT_ACCOUNTS`). - `
` — attribution lists for every data source. - `