Commit Graph
38 Commits
Author SHA1 Message Date
0xMarcio b6d3f380ca Stop paying twice for an unreachable host
A timeout kept the link either way, but the checker still followed a failed
HEAD with a GET to the same dead host, so every unreachable URL cost two
full timeouts. Return on the first network failure and drop the timeout to
eight seconds: a measured 1,500 references went from roughly three URLs a
second to fifteen.

That pass removed 98 links across 86 inventory lines, and the weekly budget
rises to 12,000 references, which sweeps the corpus every five weeks.
2026-08-31 01:45:23 +02:00
0xMarcio 66a4f41227 Check reference links for rot, not just repositories
The audit only ever asked GitHub about repositories, leaving 60,112
reference URLs unchecked since the corpus was inherited. Sampling put hard
404s at 4%, and one host accounts for a fifth of that on its own: CIS
retired the OVAL Repository, so all 942 links to it are permanently gone
and are removed in the next commit.

The rest is diffuse, so it needs sweeping rather than a rule. Check an
eighth of the URLs each week alongside the repositories, ordered
round-robin by host so a slice does not arrive at one server as a burst.
Only a 404 or 410 removes a link: a timeout, a refused HEAD or a 403 keeps
it, and update_cves already applies the same test to references it
discovers, so this holds inherited links to the standard new ones meet.
2026-08-31 00:27:34 +02:00
0xMarcio 1aa51fa852 Mark the CVEs attackers are actually using
CISA publishes a catalogue of vulnerabilities observed being exploited in
the wild, and 1,111 of its 1,685 entries are CVEs this index already holds
PoCs for. That is the one fact a reader most wants before opening an
exploit, and it was nowhere on the page.

The weekly audit stores the catalogue, the build trims it to the CVEs the
index carries, and a result row shows a KEV chip -- with the ransomware
flag where CISA records one, which covers 352 of them. 37 KB served.

A failed fetch keeps the stored catalogue rather than dropping the badge
off every entry. The chip reuses the header pill's treatment: the palette
still spends green on things you can click and amber on star counts only.
2026-08-31 00:13:01 +02:00
0xMarcio 576b0e4735 Collect stars and last push during the weekly audit
The audit already asks GitHub about every linked repository, so the same
query can carry back a star count and a last-push date for free. Results go
to repo_meta.json, which lets a search result say which of two hundred
linked PoCs is worth opening.

2.1 MB for 45,008 repositories, refreshed weekly.
2026-08-30 21:53:20 +02:00
0xMarcio 5452bc8353 Report when a PoC repository last shipped code
The trending table sorted and displayed updated_at, which also moves when a
repository merely gains a star, so a four-month-old exploit was claiming it
had been updated three hours ago. Record pushed_at and created_at and let
the page decide: last commit for the age it shows, repository age for the
trending rank.

The job now writes trending.json alongside the README table, so the site
reads the data instead of regex-parsing markdown the same job generated.
2026-08-30 21:53:19 +02:00
0xMarcio 6d65ae36bb Audit PoC links against GitHub weekly
Sampling the corpus put 17% of the repositories it links to behind a 404,
so readers were following links to repositories that no longer exist. The
previous audit script was 630 lines, never wired to anything, and kept its
state under a gitignored directory.

Replace it with a check that batches repository lookups through GraphQL
and removes a link only when GitHub answers NOT_FOUND for it, so a
throttle or a network error can never drop one. A quarter of the corpus
runs each week, which stays inside the token's hourly budget and sweeps
everything within the month.
2026-08-30 21:09:35 +02:00
0xMarcio 68d5c9b8f4 Replay bot commits when a push is rejected
The two scheduled jobs write disjoint paths but pin their checkout when
they are queued, so a commit landing in between throws away a completed
run. Rebase onto the current main and retry instead, deepening the clone
only on the rare occasion it is needed.
2026-08-30 17:04:04 +02:00
0xMarcio f937e5595c Authenticate the trending search and keep the token out of git
The search API was called anonymously on a 10 requests/minute limit while
the workflow already had a token; send it as an Authorization header,
never in the URL, and never print it. Dropping the token from the origin
remote also stops it being written into .git/config on the runner, since
actions/checkout already provides push credentials.

Rewrite on urllib so the job installs nothing, retry rate limits and 5xx,
and fail loudly instead of silently publishing a README with a year
missing. Repository text is flattened so a pipe cannot break the table.
2026-08-30 16:59:42 +02:00
0xMarcio f9fc5ae28d Stop tracking generated site data
Pages builds from the workflow artifact, so the committed CVE_list.json
was never served while adding a fresh 53 MB blob to history every day.
Generate it during the Pages build instead and drop the duplicate
generator; scripts/build_site.py is now the only thing that writes it.

The jinja2 templates re-rendered a trending table that logic.js replaces
on load, so the page shell goes back to being a plain static file and the
Pages build no longer installs anything. Shallow-clone the sync job too:
it never reads git history, and the three-day lookback already recovers
a skipped day.
2026-08-30 16:59:31 +02:00
0xMarcio c8fbbc40b2 Clean and verify CVE PoC sources 2026-08-29 04:29:03 +02:00
0xMarcio 189a0f24df Update Pages actions 2026-08-29 00:32:01 +02:00
0xMarcio d2dc891620 Deploy site after CVE sync 2026-08-29 00:27:01 +02:00
0xMarcio a62cda8ec8 Automate CVE PoC ingestion 2026-08-29 00:21:06 +02:00
0xMarcio 5c78e585a1 Simplify site to search + trending 2025-12-18 07:13:08 +01:00
0xMarcio 5cb3a28aeb Restore README trending tables and auto-build site 2025-12-17 21:39:16 +01:00
0xMarcio 722d7261ba Filter trending PoCs to current-year updates 2025-12-17 21:06:33 +01:00
0xMarcio 23be2e0751 Fix trending PoCs rendering and simplify frontend 2025-12-17 20:54:34 +01:00
0xMarcio 1f0cd8e78b Add PoC pipeline with blacklist filtering and Pages build 2025-12-17 15:53:37 +01:00
0xMarcio 02a23e8ef5 Add scheduled Pages build for CVE radar 2025-12-17 13:59:51 +01:00
0xMarcio 0c3e517733 Automate CVE sync and daily PoC refresh 2025-09-19 00:48:01 +02:00
Marc 856c5475f6 Update hot_cves.yml 2025-02-03 10:19:08 +01:00
Marc ceaaf6cfdb Update hot_cves.yml 2024-09-27 14:58:03 +02:00
Marc aba83e1e34 deployment workflow 2024-06-10 14:58:02 +02:00
Marc 410e68ca9d Update hot_cves.yml 2024-06-10 10:48:26 +02:00
Marc ad976b1983 Update hot_cves.yml 2024-06-10 10:45:25 +02:00
Marc fbee47ec3b Hot CVEs workflow... fix ? 2024-06-10 09:57:11 +02:00
Marc fed4b104b9 Update hot_cves.yml 2024-06-10 09:46:59 +02:00
0xMarcio a5f3c7f6b1 New workflow for Trending CVEs 2024-06-10 03:28:19 +02:00
Marc 6b5833e800 Update generate_cve_json.yml 2024-05-27 16:11:12 +02:00
Marc 17be2dbf7a Update generate_cve_json.yml 2024-05-27 15:51:05 +02:00
Marc e5b0630939 Update generate_cve_json.yml 2024-05-27 15:42:49 +02:00
Marc 5a776de713 Update generate_cve_json.yml 2024-05-27 04:11:01 +02:00
Marc f529497706 Update generate_cve_json.yml 2024-05-27 04:04:11 +02:00
Marc 487cb5b1c5 Update generate_cve_json.yml 2024-05-27 04:00:39 +02:00
Marc d0cdda86b4 Update generate_cve_json.yml 2024-05-27 03:55:36 +02:00
0xMarcio 16211e7e80 Update Mon May 27 03:47:54 CEST 2024 2024-05-27 03:47:55 +02:00
0xMarcio e6f993fab8 Update Mon May 27 03:38:05 CEST 2024 2024-05-27 03:38:05 +02:00
0xMarcio dc50746c84 Update Mon May 27 03:34:06 CEST 2024 2024-05-27 03:34:06 +02:00