diff --git a/07-framework-security/cms/directus/INDEX.md b/07-framework-security/cms/directus/INDEX.md index 8c0bd4a8..e1d6ed9e 100644 --- a/07-framework-security/cms/directus/INDEX.md +++ b/07-framework-security/cms/directus/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `29` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/discourse/INDEX.md b/07-framework-security/cms/discourse/INDEX.md index 5f08c875..654b2ae9 100644 --- a/07-framework-security/cms/discourse/INDEX.md +++ b/07-framework-security/cms/discourse/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `30` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/drupal/INDEX.md b/07-framework-security/cms/drupal/INDEX.md index 3a3626c0..6938a6e5 100644 --- a/07-framework-security/cms/drupal/INDEX.md +++ b/07-framework-security/cms/drupal/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `70` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/ghost/INDEX.md b/07-framework-security/cms/ghost/INDEX.md index 83a7f86e..0d792eb5 100644 --- a/07-framework-security/cms/ghost/INDEX.md +++ b/07-framework-security/cms/ghost/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `23` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/joomla/INDEX.md b/07-framework-security/cms/joomla/INDEX.md index 9d13786c..3238474e 100644 --- a/07-framework-security/cms/joomla/INDEX.md +++ b/07-framework-security/cms/joomla/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `100` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/mediawiki/INDEX.md b/07-framework-security/cms/mediawiki/INDEX.md index 9f95cafc..f1fe1f01 100644 --- a/07-framework-security/cms/mediawiki/INDEX.md +++ b/07-framework-security/cms/mediawiki/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `70` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/moodle/INDEX.md b/07-framework-security/cms/moodle/INDEX.md index b5d401f6..3ba37ec4 100644 --- a/07-framework-security/cms/moodle/INDEX.md +++ b/07-framework-security/cms/moodle/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `40` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/strapi/INDEX.md b/07-framework-security/cms/strapi/INDEX.md index 746a1f20..5ef227d0 100644 --- a/07-framework-security/cms/strapi/INDEX.md +++ b/07-framework-security/cms/strapi/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `26` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/cms/wordpress/INDEX.md b/07-framework-security/cms/wordpress/INDEX.md index a5fc4c31..ff98f8c1 100644 --- a/07-framework-security/cms/wordpress/INDEX.md +++ b/07-framework-security/cms/wordpress/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `140` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/adobe-commerce/INDEX.md b/07-framework-security/ecommerce/adobe-commerce/INDEX.md index 18f9b47c..993179f2 100644 --- a/07-framework-security/ecommerce/adobe-commerce/INDEX.md +++ b/07-framework-security/ecommerce/adobe-commerce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `81` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/magento-open-source/INDEX.md b/07-framework-security/ecommerce/magento-open-source/INDEX.md index 50994050..96484482 100644 --- a/07-framework-security/ecommerce/magento-open-source/INDEX.md +++ b/07-framework-security/ecommerce/magento-open-source/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `89` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -25,6 +25,7 @@ ## 来源 - `official` [Magento GitHub Advisories](https://github.com/magento/magento2/security/advisories) (mode=core) +- `official` [OSV Magento Open Source](https://osv.dev/) (mode=core) - `official` [NVD Magento](https://nvd.nist.gov/vuln/search) (keyword=Magento; mode=core) - `ecosystem-authority` [Sansec Research](https://sansec.io/research) (mode=extension) diff --git a/07-framework-security/ecommerce/medusa/INDEX.md b/07-framework-security/ecommerce/medusa/INDEX.md index 554c0c55..e13ed89e 100644 --- a/07-framework-security/ecommerce/medusa/INDEX.md +++ b/07-framework-security/ecommerce/medusa/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `15` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/opencart/INDEX.md b/07-framework-security/ecommerce/opencart/INDEX.md index b3d0a2b1..5cb1c1db 100644 --- a/07-framework-security/ecommerce/opencart/INDEX.md +++ b/07-framework-security/ecommerce/opencart/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `100` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/openmage/INDEX.md b/07-framework-security/ecommerce/openmage/INDEX.md index 2e239fa7..1a3cf901 100644 --- a/07-framework-security/ecommerce/openmage/INDEX.md +++ b/07-framework-security/ecommerce/openmage/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `27` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/prestashop/INDEX.md b/07-framework-security/ecommerce/prestashop/INDEX.md index 85566181..2a056a45 100644 --- a/07-framework-security/ecommerce/prestashop/INDEX.md +++ b/07-framework-security/ecommerce/prestashop/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `112` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/saleor/INDEX.md b/07-framework-security/ecommerce/saleor/INDEX.md index 0039e4a1..96c1188f 100644 --- a/07-framework-security/ecommerce/saleor/INDEX.md +++ b/07-framework-security/ecommerce/saleor/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `24` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/shopware/INDEX.md b/07-framework-security/ecommerce/shopware/INDEX.md index 78f1dc56..538b3fb8 100644 --- a/07-framework-security/ecommerce/shopware/INDEX.md +++ b/07-framework-security/ecommerce/shopware/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `71` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/woocommerce/INDEX.md b/07-framework-security/ecommerce/woocommerce/INDEX.md index 2fb4ca55..32f6005b 100644 --- a/07-framework-security/ecommerce/woocommerce/INDEX.md +++ b/07-framework-security/ecommerce/woocommerce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `111` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/angular/INDEX.md b/07-framework-security/frameworks/angular/INDEX.md index 57ede830..71481aa0 100644 --- a/07-framework-security/frameworks/angular/INDEX.md +++ b/07-framework-security/frameworks/angular/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/aspnet-core/INDEX.md b/07-framework-security/frameworks/aspnet-core/INDEX.md index c3d68eff..6e6fb255 100644 --- a/07-framework-security/frameworks/aspnet-core/INDEX.md +++ b/07-framework-security/frameworks/aspnet-core/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -24,6 +24,7 @@ ## 来源 +- `official` [OSV ASP.NET Core](https://osv.dev/) (mode=core) - `official` [NVD ASP.NET Core](https://nvd.nist.gov/vuln/search) (keyword=ASP.NET Core; mode=core) ## 案例列表 diff --git a/07-framework-security/frameworks/astro/INDEX.md b/07-framework-security/frameworks/astro/INDEX.md index 4eb59d49..b20092c6 100644 --- a/07-framework-security/frameworks/astro/INDEX.md +++ b/07-framework-security/frameworks/astro/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `14` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/django/INDEX.md b/07-framework-security/frameworks/django/INDEX.md index 5481e736..6f3ee93f 100644 --- a/07-framework-security/frameworks/django/INDEX.md +++ b/07-framework-security/frameworks/django/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `82` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/echo/INDEX.md b/07-framework-security/frameworks/echo/INDEX.md index cfe8c2bf..9197c2b2 100644 --- a/07-framework-security/frameworks/echo/INDEX.md +++ b/07-framework-security/frameworks/echo/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/esbuild/INDEX.md b/07-framework-security/frameworks/esbuild/INDEX.md index 35a554c6..0bd74d34 100644 --- a/07-framework-security/frameworks/esbuild/INDEX.md +++ b/07-framework-security/frameworks/esbuild/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/express/INDEX.md b/07-framework-security/frameworks/express/INDEX.md index f4ca7b58..47de3c69 100644 --- a/07-framework-security/frameworks/express/INDEX.md +++ b/07-framework-security/frameworks/express/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/fastify/INDEX.md b/07-framework-security/frameworks/fastify/INDEX.md index 637b64aa..283b732a 100644 --- a/07-framework-security/frameworks/fastify/INDEX.md +++ b/07-framework-security/frameworks/fastify/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/flask/INDEX.md b/07-framework-security/frameworks/flask/INDEX.md index 986f7532..4224cf9f 100644 --- a/07-framework-security/frameworks/flask/INDEX.md +++ b/07-framework-security/frameworks/flask/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/gin/INDEX.md b/07-framework-security/frameworks/gin/INDEX.md index 9dc9742f..4ae218ef 100644 --- a/07-framework-security/frameworks/gin/INDEX.md +++ b/07-framework-security/frameworks/gin/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/hapi/INDEX.md b/07-framework-security/frameworks/hapi/INDEX.md index e8192de6..a6474270 100644 --- a/07-framework-security/frameworks/hapi/INDEX.md +++ b/07-framework-security/frameworks/hapi/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/koa/INDEX.md b/07-framework-security/frameworks/koa/INDEX.md index eca675fe..1b55d99f 100644 --- a/07-framework-security/frameworks/koa/INDEX.md +++ b/07-framework-security/frameworks/koa/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/laravel/INDEX.md b/07-framework-security/frameworks/laravel/INDEX.md index 111b28cf..78499e91 100644 --- a/07-framework-security/frameworks/laravel/INDEX.md +++ b/07-framework-security/frameworks/laravel/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nestjs/INDEX.md b/07-framework-security/frameworks/nestjs/INDEX.md index 97498d56..ea35a9ba 100644 --- a/07-framework-security/frameworks/nestjs/INDEX.md +++ b/07-framework-security/frameworks/nestjs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nextjs/INDEX.md b/07-framework-security/frameworks/nextjs/INDEX.md index cf405d01..f2e63c23 100644 --- a/07-framework-security/frameworks/nextjs/INDEX.md +++ b/07-framework-security/frameworks/nextjs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `40` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nodejs/INDEX.md b/07-framework-security/frameworks/nodejs/INDEX.md index b63bba37..df95f14c 100644 --- a/07-framework-security/frameworks/nodejs/INDEX.md +++ b/07-framework-security/frameworks/nodejs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `8` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nuxt/INDEX.md b/07-framework-security/frameworks/nuxt/INDEX.md index 5ce215e8..d68c8935 100644 --- a/07-framework-security/frameworks/nuxt/INDEX.md +++ b/07-framework-security/frameworks/nuxt/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `28` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/rails/INDEX.md b/07-framework-security/frameworks/rails/INDEX.md index 7b2ed61c..61b4d70e 100644 --- a/07-framework-security/frameworks/rails/INDEX.md +++ b/07-framework-security/frameworks/rails/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `42` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/react/INDEX.md b/07-framework-security/frameworks/react/INDEX.md index 43c23d90..1af38fd4 100644 --- a/07-framework-security/frameworks/react/INDEX.md +++ b/07-framework-security/frameworks/react/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `21` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-boot/INDEX.md b/07-framework-security/frameworks/spring-boot/INDEX.md index 8b7d9a22..c11e3948 100644 --- a/07-framework-security/frameworks/spring-boot/INDEX.md +++ b/07-framework-security/frameworks/spring-boot/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-framework/INDEX.md b/07-framework-security/frameworks/spring-framework/INDEX.md index 70957beb..a6698b8f 100644 --- a/07-framework-security/frameworks/spring-framework/INDEX.md +++ b/07-framework-security/frameworks/spring-framework/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `11` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-security/INDEX.md b/07-framework-security/frameworks/spring-security/INDEX.md index 80a0acb7..cbb86655 100644 --- a/07-framework-security/frameworks/spring-security/INDEX.md +++ b/07-framework-security/frameworks/spring-security/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/sveltekit/INDEX.md b/07-framework-security/frameworks/sveltekit/INDEX.md index dcfa9820..bb50d30c 100644 --- a/07-framework-security/frameworks/sveltekit/INDEX.md +++ b/07-framework-security/frameworks/sveltekit/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/symfony/INDEX.md b/07-framework-security/frameworks/symfony/INDEX.md index 7748c353..0bf193fd 100644 --- a/07-framework-security/frameworks/symfony/INDEX.md +++ b/07-framework-security/frameworks/symfony/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `9` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/undici/INDEX.md b/07-framework-security/frameworks/undici/INDEX.md index d0350d55..5dfbfc72 100644 --- a/07-framework-security/frameworks/undici/INDEX.md +++ b/07-framework-security/frameworks/undici/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `9` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/vite/INDEX.md b/07-framework-security/frameworks/vite/INDEX.md index e400b552..5005a19c 100644 --- a/07-framework-security/frameworks/vite/INDEX.md +++ b/07-framework-security/frameworks/vite/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `30` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/vue/INDEX.md b/07-framework-security/frameworks/vue/INDEX.md index edff0d90..16f87f1a 100644 --- a/07-framework-security/frameworks/vue/INDEX.md +++ b/07-framework-security/frameworks/vue/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `15` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/webpack/INDEX.md b/07-framework-security/frameworks/webpack/INDEX.md index 132682d2..a94d5215 100644 --- a/07-framework-security/frameworks/webpack/INDEX.md +++ b/07-framework-security/frameworks/webpack/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/werkzeug/INDEX.md b/07-framework-security/frameworks/werkzeug/INDEX.md index 61c4d3dd..217f5b54 100644 --- a/07-framework-security/frameworks/werkzeug/INDEX.md +++ b/07-framework-security/frameworks/werkzeug/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/adminer/INDEX.md b/07-framework-security/platforms/adminer/INDEX.md index 323016b7..3e02e2aa 100644 --- a/07-framework-security/platforms/adminer/INDEX.md +++ b/07-framework-security/platforms/adminer/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -24,6 +24,7 @@ ## 来源 +- `official` [OSV Adminer](https://osv.dev/) (mode=core) - `official` [NVD Adminer](https://nvd.nist.gov/vuln/search) (keyword=Adminer; mode=core) ## 案例列表 diff --git a/07-framework-security/platforms/gitea/INDEX.md b/07-framework-security/platforms/gitea/INDEX.md index 9561866d..cea361f1 100644 --- a/07-framework-security/platforms/gitea/INDEX.md +++ b/07-framework-security/platforms/gitea/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `13` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/gitlab-ce/INDEX.md b/07-framework-security/platforms/gitlab-ce/INDEX.md index 31cc1fd7..048ddfc5 100644 --- a/07-framework-security/platforms/gitlab-ce/INDEX.md +++ b/07-framework-security/platforms/gitlab-ce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `55` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -25,6 +25,7 @@ ## 来源 - `official` [GitLab Security Releases](https://about.gitlab.com/releases/categories/releases/) (mode=core) +- `official` [GitLab Security Releases Atom](https://about.gitlab.com/security-releases.xml) (mode=core) - `official` [NVD GitLab](https://nvd.nist.gov/vuln/search) (keyword=GitLab CE; mode=core) - `ecosystem-authority` [GitLab Advisory Database](https://gitlab.com/gitlab-org/advisories-community) (mode=core) diff --git a/07-framework-security/platforms/grafana/INDEX.md b/07-framework-security/platforms/grafana/INDEX.md index e6035426..ce4512b1 100644 --- a/07-framework-security/platforms/grafana/INDEX.md +++ b/07-framework-security/platforms/grafana/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `60` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/jenkins/INDEX.md b/07-framework-security/platforms/jenkins/INDEX.md index 70996183..fb377290 100644 --- a/07-framework-security/platforms/jenkins/INDEX.md +++ b/07-framework-security/platforms/jenkins/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `60` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -25,6 +25,7 @@ ## 来源 - `official` [Jenkins Security Advisories](https://www.jenkins.io/security/advisories/) (mode=core) +- `official` [Jenkins Security Advisories RSS](https://www.jenkins.io/security/advisories/rss.xml) (mode=core) - `official` [NVD Jenkins](https://nvd.nist.gov/vuln/search) (keyword=Jenkins; mode=core) ## 案例列表 diff --git a/07-framework-security/platforms/kibana/INDEX.md b/07-framework-security/platforms/kibana/INDEX.md index c8a8711e..0c7cfd26 100644 --- a/07-framework-security/platforms/kibana/INDEX.md +++ b/07-framework-security/platforms/kibana/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `41` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 @@ -25,6 +25,7 @@ ## 来源 - `official` [Elastic Security Announcements](https://discuss.elastic.co/c/announcements/security-announcements/31) (mode=core) +- `official` [Elastic Security Announcements RSS](https://discuss.elastic.co/c/announcements/security-announcements/31.rss) (mode=core) - `official` [NVD Kibana](https://nvd.nist.gov/vuln/search) (keyword=Kibana; mode=core) ## 案例列表 diff --git a/07-framework-security/platforms/mattermost/INDEX.md b/07-framework-security/platforms/mattermost/INDEX.md index 7d52d8b4..2c724fdc 100644 --- a/07-framework-security/platforms/mattermost/INDEX.md +++ b/07-framework-security/platforms/mattermost/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `20` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/phpmyadmin/INDEX.md b/07-framework-security/platforms/phpmyadmin/INDEX.md index 41b6bbcb..84d25aef 100644 --- a/07-framework-security/platforms/phpmyadmin/INDEX.md +++ b/07-framework-security/platforms/phpmyadmin/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `50` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/redmine/INDEX.md b/07-framework-security/platforms/redmine/INDEX.md index cdf521d4..2a752423 100644 --- a/07-framework-security/platforms/redmine/INDEX.md +++ b/07-framework-security/platforms/redmine/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `50` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/apache-httpd/INDEX.md b/07-framework-security/servers/apache-httpd/INDEX.md index b2ef2d80..91ccdf01 100644 --- a/07-framework-security/servers/apache-httpd/INDEX.md +++ b/07-framework-security/servers/apache-httpd/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `135` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/apache-tomcat/INDEX.md b/07-framework-security/servers/apache-tomcat/INDEX.md index 488c3085..602605e3 100644 --- a/07-framework-security/servers/apache-tomcat/INDEX.md +++ b/07-framework-security/servers/apache-tomcat/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `136` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/caddy/INDEX.md b/07-framework-security/servers/caddy/INDEX.md index 5e3f89c5..804d16d2 100644 --- a/07-framework-security/servers/caddy/INDEX.md +++ b/07-framework-security/servers/caddy/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `27` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/haproxy/INDEX.md b/07-framework-security/servers/haproxy/INDEX.md index 153a23a7..7c8949d5 100644 --- a/07-framework-security/servers/haproxy/INDEX.md +++ b/07-framework-security/servers/haproxy/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `6` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/nginx/INDEX.md b/07-framework-security/servers/nginx/INDEX.md index b551dcbb..c16a4554 100644 --- a/07-framework-security/servers/nginx/INDEX.md +++ b/07-framework-security/servers/nginx/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `110` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/07-framework-security/servers/traefik/INDEX.md b/07-framework-security/servers/traefik/INDEX.md index 0529d902..27bfb925 100644 --- a/07-framework-security/servers/traefik/INDEX.md +++ b/07-framework-security/servers/traefik/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `43` -- 最近渲染时间: `2026-03-19T02:54:09+00:00` +- 最近渲染时间: `2026-03-19T03:38:08+00:00` ## 目标约束 diff --git a/08-threat-intel/generated/dashboard/architecture.json b/08-threat-intel/generated/dashboard/architecture.json index 7622415e..6b8a94da 100644 --- a/08-threat-intel/generated/dashboard/architecture.json +++ b/08-threat-intel/generated/dashboard/architecture.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-19T02:54:09+00:00", + "generated_at": "2026-03-19T03:38:08+00:00", "title": "\u5f53\u524d\u67b6\u6784\u5e93", "summary": "\u5de5\u4f5c\u53f0\u3001\u63a7\u5236\u9762\u3001\u6570\u636e\u5c42\u3001\u6388\u6743\u8fb9\u754c\u4e0e\u7cfb\u7edf\u8986\u76d6\u7684\u5f53\u524d\u771f\u503c\u89c6\u56fe\u3002", "sections": [ @@ -49,7 +49,7 @@ }, { "label": "\u751f\u6210\u65f6\u95f4", - "value": "2026-03-19T02:54:09+00:00" + "value": "2026-03-19T03:38:08+00:00" } ], "links": [ @@ -1215,7 +1215,7 @@ "open": false, "badges": [ "\u8fd1\u4e24\u5e74\u5168\u91cf", - "\u5b98\u65b9\u6e90 1", + "\u5b98\u65b9\u6e90 2", "\u751f\u6001\u6e90 0", "\u7814\u7a76\u6e90 0" ], @@ -1249,7 +1249,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "NVD ASP.NET Core" + "value": "OSV ASP.NET Core\nNVD ASP.NET Core" }, { "label": "\u751f\u6001\u6765\u6e90", @@ -3701,7 +3701,7 @@ "open": false, "badges": [ "\u8fd1\u4e24\u5e74\u5168\u91cf", - "\u5b98\u65b9\u6e90 1", + "\u5b98\u65b9\u6e90 2", "\u751f\u6001\u6e90 0", "\u7814\u7a76\u6e90 0" ], @@ -3735,7 +3735,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "NVD Adminer" + "value": "OSV Adminer\nNVD Adminer" }, { "label": "\u751f\u6001\u6765\u6e90", @@ -3786,7 +3786,7 @@ "open": false, "badges": [ "\u8fd1\u4e24\u5e74\u5168\u91cf", - "\u5b98\u65b9\u6e90 2", + "\u5b98\u65b9\u6e90 3", "\u751f\u6001\u6e90 1", "\u7814\u7a76\u6e90 0" ], @@ -3820,7 +3820,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "GitLab Security Releases\nNVD GitLab" + "value": "GitLab Security Releases\nGitLab Security Releases Atom\nNVD GitLab" }, { "label": "\u751f\u6001\u6765\u6e90", @@ -4041,7 +4041,7 @@ "open": false, "badges": [ "\u8fd1\u4e24\u5e74\u5168\u91cf", - "\u5b98\u65b9\u6e90 2", + "\u5b98\u65b9\u6e90 3", "\u751f\u6001\u6e90 0", "\u7814\u7a76\u6e90 0" ], @@ -4075,7 +4075,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "Jenkins Security Advisories\nNVD Jenkins" + "value": "Jenkins Security Advisories\nJenkins Security Advisories RSS\nNVD Jenkins" }, { "label": "\u751f\u6001\u6765\u6e90", @@ -4126,7 +4126,7 @@ "open": false, "badges": [ "\u8fd1\u4e24\u5e74\u5168\u91cf", - "\u5b98\u65b9\u6e90 2", + "\u5b98\u65b9\u6e90 3", "\u751f\u6001\u6e90 0", "\u7814\u7a76\u6e90 0" ], @@ -4160,7 +4160,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "Elastic Security Announcements\nNVD Kibana" + "value": "Elastic Security Announcements\nElastic Security Announcements RSS\nNVD Kibana" }, { "label": "\u751f\u6001\u6765\u6e90", @@ -5103,7 +5103,7 @@ "open": false, "badges": [ "\u5386\u53f2\u5168\u91cf", - "\u5b98\u65b9\u6e90 2", + "\u5b98\u65b9\u6e90 3", "\u751f\u6001\u6e90 1", "\u7814\u7a76\u6e90 0" ], @@ -5137,7 +5137,7 @@ "fields": [ { "label": "\u5b98\u65b9\u6765\u6e90", - "value": "Magento GitHub Advisories\nNVD Magento" + "value": "Magento GitHub Advisories\nOSV Magento Open Source\nNVD Magento" }, { "label": "\u751f\u6001\u6765\u6e90", diff --git a/08-threat-intel/generated/dashboard/data/completeness.json b/08-threat-intel/generated/dashboard/data/completeness.json index 08e67d5b..150aada9 100644 --- a/08-threat-intel/generated/dashboard/data/completeness.json +++ b/08-threat-intel/generated/dashboard/data/completeness.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-19T02:54:09+00:00", + "generated_at": "2026-03-19T03:38:08+00:00", "advisory_total": 89, "registry_advisory_total": 2392, "scope": "latest-run-backed-advisories", @@ -172,25 +172,25 @@ "failures": [] }, "source_health": { - "active_source_count": 118, - "green_source_count": 118, + "active_source_count": 113, + "green_source_count": 113, "failure_count": 0, - "last_fully_green_run": "2026-03-19T02:53:57+00:00", + "last_fully_green_run": "2026-03-19T03:38:01+00:00", "open_alert_count": 0, "resolved_alert_count": 4 }, "monitor_summary": { - "generated_at": "2026-03-19T02:53:57+00:00", - "active_source_count": 118, - "green_source_count": 118, + "generated_at": "2026-03-19T03:38:01+00:00", + "active_source_count": 113, + "green_source_count": 113, "source_failure_count": 0, "open_alert_count": 0, "resolved_alert_count": 4, - "last_fully_green_run": "2026-03-19T02:53:57+00:00", + "last_fully_green_run": "2026-03-19T03:38:01+00:00", "source_catalog": { "system_count": 62, - "source_count": 173, - "retired_source_count": 55 + "source_count": 179, + "retired_source_count": 66 }, "ingest": { "new_count": 0, diff --git a/08-threat-intel/generated/dashboard/data/monitor-summary.json b/08-threat-intel/generated/dashboard/data/monitor-summary.json index b817c31a..916f878e 100644 --- a/08-threat-intel/generated/dashboard/data/monitor-summary.json +++ b/08-threat-intel/generated/dashboard/data/monitor-summary.json @@ -1,15 +1,15 @@ { - "generated_at": "2026-03-19T02:53:57+00:00", - "active_source_count": 118, - "green_source_count": 118, + "generated_at": "2026-03-19T03:38:01+00:00", + "active_source_count": 113, + "green_source_count": 113, "source_failure_count": 0, "open_alert_count": 0, "resolved_alert_count": 4, - "last_fully_green_run": "2026-03-19T02:53:57+00:00", + "last_fully_green_run": "2026-03-19T03:38:01+00:00", "source_catalog": { "system_count": 62, - "source_count": 173, - "retired_source_count": 55 + "source_count": 179, + "retired_source_count": 66 }, "ingest": { "new_count": 0, diff --git a/08-threat-intel/generated/dashboard/data/source-catalog-audit.json b/08-threat-intel/generated/dashboard/data/source-catalog-audit.json index b6a72666..df8ed15f 100644 --- a/08-threat-intel/generated/dashboard/data/source-catalog-audit.json +++ b/08-threat-intel/generated/dashboard/data/source-catalog-audit.json @@ -1,20 +1,20 @@ { - "generated_at": "2026-03-19T02:53:49+00:00", + "generated_at": "2026-03-19T03:37:56+00:00", "system_count": 62, - "source_count": 173, - "active_source_count": 118, - "retired_source_count": 55, + "source_count": 179, + "active_source_count": 113, + "retired_source_count": 66, "systems_with_active_official": 61, - "systems_with_machine_readable_source": 62, + "systems_with_machine_readable_source": 61, "systems": [ { "system_id": "adminer", "display_name": "Adminer", "category": "platforms", "tier": "rolling-24m", - "source_total": 1, + "source_total": 2, "active_source_total": 1, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 1, "ecosystem_active": 0, "research_active": 0, @@ -28,14 +28,14 @@ "category": "ecommerce", "tier": "history-full", "source_total": 5, - "active_source_total": 2, - "retired_source_total": 3, - "official_active": 2, + "active_source_total": 1, + "retired_source_total": 4, + "official_active": 1, "ecosystem_active": 0, "research_active": 0, - "machine_readable_active": 1, + "machine_readable_active": 0, "has_active_official": true, - "has_machine_readable_source": true + "has_machine_readable_source": false }, { "system_id": "angular", @@ -58,12 +58,12 @@ "category": "servers", "tier": "history-full", "source_total": 3, - "active_source_total": 3, - "retired_source_total": 0, - "official_active": 3, + "active_source_total": 2, + "retired_source_total": 1, + "official_active": 2, "ecosystem_active": 0, "research_active": 0, - "machine_readable_active": 2, + "machine_readable_active": 1, "has_active_official": true, "has_machine_readable_source": true }, @@ -73,12 +73,12 @@ "category": "servers", "tier": "history-full", "source_total": 3, - "active_source_total": 3, - "retired_source_total": 0, - "official_active": 3, + "active_source_total": 2, + "retired_source_total": 1, + "official_active": 2, "ecosystem_active": 0, "research_active": 0, - "machine_readable_active": 2, + "machine_readable_active": 1, "has_active_official": true, "has_machine_readable_source": true }, @@ -87,9 +87,9 @@ "display_name": "ASP.NET Core", "category": "frameworks", "tier": "rolling-24m", - "source_total": 1, + "source_total": 2, "active_source_total": 1, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 1, "ecosystem_active": 0, "research_active": 0, @@ -312,9 +312,9 @@ "display_name": "GitLab CE", "category": "platforms", "tier": "rolling-24m", - "source_total": 3, + "source_total": 4, "active_source_total": 3, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 2, "ecosystem_active": 1, "research_active": 0, @@ -358,12 +358,12 @@ "category": "servers", "tier": "rolling-24m", "source_total": 3, - "active_source_total": 2, - "retired_source_total": 1, - "official_active": 2, + "active_source_total": 1, + "retired_source_total": 2, + "official_active": 1, "ecosystem_active": 0, "research_active": 0, - "machine_readable_active": 2, + "machine_readable_active": 1, "has_active_official": true, "has_machine_readable_source": true }, @@ -372,9 +372,9 @@ "display_name": "Jenkins", "category": "platforms", "tier": "rolling-24m", - "source_total": 2, + "source_total": 3, "active_source_total": 2, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 2, "ecosystem_active": 0, "research_active": 0, @@ -402,9 +402,9 @@ "display_name": "Kibana", "category": "platforms", "tier": "rolling-24m", - "source_total": 2, + "source_total": 3, "active_source_total": 2, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 2, "ecosystem_active": 0, "research_active": 0, @@ -447,9 +447,9 @@ "display_name": "Magento Open Source", "category": "ecommerce", "tier": "history-full", - "source_total": 3, + "source_total": 4, "active_source_total": 3, - "retired_source_total": 0, + "retired_source_total": 1, "official_active": 2, "ecosystem_active": 1, "research_active": 0, @@ -553,12 +553,12 @@ "category": "servers", "tier": "history-full", "source_total": 3, - "active_source_total": 3, - "retired_source_total": 0, - "official_active": 3, + "active_source_total": 2, + "retired_source_total": 1, + "official_active": 2, "ecosystem_active": 0, "research_active": 0, - "machine_readable_active": 2, + "machine_readable_active": 1, "has_active_official": true, "has_machine_readable_source": true }, @@ -939,6 +939,18 @@ } ], "retired_sources": [ + { + "system_id": "adminer", + "display_name": "Adminer", + "source_name": "NVD Adminer", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.", + "replacement_sources": [ + "OSV Adminer" + ], + "url": "" + }, { "system_id": "adobe-commerce", "display_name": "Adobe Commerce", @@ -966,6 +978,18 @@ ], "url": "" }, + { + "system_id": "adobe-commerce", + "display_name": "Adobe Commerce", + "source_name": "NVD Adobe Commerce", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.", + "replacement_sources": [ + "Adobe Magento Security Index" + ], + "url": "" + }, { "system_id": "adobe-commerce", "display_name": "Adobe Commerce", @@ -991,6 +1015,44 @@ ], "url": "" }, + { + "system_id": "apache-httpd", + "display_name": "Apache HTTP Server", + "source_name": "NVD Apache HTTP Server", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.", + "replacement_sources": [ + "Apache HTTPD Security", + "CISA KEV Apache HTTPD" + ], + "url": "" + }, + { + "system_id": "apache-tomcat", + "display_name": "Apache Tomcat", + "source_name": "NVD Tomcat", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.", + "replacement_sources": [ + "Apache Tomcat Security", + "CISA KEV Tomcat" + ], + "url": "" + }, + { + "system_id": "aspnet-core", + "display_name": "ASP.NET Core", + "source_name": "NVD ASP.NET Core", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.", + "replacement_sources": [ + "OSV ASP.NET Core" + ], + "url": "" + }, { "system_id": "astro", "display_name": "Astro", @@ -1140,6 +1202,19 @@ ], "url": "" }, + { + "system_id": "gitlab-ce", + "display_name": "GitLab CE", + "source_name": "NVD GitLab", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.", + "replacement_sources": [ + "GitLab Security Releases", + "GitLab Security Releases Atom" + ], + "url": "" + }, { "system_id": "hapi", "display_name": "Hapi", @@ -1164,6 +1239,31 @@ ], "url": "https://www.haproxy.org/security/" }, + { + "system_id": "haproxy", + "display_name": "HAProxy", + "source_name": "NVD HAProxy", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.", + "replacement_sources": [ + "HAProxy Blog Feed" + ], + "url": "" + }, + { + "system_id": "jenkins", + "display_name": "Jenkins", + "source_name": "NVD Jenkins", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.", + "replacement_sources": [ + "Jenkins Security Advisories", + "Jenkins Security Advisories RSS" + ], + "url": "" + }, { "system_id": "joomla", "display_name": "Joomla", @@ -1177,6 +1277,19 @@ ], "url": "" }, + { + "system_id": "kibana", + "display_name": "Kibana", + "source_name": "NVD Kibana", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.", + "replacement_sources": [ + "Elastic Security Announcements", + "Elastic Security Announcements RSS" + ], + "url": "" + }, { "system_id": "koa", "display_name": "Koa", @@ -1201,6 +1314,19 @@ ], "url": "" }, + { + "system_id": "magento-open-source", + "display_name": "Magento Open Source", + "source_name": "NVD Magento", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.", + "replacement_sources": [ + "Magento GitHub Advisories", + "OSV Magento Open Source" + ], + "url": "" + }, { "system_id": "mattermost", "display_name": "Mattermost", @@ -1313,6 +1439,19 @@ ], "url": "" }, + { + "system_id": "nginx", + "display_name": "Nginx", + "source_name": "NVD NGINX", + "bucket": "official_sources", + "kind": "nvd-search", + "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.", + "replacement_sources": [ + "NGINX Security Advisories", + "CISA KEV NGINX" + ], + "url": "" + }, { "system_id": "nuxt", "display_name": "Nuxt", @@ -1633,6 +1772,13 @@ } ], "replacement_map": [ + { + "system_id": "adminer", + "retired_source": "NVD Adminer", + "replacement_sources": [ + "OSV Adminer" + ] + }, { "system_id": "adobe-commerce", "retired_source": "Adobe Security Bulletins", @@ -1650,6 +1796,13 @@ "NVD Adobe Commerce" ] }, + { + "system_id": "adobe-commerce", + "retired_source": "NVD Adobe Commerce", + "replacement_sources": [ + "Adobe Magento Security Index" + ] + }, { "system_id": "adobe-commerce", "retired_source": "Sansec Research", @@ -1665,6 +1818,29 @@ "OSV Angular" ] }, + { + "system_id": "apache-httpd", + "retired_source": "NVD Apache HTTP Server", + "replacement_sources": [ + "Apache HTTPD Security", + "CISA KEV Apache HTTPD" + ] + }, + { + "system_id": "apache-tomcat", + "retired_source": "NVD Tomcat", + "replacement_sources": [ + "Apache Tomcat Security", + "CISA KEV Tomcat" + ] + }, + { + "system_id": "aspnet-core", + "retired_source": "NVD ASP.NET Core", + "replacement_sources": [ + "OSV ASP.NET Core" + ] + }, { "system_id": "astro", "retired_source": "GitHub Global Advisories", @@ -1754,6 +1930,14 @@ "OSV Ghost" ] }, + { + "system_id": "gitlab-ce", + "retired_source": "NVD GitLab", + "replacement_sources": [ + "GitLab Security Releases", + "GitLab Security Releases Atom" + ] + }, { "system_id": "hapi", "retired_source": "GitHub Global Advisories", @@ -1768,6 +1952,21 @@ "HAProxy Blog Feed" ] }, + { + "system_id": "haproxy", + "retired_source": "NVD HAProxy", + "replacement_sources": [ + "HAProxy Blog Feed" + ] + }, + { + "system_id": "jenkins", + "retired_source": "NVD Jenkins", + "replacement_sources": [ + "Jenkins Security Advisories", + "Jenkins Security Advisories RSS" + ] + }, { "system_id": "joomla", "retired_source": "NVD Joomla", @@ -1776,6 +1975,14 @@ "OSV Joomla" ] }, + { + "system_id": "kibana", + "retired_source": "NVD Kibana", + "replacement_sources": [ + "Elastic Security Announcements", + "Elastic Security Announcements RSS" + ] + }, { "system_id": "koa", "retired_source": "GitHub Global Advisories", @@ -1790,6 +1997,14 @@ "OSV Laravel" ] }, + { + "system_id": "magento-open-source", + "retired_source": "NVD Magento", + "replacement_sources": [ + "Magento GitHub Advisories", + "OSV Magento Open Source" + ] + }, { "system_id": "mattermost", "retired_source": "Mattermost Security Updates", @@ -1857,6 +2072,14 @@ "OSV Next.js" ] }, + { + "system_id": "nginx", + "retired_source": "NVD NGINX", + "replacement_sources": [ + "NGINX Security Advisories", + "CISA KEV NGINX" + ] + }, { "system_id": "nuxt", "retired_source": "GitHub Global Advisories", diff --git a/08-threat-intel/generated/dashboard/data/source-health.json b/08-threat-intel/generated/dashboard/data/source-health.json index 45e60720..8b8783d7 100644 --- a/08-threat-intel/generated/dashboard/data/source-health.json +++ b/08-threat-intel/generated/dashboard/data/source-health.json @@ -1,41 +1,33 @@ { - "generated_at": "2026-03-19T02:53:57+00:00", - "active_source_count": 118, - "green_source_count": 118, + "generated_at": "2026-03-19T03:38:01+00:00", + "active_source_count": 113, + "green_source_count": 113, "failure_count": 0, "all_green": true, - "last_fully_green_run": "2026-03-19T02:53:57+00:00", + "last_fully_green_run": "2026-03-19T03:38:01+00:00", "retries_performed": 0, "probes": [ { "system_id": "adminer", - "source_name": "NVD Adminer", - "source_kind": "nvd-search", - "elapsed_seconds": 3.726, - "kind": "nvd-search", + "source_name": "OSV Adminer", + "source_kind": "osv-batch", + "elapsed_seconds": 2.624, + "kind": "osv-batch", "items_seen": 1 }, { "system_id": "adobe-commerce", "source_name": "Adobe Magento Security Index", "source_kind": "vendor-index", - "elapsed_seconds": 1.008, + "elapsed_seconds": 0.544, "kind": "vendor-index", "items_seen": 46 }, - { - "system_id": "adobe-commerce", - "source_name": "NVD Adobe Commerce", - "source_kind": "nvd-search", - "elapsed_seconds": 0.001, - "kind": "nvd-search", - "items_seen": 1 - }, { "system_id": "angular", "source_name": "OSV Angular", "source_kind": "osv-batch", - "elapsed_seconds": 1.467, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -43,7 +35,7 @@ "system_id": "apache-httpd", "source_name": "Apache HTTPD Security", "source_kind": "html-links", - "elapsed_seconds": 4.227, + "elapsed_seconds": 2.739, "kind": "html-links", "items_seen": 182 }, @@ -51,23 +43,15 @@ "system_id": "apache-httpd", "source_name": "CISA KEV Apache HTTPD", "source_kind": "kev-json", - "elapsed_seconds": 3.839, + "elapsed_seconds": 2.768, "kind": "kev-json", "items_seen": 1545 }, - { - "system_id": "apache-httpd", - "source_name": "NVD Apache HTTP Server", - "source_kind": "nvd-search", - "elapsed_seconds": 1.978, - "kind": "nvd-search", - "items_seen": 1 - }, { "system_id": "apache-tomcat", "source_name": "Apache Tomcat Security", "source_kind": "html-links", - "elapsed_seconds": 2.946, + "elapsed_seconds": 2.707, "kind": "html-links", "items_seen": 270 }, @@ -75,31 +59,23 @@ "system_id": "apache-tomcat", "source_name": "CISA KEV Tomcat", "source_kind": "kev-json", - "elapsed_seconds": 3.994, + "elapsed_seconds": 2.829, "kind": "kev-json", "items_seen": 1545 }, - { - "system_id": "apache-tomcat", - "source_name": "NVD Tomcat", - "source_kind": "nvd-search", - "elapsed_seconds": 2.801, - "kind": "nvd-search", - "items_seen": 1 - }, { "system_id": "aspnet-core", - "source_name": "NVD ASP.NET Core", - "source_kind": "nvd-search", - "elapsed_seconds": 1.779, - "kind": "nvd-search", + "source_name": "OSV ASP.NET Core", + "source_kind": "osv-batch", + "elapsed_seconds": 1.877, + "kind": "osv-batch", "items_seen": 1 }, { "system_id": "astro", "source_name": "OSV Astro", "source_kind": "osv-batch", - "elapsed_seconds": 1.468, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -107,7 +83,7 @@ "system_id": "caddy", "source_name": "GitHub Caddy Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.962, + "elapsed_seconds": 3.835, "kind": "html-links", "items_seen": 114 }, @@ -115,7 +91,7 @@ "system_id": "caddy", "source_name": "OSV Caddy", "source_kind": "osv-batch", - "elapsed_seconds": 2.947, + "elapsed_seconds": 2.434, "kind": "osv-batch", "items_seen": 1 }, @@ -123,7 +99,7 @@ "system_id": "directus", "source_name": "Directus GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 0.972, + "elapsed_seconds": 1.474, "kind": "html-links", "items_seen": 127 }, @@ -131,7 +107,7 @@ "system_id": "directus", "source_name": "OSV Directus", "source_kind": "osv-batch", - "elapsed_seconds": 0.003, + "elapsed_seconds": 0.004, "kind": "osv-batch", "items_seen": 1 }, @@ -139,7 +115,7 @@ "system_id": "discourse", "source_name": "Discourse Release Notes RSS", "source_kind": "rss-feed", - "elapsed_seconds": 1.98, + "elapsed_seconds": 1.879, "kind": "rss-feed", "items_seen": 30 }, @@ -147,7 +123,7 @@ "system_id": "discourse", "source_name": "Discourse Security RSS", "source_kind": "rss-feed", - "elapsed_seconds": 1.46, + "elapsed_seconds": 0.999, "kind": "rss-feed", "items_seen": 3 }, @@ -163,7 +139,7 @@ "system_id": "django", "source_name": "Django Security Releases Archive", "source_kind": "vendor-index", - "elapsed_seconds": 3.725, + "elapsed_seconds": 2.531, "kind": "vendor-index", "items_seen": 1276 }, @@ -171,7 +147,7 @@ "system_id": "django", "source_name": "Django Security Weblog", "source_kind": "vendor-index", - "elapsed_seconds": 3.556, + "elapsed_seconds": 2.433, "kind": "vendor-index", "items_seen": 332 }, @@ -179,7 +155,7 @@ "system_id": "django", "source_name": "OSV Django", "source_kind": "osv-batch", - "elapsed_seconds": 1.776, + "elapsed_seconds": 1.877, "kind": "osv-batch", "items_seen": 1 }, @@ -187,7 +163,7 @@ "system_id": "drupal", "source_name": "Drupal Security Advisories RSS", "source_kind": "rss-feed", - "elapsed_seconds": 0.879, + "elapsed_seconds": 0.829, "kind": "rss-feed", "items_seen": 20 }, @@ -195,7 +171,7 @@ "system_id": "drupal", "source_name": "OSV Drupal", "source_kind": "osv-batch", - "elapsed_seconds": 0.005, + "elapsed_seconds": 0.006, "kind": "osv-batch", "items_seen": 1 }, @@ -203,7 +179,7 @@ "system_id": "echo", "source_name": "OSV Echo", "source_kind": "osv-batch", - "elapsed_seconds": 1.779, + "elapsed_seconds": 1.878, "kind": "osv-batch", "items_seen": 1 }, @@ -211,7 +187,7 @@ "system_id": "esbuild", "source_name": "OSV esbuild", "source_kind": "osv-batch", - "elapsed_seconds": 1.609, + "elapsed_seconds": 1.47, "kind": "osv-batch", "items_seen": 1 }, @@ -219,7 +195,7 @@ "system_id": "express", "source_name": "OSV Express", "source_kind": "osv-batch", - "elapsed_seconds": 1.467, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -227,7 +203,7 @@ "system_id": "fastify", "source_name": "OSV Fastify", "source_kind": "osv-batch", - "elapsed_seconds": 1.469, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -235,7 +211,7 @@ "system_id": "flask", "source_name": "OSV Flask", "source_kind": "osv-batch", - "elapsed_seconds": 1.777, + "elapsed_seconds": 1.877, "kind": "osv-batch", "items_seen": 1 }, @@ -243,7 +219,7 @@ "system_id": "ghost", "source_name": "Ghost GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.088, + "elapsed_seconds": 1.771, "kind": "html-links", "items_seen": 119 }, @@ -251,7 +227,7 @@ "system_id": "ghost", "source_name": "OSV Ghost", "source_kind": "osv-batch", - "elapsed_seconds": 0.003, + "elapsed_seconds": 0.005, "kind": "osv-batch", "items_seen": 1 }, @@ -259,7 +235,7 @@ "system_id": "gin", "source_name": "OSV Gin", "source_kind": "osv-batch", - "elapsed_seconds": 1.779, + "elapsed_seconds": 1.877, "kind": "osv-batch", "items_seen": 1 }, @@ -267,7 +243,7 @@ "system_id": "gitea", "source_name": "GitHub Gitea Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.302, + "elapsed_seconds": 4.003, "kind": "html-links", "items_seen": 98 }, @@ -275,7 +251,7 @@ "system_id": "gitea", "source_name": "OSV Gitea", "source_kind": "osv-batch", - "elapsed_seconds": 3.73, + "elapsed_seconds": 2.628, "kind": "osv-batch", "items_seen": 1 }, @@ -283,7 +259,7 @@ "system_id": "gitlab-ce", "source_name": "GitLab Advisory Database", "source_kind": "html-links", - "elapsed_seconds": 5.215, + "elapsed_seconds": 3.55, "kind": "html-links", "items_seen": 5 }, @@ -291,23 +267,23 @@ "system_id": "gitlab-ce", "source_name": "GitLab Security Releases", "source_kind": "html-links", - "elapsed_seconds": 4.223, + "elapsed_seconds": 3.18, "kind": "html-links", "items_seen": 250 }, { "system_id": "gitlab-ce", - "source_name": "NVD GitLab", - "source_kind": "nvd-search", - "elapsed_seconds": 3.781, - "kind": "nvd-search", - "items_seen": 1 + "source_name": "GitLab Security Releases Atom", + "source_kind": "atom-feed", + "elapsed_seconds": 3.395, + "kind": "atom-feed", + "items_seen": 186 }, { "system_id": "grafana", "source_name": "CISA KEV Grafana", "source_kind": "kev-json", - "elapsed_seconds": 7.489, + "elapsed_seconds": 3.4, "kind": "kev-json", "items_seen": 1545 }, @@ -315,7 +291,7 @@ "system_id": "grafana", "source_name": "Grafana Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 7.393, + "elapsed_seconds": 3.568, "kind": "html-links", "items_seen": 159 }, @@ -323,7 +299,7 @@ "system_id": "hapi", "source_name": "OSV Hapi", "source_kind": "osv-batch", - "elapsed_seconds": 1.469, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -331,39 +307,31 @@ "system_id": "haproxy", "source_name": "HAProxy Blog Feed", "source_kind": "rss-feed", - "elapsed_seconds": 7.734, + "elapsed_seconds": 5.019, "kind": "rss-feed", "items_seen": 10 }, - { - "system_id": "haproxy", - "source_name": "NVD HAProxy", - "source_kind": "nvd-search", - "elapsed_seconds": 3.557, - "kind": "nvd-search", - "items_seen": 1 - }, { "system_id": "jenkins", "source_name": "Jenkins Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.398, + "elapsed_seconds": 4.303, "kind": "html-links", "items_seen": 1194 }, { "system_id": "jenkins", - "source_name": "NVD Jenkins", - "source_kind": "nvd-search", - "elapsed_seconds": 3.824, - "kind": "nvd-search", - "items_seen": 1 + "source_name": "Jenkins Security Advisories RSS", + "source_kind": "rss-feed", + "elapsed_seconds": 3.314, + "kind": "rss-feed", + "items_seen": 96 }, { "system_id": "joomla", "source_name": "Joomla Security Centre", "source_kind": "html-links", - "elapsed_seconds": 1.779, + "elapsed_seconds": 2.302, "kind": "html-links", "items_seen": 139 }, @@ -371,7 +339,7 @@ "system_id": "joomla", "source_name": "OSV Joomla", "source_kind": "osv-batch", - "elapsed_seconds": 0.004, + "elapsed_seconds": 0.006, "kind": "osv-batch", "items_seen": 1 }, @@ -379,23 +347,23 @@ "system_id": "kibana", "source_name": "Elastic Security Announcements", "source_kind": "html-links", - "elapsed_seconds": 7.478, + "elapsed_seconds": 4.005, "kind": "html-links", "items_seen": 71 }, { "system_id": "kibana", - "source_name": "NVD Kibana", - "source_kind": "nvd-search", - "elapsed_seconds": 3.861, - "kind": "nvd-search", - "items_seen": 1 + "source_name": "Elastic Security Announcements RSS", + "source_kind": "rss-feed", + "elapsed_seconds": 4.874, + "kind": "rss-feed", + "items_seen": 25 }, { "system_id": "koa", "source_name": "OSV Koa", "source_kind": "osv-batch", - "elapsed_seconds": 1.468, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -403,7 +371,7 @@ "system_id": "laravel", "source_name": "OSV Laravel", "source_kind": "osv-batch", - "elapsed_seconds": 1.747, + "elapsed_seconds": 1.663, "kind": "osv-batch", "items_seen": 1 }, @@ -411,23 +379,23 @@ "system_id": "magento-open-source", "source_name": "Magento GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 0.72, + "elapsed_seconds": 1.417, "kind": "html-links", "items_seen": 99 }, { "system_id": "magento-open-source", - "source_name": "NVD Magento", - "source_kind": "nvd-search", - "elapsed_seconds": 0.001, - "kind": "nvd-search", + "source_name": "OSV Magento Open Source", + "source_kind": "osv-batch", + "elapsed_seconds": 0.002, + "kind": "osv-batch", "items_seen": 1 }, { "system_id": "magento-open-source", "source_name": "Sansec Research", "source_kind": "html-links", - "elapsed_seconds": 1.768, + "elapsed_seconds": 1.128, "kind": "html-links", "items_seen": 134 }, @@ -435,7 +403,7 @@ "system_id": "mattermost", "source_name": "Mattermost Security Updates JSON", "source_kind": "json-feed", - "elapsed_seconds": 4.854, + "elapsed_seconds": 3.628, "kind": "json-feed", "items_seen": 594 }, @@ -443,7 +411,7 @@ "system_id": "mattermost", "source_name": "OSV Mattermost", "source_kind": "osv-batch", - "elapsed_seconds": 3.9, + "elapsed_seconds": 2.829, "kind": "osv-batch", "items_seen": 1 }, @@ -451,7 +419,7 @@ "system_id": "mediawiki", "source_name": "MediaWiki Announce RSS", "source_kind": "rss-feed", - "elapsed_seconds": 3.139, + "elapsed_seconds": 2.681, "kind": "rss-feed", "items_seen": 30 }, @@ -459,7 +427,7 @@ "system_id": "mediawiki", "source_name": "OSV MediaWiki", "source_kind": "osv-batch", - "elapsed_seconds": 0.002, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -467,7 +435,7 @@ "system_id": "medusa", "source_name": "GitHub Medusa Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.826, + "elapsed_seconds": 2.623, "kind": "html-links", "items_seen": 102 }, @@ -475,7 +443,7 @@ "system_id": "medusa", "source_name": "OSV Medusa", "source_kind": "osv-batch", - "elapsed_seconds": 1.221, + "elapsed_seconds": 1.165, "kind": "osv-batch", "items_seen": 1 }, @@ -483,7 +451,7 @@ "system_id": "moodle", "source_name": "OSV Moodle", "source_kind": "osv-batch", - "elapsed_seconds": 0.002, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -491,7 +459,7 @@ "system_id": "nestjs", "source_name": "OSV NestJS", "source_kind": "osv-batch", - "elapsed_seconds": 1.468, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -499,7 +467,7 @@ "system_id": "nextjs", "source_name": "GitHub Next.js Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.091, + "elapsed_seconds": 2.533, "kind": "html-links", "items_seen": 123 }, @@ -507,7 +475,7 @@ "system_id": "nextjs", "source_name": "OSV Next.js", "source_kind": "osv-batch", - "elapsed_seconds": 1.45, + "elapsed_seconds": 1.235, "kind": "osv-batch", "items_seen": 1 }, @@ -515,7 +483,7 @@ "system_id": "nginx", "source_name": "CISA KEV NGINX", "source_kind": "kev-json", - "elapsed_seconds": 3.861, + "elapsed_seconds": 2.638, "kind": "kev-json", "items_seen": 1545 }, @@ -523,23 +491,15 @@ "system_id": "nginx", "source_name": "NGINX Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.781, + "elapsed_seconds": 2.805, "kind": "html-links", "items_seen": 138 }, - { - "system_id": "nginx", - "source_name": "NVD NGINX", - "source_kind": "nvd-search", - "elapsed_seconds": 1.779, - "kind": "nvd-search", - "items_seen": 1 - }, { "system_id": "nodejs", "source_name": "CISA KEV Node.js", "source_kind": "kev-json", - "elapsed_seconds": 2.801, + "elapsed_seconds": 2.657, "kind": "kev-json", "items_seen": 1545 }, @@ -547,7 +507,7 @@ "system_id": "nodejs", "source_name": "Node.js Security Releases", "source_kind": "html-links", - "elapsed_seconds": 3.901, + "elapsed_seconds": 2.409, "kind": "html-links", "items_seen": 74 }, @@ -555,7 +515,7 @@ "system_id": "nuxt", "source_name": "Nuxt Security", "source_kind": "html-links", - "elapsed_seconds": 3.819, + "elapsed_seconds": 3.025, "kind": "html-links", "items_seen": 118 }, @@ -563,7 +523,7 @@ "system_id": "nuxt", "source_name": "OSV Nuxt", "source_kind": "osv-batch", - "elapsed_seconds": 1.459, + "elapsed_seconds": 1.416, "kind": "osv-batch", "items_seen": 1 }, @@ -571,7 +531,7 @@ "system_id": "opencart", "source_name": "OSV OpenCart", "source_kind": "osv-batch", - "elapsed_seconds": 1.007, + "elapsed_seconds": 1.127, "kind": "osv-batch", "items_seen": 1 }, @@ -579,7 +539,7 @@ "system_id": "opencart", "source_name": "OpenCart Releases", "source_kind": "html-links", - "elapsed_seconds": 1.608, + "elapsed_seconds": 2.819, "kind": "html-links", "items_seen": 1500 }, @@ -595,7 +555,7 @@ "system_id": "openmage", "source_name": "OpenMage GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 0.85, + "elapsed_seconds": 1.487, "kind": "html-links", "items_seen": 125 }, @@ -603,7 +563,7 @@ "system_id": "phpmyadmin", "source_name": "OSV phpMyAdmin", "source_kind": "osv-batch", - "elapsed_seconds": 3.725, + "elapsed_seconds": 2.624, "kind": "osv-batch", "items_seen": 1 }, @@ -611,7 +571,7 @@ "system_id": "phpmyadmin", "source_name": "phpMyAdmin Security Page", "source_kind": "html-links", - "elapsed_seconds": 4.316, + "elapsed_seconds": 3.221, "kind": "html-links", "items_seen": 262 }, @@ -619,7 +579,7 @@ "system_id": "prestashop", "source_name": "Friends Of Presta Security", "source_kind": "html-links", - "elapsed_seconds": 2.101, + "elapsed_seconds": 1.437, "kind": "html-links", "items_seen": 38 }, @@ -627,7 +587,7 @@ "system_id": "prestashop", "source_name": "GitHub PrestaShop Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.467, + "elapsed_seconds": 2.234, "kind": "html-links", "items_seen": 127 }, @@ -635,7 +595,7 @@ "system_id": "prestashop", "source_name": "OSV PrestaShop", "source_kind": "osv-batch", - "elapsed_seconds": 0.931, + "elapsed_seconds": 0.998, "kind": "osv-batch", "items_seen": 1 }, @@ -643,7 +603,7 @@ "system_id": "prestashop", "source_name": "PrestaShop Security Page", "source_kind": "html-links", - "elapsed_seconds": 1.6, + "elapsed_seconds": 1.165, "kind": "html-links", "items_seen": 60 }, @@ -651,7 +611,7 @@ "system_id": "rails", "source_name": "OSV Rails", "source_kind": "osv-batch", - "elapsed_seconds": 1.778, + "elapsed_seconds": 1.877, "kind": "osv-batch", "items_seen": 1 }, @@ -659,7 +619,7 @@ "system_id": "react", "source_name": "GitHub React Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.961, + "elapsed_seconds": 2.956, "kind": "html-links", "items_seen": 110 }, @@ -667,7 +627,7 @@ "system_id": "react", "source_name": "OSV React", "source_kind": "osv-batch", - "elapsed_seconds": 1.449, + "elapsed_seconds": 1.169, "kind": "osv-batch", "items_seen": 1 }, @@ -675,7 +635,7 @@ "system_id": "redmine", "source_name": "OSV Redmine", "source_kind": "osv-batch", - "elapsed_seconds": 3.901, + "elapsed_seconds": 2.829, "kind": "osv-batch", "items_seen": 1 }, @@ -683,7 +643,7 @@ "system_id": "redmine", "source_name": "Redmine Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 6.308, + "elapsed_seconds": 4.282, "kind": "html-links", "items_seen": 371 }, @@ -691,7 +651,7 @@ "system_id": "saleor", "source_name": "GitHub Saleor Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.739, + "elapsed_seconds": 2.954, "kind": "html-links", "items_seen": 120 }, @@ -699,7 +659,7 @@ "system_id": "saleor", "source_name": "OSV Saleor", "source_kind": "osv-batch", - "elapsed_seconds": 1.085, + "elapsed_seconds": 1.134, "kind": "osv-batch", "items_seen": 1 }, @@ -707,7 +667,7 @@ "system_id": "shopware", "source_name": "OSV Shopware", "source_kind": "osv-batch", - "elapsed_seconds": 0.976, + "elapsed_seconds": 1.113, "kind": "osv-batch", "items_seen": 1 }, @@ -715,7 +675,7 @@ "system_id": "shopware", "source_name": "Shopware Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.881, + "elapsed_seconds": 2.628, "kind": "html-links", "items_seen": 129 }, @@ -723,7 +683,7 @@ "system_id": "spring-boot", "source_name": "OSV Spring Boot", "source_kind": "osv-batch", - "elapsed_seconds": 1.747, + "elapsed_seconds": 1.663, "kind": "osv-batch", "items_seen": 1 }, @@ -731,7 +691,7 @@ "system_id": "spring-boot", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.897, + "elapsed_seconds": 2.258, "kind": "html-links", "items_seen": 118 }, @@ -739,7 +699,7 @@ "system_id": "spring-framework", "source_name": "OSV Spring Framework", "source_kind": "osv-batch", - "elapsed_seconds": 1.609, + "elapsed_seconds": 1.486, "kind": "osv-batch", "items_seen": 1 }, @@ -747,7 +707,7 @@ "system_id": "spring-framework", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.034, + "elapsed_seconds": 2.091, "kind": "html-links", "items_seen": 118 }, @@ -755,7 +715,7 @@ "system_id": "spring-security", "source_name": "OSV Spring Security", "source_kind": "osv-batch", - "elapsed_seconds": 1.74, + "elapsed_seconds": 1.523, "kind": "osv-batch", "items_seen": 1 }, @@ -763,7 +723,7 @@ "system_id": "spring-security", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.173, + "elapsed_seconds": 2.304, "kind": "html-links", "items_seen": 118 }, @@ -771,7 +731,7 @@ "system_id": "strapi", "source_name": "OSV Strapi", "source_kind": "osv-batch", - "elapsed_seconds": 0.003, + "elapsed_seconds": 0.005, "kind": "osv-batch", "items_seen": 1 }, @@ -779,7 +739,7 @@ "system_id": "strapi", "source_name": "Strapi GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.47, + "elapsed_seconds": 1.443, "kind": "html-links", "items_seen": 124 }, @@ -787,7 +747,7 @@ "system_id": "sveltekit", "source_name": "OSV SvelteKit", "source_kind": "osv-batch", - "elapsed_seconds": 1.467, + "elapsed_seconds": 1.439, "kind": "osv-batch", "items_seen": 1 }, @@ -795,7 +755,7 @@ "system_id": "symfony", "source_name": "OSV Symfony", "source_kind": "osv-batch", - "elapsed_seconds": 1.747, + "elapsed_seconds": 1.663, "kind": "osv-batch", "items_seen": 1 }, @@ -803,7 +763,7 @@ "system_id": "traefik", "source_name": "GitHub Traefik Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.823, + "elapsed_seconds": 4.008, "kind": "html-links", "items_seen": 124 }, @@ -811,7 +771,7 @@ "system_id": "traefik", "source_name": "OSV Traefik", "source_kind": "osv-batch", - "elapsed_seconds": 3.137, + "elapsed_seconds": 2.532, "kind": "osv-batch", "items_seen": 1 }, @@ -819,7 +779,7 @@ "system_id": "undici", "source_name": "OSV Undici", "source_kind": "osv-batch", - "elapsed_seconds": 1.608, + "elapsed_seconds": 1.47, "kind": "osv-batch", "items_seen": 1 }, @@ -827,7 +787,7 @@ "system_id": "vite", "source_name": "OSV Vite", "source_kind": "osv-batch", - "elapsed_seconds": 1.467, + "elapsed_seconds": 1.437, "kind": "osv-batch", "items_seen": 1 }, @@ -835,7 +795,7 @@ "system_id": "vite", "source_name": "Vite Security", "source_kind": "html-links", - "elapsed_seconds": 3.729, + "elapsed_seconds": 2.822, "kind": "html-links", "items_seen": 124 }, @@ -843,7 +803,7 @@ "system_id": "vue", "source_name": "OSV Vue", "source_kind": "osv-batch", - "elapsed_seconds": 1.456, + "elapsed_seconds": 1.4, "kind": "osv-batch", "items_seen": 1 }, @@ -851,7 +811,7 @@ "system_id": "vue", "source_name": "Vue Security", "source_kind": "html-links", - "elapsed_seconds": 4.584, + "elapsed_seconds": 2.824, "kind": "html-links", "items_seen": 111 }, @@ -859,7 +819,7 @@ "system_id": "webpack", "source_name": "OSV webpack", "source_kind": "osv-batch", - "elapsed_seconds": 1.609, + "elapsed_seconds": 1.47, "kind": "osv-batch", "items_seen": 1 }, @@ -867,7 +827,7 @@ "system_id": "werkzeug", "source_name": "OSV Werkzeug", "source_kind": "osv-batch", - "elapsed_seconds": 1.777, + "elapsed_seconds": 1.877, "kind": "osv-batch", "items_seen": 1 }, @@ -875,7 +835,7 @@ "system_id": "woocommerce", "source_name": "GitHub WooCommerce Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.22, + "elapsed_seconds": 1.663, "kind": "html-links", "items_seen": 107 }, @@ -891,7 +851,7 @@ "system_id": "woocommerce", "source_name": "Patchstack Database", "source_kind": "html-links", - "elapsed_seconds": 1.856, + "elapsed_seconds": 1.169, "kind": "html-links", "items_seen": 193 }, @@ -899,7 +859,7 @@ "system_id": "woocommerce", "source_name": "Woo Developer Advisories", "source_kind": "html-links", - "elapsed_seconds": 0.976, + "elapsed_seconds": 1.235, "kind": "html-links", "items_seen": 121 }, @@ -907,7 +867,7 @@ "system_id": "woocommerce", "source_name": "Wordfence Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 1.445, + "elapsed_seconds": 1.133, "kind": "html-links", "items_seen": 0 }, @@ -915,7 +875,7 @@ "system_id": "wordpress", "source_name": "Patchstack Database", "source_kind": "html-links", - "elapsed_seconds": 1.459, + "elapsed_seconds": 1.099, "kind": "html-links", "items_seen": 193 }, @@ -923,7 +883,7 @@ "system_id": "wordpress", "source_name": "PortSwigger Research", "source_kind": "html-links", - "elapsed_seconds": 1.783, + "elapsed_seconds": 1.117, "kind": "html-links", "items_seen": 99 }, @@ -931,7 +891,7 @@ "system_id": "wordpress", "source_name": "WPScan Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 1.453, + "elapsed_seconds": 1.528, "kind": "html-links", "items_seen": 74 }, @@ -939,7 +899,7 @@ "system_id": "wordpress", "source_name": "WordPress Security News RSS", "source_kind": "rss-feed", - "elapsed_seconds": 1.752, + "elapsed_seconds": 1.405, "kind": "rss-feed", "items_seen": 10 }, @@ -947,7 +907,7 @@ "system_id": "wordpress", "source_name": "Wordfence Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 0.935, + "elapsed_seconds": 0.313, "kind": "html-links", "items_seen": 0 } @@ -958,70 +918,70 @@ "system_id": "haproxy", "source_name": "HAProxy Blog Feed", "source_kind": "rss-feed", - "elapsed_seconds": 7.734, - "status": "ok" - }, - { - "system_id": "grafana", - "source_name": "CISA KEV Grafana", - "source_kind": "kev-json", - "elapsed_seconds": 7.489, + "elapsed_seconds": 5.019, "status": "ok" }, { "system_id": "kibana", - "source_name": "Elastic Security Announcements", - "source_kind": "html-links", - "elapsed_seconds": 7.478, - "status": "ok" - }, - { - "system_id": "grafana", - "source_name": "Grafana Security Advisories", - "source_kind": "html-links", - "elapsed_seconds": 7.393, - "status": "ok" - }, - { - "system_id": "redmine", - "source_name": "Redmine Security Advisories", - "source_kind": "html-links", - "elapsed_seconds": 6.308, - "status": "ok" - }, - { - "system_id": "gitlab-ce", - "source_name": "GitLab Advisory Database", - "source_kind": "html-links", - "elapsed_seconds": 5.215, - "status": "ok" - }, - { - "system_id": "mattermost", - "source_name": "Mattermost Security Updates JSON", - "source_kind": "json-feed", - "elapsed_seconds": 4.854, - "status": "ok" - }, - { - "system_id": "vue", - "source_name": "Vue Security", - "source_kind": "html-links", - "elapsed_seconds": 4.584, + "source_name": "Elastic Security Announcements RSS", + "source_kind": "rss-feed", + "elapsed_seconds": 4.874, "status": "ok" }, { "system_id": "jenkins", "source_name": "Jenkins Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.398, + "elapsed_seconds": 4.303, "status": "ok" }, { - "system_id": "phpmyadmin", - "source_name": "phpMyAdmin Security Page", + "system_id": "redmine", + "source_name": "Redmine Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.316, + "elapsed_seconds": 4.282, + "status": "ok" + }, + { + "system_id": "traefik", + "source_name": "GitHub Traefik Advisories", + "source_kind": "html-links", + "elapsed_seconds": 4.008, + "status": "ok" + }, + { + "system_id": "kibana", + "source_name": "Elastic Security Announcements", + "source_kind": "html-links", + "elapsed_seconds": 4.005, + "status": "ok" + }, + { + "system_id": "gitea", + "source_name": "GitHub Gitea Advisories", + "source_kind": "html-links", + "elapsed_seconds": 4.003, + "status": "ok" + }, + { + "system_id": "caddy", + "source_name": "GitHub Caddy Advisories", + "source_kind": "html-links", + "elapsed_seconds": 3.835, + "status": "ok" + }, + { + "system_id": "mattermost", + "source_name": "Mattermost Security Updates JSON", + "source_kind": "json-feed", + "elapsed_seconds": 3.628, + "status": "ok" + }, + { + "system_id": "grafana", + "source_name": "Grafana Security Advisories", + "source_kind": "html-links", + "elapsed_seconds": 3.568, "status": "ok" } ], @@ -1036,8 +996,8 @@ { "system_id": "adobe-commerce", "display_name": "Adobe Commerce", - "active_source_total": 2, - "green_source_total": 2, + "active_source_total": 1, + "green_source_total": 1, "failure_count": 0 }, { @@ -1050,15 +1010,15 @@ { "system_id": "apache-httpd", "display_name": "Apache HTTP Server", - "active_source_total": 3, - "green_source_total": 3, + "active_source_total": 2, + "green_source_total": 2, "failure_count": 0 }, { "system_id": "apache-tomcat", "display_name": "Apache Tomcat", - "active_source_total": 3, - "green_source_total": 3, + "active_source_total": 2, + "green_source_total": 2, "failure_count": 0 }, { @@ -1190,8 +1150,8 @@ { "system_id": "haproxy", "display_name": "HAProxy", - "active_source_total": 2, - "green_source_total": 2, + "active_source_total": 1, + "green_source_total": 1, "failure_count": 0 }, { @@ -1281,8 +1241,8 @@ { "system_id": "nginx", "display_name": "Nginx", - "active_source_total": 3, - "green_source_total": 3, + "active_source_total": 2, + "green_source_total": 2, "failure_count": 0 }, { diff --git a/08-threat-intel/generated/dashboard/docs/architecture-library.html b/08-threat-intel/generated/dashboard/docs/architecture-library.html index 97efa956..321b708f 100644 --- a/08-threat-intel/generated/dashboard/docs/architecture-library.html +++ b/08-threat-intel/generated/dashboard/docs/architecture-library.html @@ -87,7 +87,7 @@
{
- "generated_at": "2026-03-19T02:54:09+00:00",
+ "generated_at": "2026-03-19T03:38:08+00:00",
"title": "当前架构库",
"summary": "工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。",
"sections": [
@@ -137,7 +137,7 @@
},
{
"label": "生成时间",
- "value": "2026-03-19T02:54:09+00:00"
+ "value": "2026-03-19T03:38:08+00:00"
}
],
"links": [
@@ -1303,7 +1303,7 @@
"open": false,
"badges": [
"近两年全量",
- "官方源 1",
+ "官方源 2",
"生态源 0",
"研究源 0"
],
@@ -1337,7 +1337,7 @@
"fields": [
{
"label": "官方来源",
- "value": "NVD ASP.NET Core"
+ "value": "OSV ASP.NET Core\nNVD ASP.NET Core"
},
{
"label": "生态来源",
@@ -3789,7 +3789,7 @@
"open": false,
"badges": [
"近两年全量",
- "官方源 1",
+ "官方源 2",
"生态源 0",
"研究源 0"
],
@@ -3823,7 +3823,7 @@
"fields": [
{
"label": "官方来源",
- "value": "NVD Adminer"
+ "value": "OSV Adminer\nNVD Adminer"
},
{
"label": "生态来源",
@@ -3874,7 +3874,7 @@
"open": false,
"badges": [
"近两年全量",
- "官方源 2",
+ "官方源 3",
"生态源 1",
"研究源 0"
],
@@ -3908,7 +3908,7 @@
"fields": [
{
"label": "官方来源",
- "value": "GitLab Security Releases\nNVD GitLab"
+ "value": "GitLab Security Releases\nGitLab Security Releases Atom\nNVD GitLab"
},
{
"label": "生态来源",
@@ -4129,7 +4129,7 @@
"open": false,
"badges": [
"近两年全量",
- "官方源 2",
+ "官方源 3",
"生态源 0",
"研究源 0"
],
@@ -4163,7 +4163,7 @@
"fields": [
{
"label": "官方来源",
- "value": "Jenkins Security Advisories\nNVD Jenkins"
+ "value": "Jenkins Security Advisories\nJenkins Security Advisories RSS\nNVD Jenkins"
},
{
"label": "生态来源",
@@ -4214,7 +4214,7 @@
"open": false,
"badges": [
"近两年全量",
- "官方源 2",
+ "官方源 3",
"生态源 0",
"研究源 0"
],
@@ -4248,7 +4248,7 @@
"fields": [
{
"label": "官方来源",
- "value": "Elastic Security Announcements\nNVD Kibana"
+ "value": "Elastic Security Announcements\nElastic Security Announcements RSS\nNVD Kibana"
},
{
"label": "生态来源",
@@ -5191,7 +5191,7 @@
"open": false,
"badges": [
"历史全量",
- "官方源 2",
+ "官方源 3",
"生态源 1",
"研究源 0"
],
@@ -5225,7 +5225,7 @@
"fields": [
{
"label": "官方来源",
- "value": "Magento GitHub Advisories\nNVD Magento"
+ "value": "Magento GitHub Advisories\nOSV Magento Open Source\nNVD Magento"
},
{
"label": "生态来源",
diff --git a/08-threat-intel/generated/dashboard/docs/retired-sources.html b/08-threat-intel/generated/dashboard/docs/retired-sources.html
index 02c1f991..71c5ff46 100644
--- a/08-threat-intel/generated/dashboard/docs/retired-sources.html
+++ b/08-threat-intel/generated/dashboard/docs/retired-sources.html
@@ -87,6 +87,18 @@
Retired Sources & Replacement Map
[
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "source_name": "NVD Adminer",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.",
+ "replacement_sources": [
+ "OSV Adminer"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -114,6 +126,18 @@
],
"url": ""
},
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "NVD Adobe Commerce",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -139,6 +163,44 @@
],
"url": ""
},
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "source_name": "NVD Apache HTTP Server",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "source_name": "NVD Tomcat",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "source_name": "NVD ASP.NET Core",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ],
+ "url": ""
+ },
{
"system_id": "astro",
"display_name": "Astro",
@@ -288,6 +350,19 @@
],
"url": ""
},
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "source_name": "NVD GitLab",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ],
+ "url": ""
+ },
{
"system_id": "hapi",
"display_name": "Hapi",
@@ -312,6 +387,31 @@
],
"url": "https://www.haproxy.org/security/"
},
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "source_name": "NVD HAProxy",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "source_name": "NVD Jenkins",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "joomla",
"display_name": "Joomla",
@@ -325,6 +425,19 @@
],
"url": ""
},
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "source_name": "NVD Kibana",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "koa",
"display_name": "Koa",
@@ -349,6 +462,19 @@
],
"url": ""
},
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "source_name": "NVD Magento",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ],
+ "url": ""
+ },
{
"system_id": "mattermost",
"display_name": "Mattermost",
@@ -461,6 +587,19 @@
],
"url": ""
},
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "source_name": "NVD NGINX",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ],
+ "url": ""
+ },
{
"system_id": "nuxt",
"display_name": "Nuxt",
diff --git a/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html b/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
index 0a8cec03..21ec5c18 100644
--- a/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
+++ b/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
@@ -88,20 +88,25 @@
# Source Catalog Audit
-- generated_at: `2026-03-19T02:53:49+00:00`
+- generated_at: `2026-03-19T03:37:56+00:00`
- systems: `62`
-- sources: `173`
-- active_sources: `118`
-- retired_sources: `55`
+- sources: `179`
+- active_sources: `113`
+- retired_sources: `66`
- systems_with_active_official: `61/62`
-- systems_with_machine_readable_source: `62/62`
+- systems_with_machine_readable_source: `61/62`
## Retired Sources
+- `adminer` `NVD Adminer` -> replacements: `OSV Adminer` | reason: OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.
- `adobe-commerce` `Adobe Security Bulletins` -> replacements: `Adobe Magento Security Index, NVD Adobe Commerce, GHSA Adobe Commerce` | reason: Original bulletin index probe was unstable under the old transport path; vendor index replacement uses explicit request policy and parser hints.
- `adobe-commerce` `GHSA Adobe Commerce` -> replacements: `Adobe Magento Security Index, NVD Adobe Commerce` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Adobe index and NVD remain active replacements.
+- `adobe-commerce` `NVD Adobe Commerce` -> replacements: `Adobe Magento Security Index` | reason: Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.
- `adobe-commerce` `Sansec Research` -> replacements: `GHSA Adobe Commerce, Adobe Magento Security Index` | reason: Research index is too slow for daily active monitoring; GHSA Adobe Commerce provides a stable machine-readable replacement.
- `angular` `GitHub Global Advisories` -> replacements: `OSV Angular` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Angular remains the active replacement source.
+- `apache-httpd` `NVD Apache HTTP Server` -> replacements: `Apache HTTPD Security, CISA KEV Apache HTTPD` | reason: Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+- `apache-tomcat` `NVD Tomcat` -> replacements: `Apache Tomcat Security, CISA KEV Tomcat` | reason: Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+- `aspnet-core` `NVD ASP.NET Core` -> replacements: `OSV ASP.NET Core` | reason: OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.
- `astro` `GitHub Global Advisories` -> replacements: `OSV Astro` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Astro remains the active replacement source.
- `discourse` `Discourse Meta Security` -> replacements: `Discourse Release Notes RSS, GitHub Discourse Advisories` | reason: Meta security category HTML changed and no longer provides stable scrape semantics for health checks.
- `discourse` `GitHub Discourse Advisories` -> replacements: `Discourse Release Notes RSS, Discourse Security RSS` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Discourse release feed remains the active official source.
@@ -114,11 +119,16 @@
- `fastify` `GitHub Global Advisories` -> replacements: `OSV Fastify` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Fastify remains the active replacement source.
- `flask` `GitHub Global Advisories` -> replacements: `OSV Flask` | reason: Unauthenticated GitHub advisory API is quota-limited; OSV Flask remains the active machine-readable source.
- `ghost` `NVD Ghost` -> replacements: `Ghost GitHub Advisories, OSV Ghost` | reason: OSV Ghost replaces NVD for machine-readable collection and keeps npm package alignment.
+- `gitlab-ce` `NVD GitLab` -> replacements: `GitLab Security Releases, GitLab Security Releases Atom` | reason: GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.
- `hapi` `GitHub Global Advisories` -> replacements: `OSV Hapi` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Hapi remains the active replacement source.
- `haproxy` `HAProxy Security Advisories` -> replacements: `HAProxy Blog Feed` | reason: Legacy haproxy.org security page no longer yields stable scrape results for monitoring.
+- `haproxy` `NVD HAProxy` -> replacements: `HAProxy Blog Feed` | reason: HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.
+- `jenkins` `NVD Jenkins` -> replacements: `Jenkins Security Advisories, Jenkins Security Advisories RSS` | reason: Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.
- `joomla` `NVD Joomla` -> replacements: `Joomla Security Centre, OSV Joomla` | reason: OSV Joomla CMS replaces NVD for machine-readable collection without public NVD throttling.
+- `kibana` `NVD Kibana` -> replacements: `Elastic Security Announcements, Elastic Security Announcements RSS` | reason: Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.
- `koa` `GitHub Global Advisories` -> replacements: `OSV Koa` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Koa remains the active replacement source.
- `laravel` `GitHub Global Advisories` -> replacements: `OSV Laravel` | reason: Unauthenticated GitHub advisory API is quota-limited; OSV Laravel remains the active machine-readable source.
+- `magento-open-source` `NVD Magento` -> replacements: `Magento GitHub Advisories, OSV Magento Open Source` | reason: OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.
- `mattermost` `Mattermost Security Updates` -> replacements: `NVD Mattermost` | reason: Mattermost security updates page returned repeated 403 responses from the collector path; NVD replacement remains active.
- `mattermost` `NVD Mattermost` -> replacements: `Mattermost Security Updates JSON, OSV Mattermost` | reason: Mattermost official JSON feed plus OSV Mattermost replace NVD for lower-latency machine-readable collection.
- `mediawiki` `MediaWiki Security Releases` -> replacements: `MediaWiki Announce RSS, NVD MediaWiki` | reason: MediaWiki security page is no longer reachable reliably from the collector path; NVD replacement remains active.
@@ -128,6 +138,7 @@
- `nestjs` `GitHub Global Advisories` -> replacements: `OSV NestJS` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV NestJS remains the active replacement source.
- `nestjs` `NVD NestJS` -> replacements: `OSV NestJS` | reason: OSV NestJS replaces NVD public search for lower-latency machine-readable collection.
- `nextjs` `GitHub Global Advisories` -> replacements: `GitHub Next.js Advisories, OSV Next.js` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub Next.js Advisories and OSV Next.js remain active replacements.
+- `nginx` `NVD NGINX` -> replacements: `NGINX Security Advisories, CISA KEV NGINX` | reason: Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.
- `nuxt` `GitHub Global Advisories` -> replacements: `Nuxt Security, OSV Nuxt` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Nuxt Security and OSV Nuxt remain active replacements.
- `opencart` `NVD OpenCart` -> replacements: `OpenCart Releases, OSV OpenCart` | reason: OSV OpenCart replaces NVD for machine-readable collection while official release source remains active.
- `openmage` `NVD OpenMage` -> replacements: `OpenMage GitHub Advisories, OSV OpenMage` | reason: OSV OpenMage replaces NVD for machine-readable composer-aligned collection.
diff --git a/08-threat-intel/generated/dashboard/docs/source-map.html b/08-threat-intel/generated/dashboard/docs/source-map.html
index 0bb2a8ce..657016d6 100644
--- a/08-threat-intel/generated/dashboard/docs/source-map.html
+++ b/08-threat-intel/generated/dashboard/docs/source-map.html
@@ -544,6 +544,9 @@ systems:
confidence: official
advisory_mode: core
results_per_page: 50
+ status: retired
+ retired_reason: Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.
+ replacement_sources: [Adobe Magento Security Index]
ecosystem_sources:
- name: GHSA Adobe Commerce
kind: ghsa-global
@@ -591,12 +594,19 @@ systems:
advisory_mode: core
keywords: [magento]
max_items: 50
+ - name: OSV Magento Open Source
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD Magento
kind: nvd-search
keyword: Magento
confidence: official
advisory_mode: core
results_per_page: 50
+ status: retired
+ retired_reason: OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.
+ replacement_sources: [Magento GitHub Advisories, OSV Magento Open Source]
ecosystem_sources:
- name: Sansec Research
kind: html-links
@@ -607,9 +617,9 @@ systems:
max_items: 50
research_sources: []
package_names:
- - ecosystem: composer
+ - ecosystem: Packagist
name: magento/product-community-edition
- - ecosystem: composer
+ - ecosystem: Packagist
name: magento/framework
cpe_keys: ["magento:magento"]
ghsa_keywords: [magento]
@@ -1900,15 +1910,24 @@ systems:
tier: rolling-24m
advisory_modes: [core]
official_sources:
+ - name: OSV ASP.NET Core
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD ASP.NET Core
kind: nvd-search
keyword: ASP.NET Core
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.
+ replacement_sources: [OSV ASP.NET Core]
ecosystem_sources: []
research_sources: []
- package_names: []
+ package_names:
+ - ecosystem: NuGet
+ name: Microsoft.AspNetCore.App
cpe_keys: ["microsoft:asp.net_core"]
ghsa_keywords: [asp.net core]
kev_keywords: [asp.net core]
@@ -1982,6 +2001,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.
+ replacement_sources: [NGINX Security Advisories, CISA KEV NGINX]
- name: CISA KEV NGINX
kind: kev-json
url: https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
@@ -2024,6 +2046,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+ replacement_sources: [Apache HTTPD Security, CISA KEV Apache HTTPD]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2060,6 +2085,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+ replacement_sources: [Apache Tomcat Security, CISA KEV Tomcat]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2160,6 +2188,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 40
+ status: retired
+ retired_reason: HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.
+ replacement_sources: [HAProxy Blog Feed]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2216,15 +2247,24 @@ systems:
tier: rolling-24m
advisory_modes: [core]
official_sources:
+ - name: OSV Adminer
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD Adminer
kind: nvd-search
keyword: Adminer
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.
+ replacement_sources: [OSV Adminer]
ecosystem_sources: []
research_sources: []
- package_names: []
+ package_names:
+ - ecosystem: Packagist
+ name: vrana/adminer
cpe_keys: ["adminer:adminer"]
ghsa_keywords: [adminer]
kev_keywords: [adminer]
@@ -2276,12 +2316,22 @@ systems:
advisory_mode: core
keywords: [security release, gitlab]
max_items: 50
+ - name: GitLab Security Releases Atom
+ kind: atom-feed
+ url: https://about.gitlab.com/security-releases.xml
+ confidence: official
+ advisory_mode: core
+ keywords: [security release, gitlab]
+ max_items: 50
- name: NVD GitLab
kind: nvd-search
keyword: GitLab CE
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.
+ replacement_sources: [GitLab Security Releases, GitLab Security Releases Atom]
ecosystem_sources:
- name: GitLab Advisory Database
kind: html-links
@@ -2313,12 +2363,22 @@ systems:
advisory_mode: core
keywords: [jenkins]
max_items: 60
+ - name: Jenkins Security Advisories RSS
+ kind: rss-feed
+ url: https://www.jenkins.io/security/advisories/rss.xml
+ confidence: official
+ advisory_mode: core
+ keywords: [jenkins]
+ max_items: 60
- name: NVD Jenkins
kind: nvd-search
keyword: Jenkins
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.
+ replacement_sources: [Jenkins Security Advisories, Jenkins Security Advisories RSS]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2374,12 +2434,22 @@ systems:
advisory_mode: core
keywords: [kibana, elastic, security]
max_items: 60
+ - name: Elastic Security Announcements RSS
+ kind: rss-feed
+ url: https://discuss.elastic.co/c/announcements/security-announcements/31.rss
+ confidence: official
+ advisory_mode: core
+ keywords: [kibana, elastic, security]
+ max_items: 60
- name: NVD Kibana
kind: nvd-search
keyword: Kibana
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.
+ replacement_sources: [Elastic Security Announcements, Elastic Security Announcements RSS]
ecosystem_sources: []
research_sources: []
package_names: []
diff --git a/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html b/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
index 5dec1f26..e5434971 100644
--- a/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
+++ b/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
@@ -88,15 +88,15 @@
# 全库 Advisory 完整度报告
-- 生成时间: `2026-03-19T02:54:09+00:00`
+- 生成时间: `2026-03-19T03:38:08+00:00`
- 最新 advisory 完整度: `89/89` `verified-real`
- 合成验证数量: `0`
- 阻塞数量: `0`
- 人工/待补证据数量: `0`
- 完整度百分比: `100.0%`
-- active source 全绿: `118/118`
+- active source 全绿: `113/113`
- source open alerts: `0`
-- 最近一次 source 全绿: `2026-03-19T02:53:57+00:00`
+- 最近一次 source 全绿: `2026-03-19T03:38:01+00:00`
## 系统覆盖矩阵
@@ -118,8 +118,8 @@
## Ingest / Source 健康度
- source failures: `0`
-- active sources: `118`
-- green sources: `118`
+- active sources: `113`
+- green sources: `113`
- open alerts: `0`
## 剩余风险说明
diff --git a/08-threat-intel/generated/dashboard/summary.json b/08-threat-intel/generated/dashboard/summary.json
index d8e2edce..68dd6957 100644
--- a/08-threat-intel/generated/dashboard/summary.json
+++ b/08-threat-intel/generated/dashboard/summary.json
@@ -1,5 +1,5 @@
{
- "generated_at": "2026-03-19T02:54:09+00:00",
+ "generated_at": "2026-03-19T03:38:08+00:00",
"advisory_count": 2392,
"run_count": 140,
"statuses": {
@@ -154,11 +154,11 @@
}
],
"monitoring": {
- "active_source_count": 118,
- "green_source_count": 118,
+ "active_source_count": 113,
+ "green_source_count": 113,
"source_failure_count": 0,
"open_alert_count": 0,
- "last_fully_green_run": "2026-03-19T02:53:57+00:00"
+ "last_fully_green_run": "2026-03-19T03:38:01+00:00"
},
"systems": [
{
@@ -1969,7 +1969,7 @@
"verified_ratio": 100.0,
"complete": true,
"source_failure_count": 0,
- "active_source_count": 118,
+ "active_source_count": 113,
"open_alert_count": 0
}
}
diff --git a/08-threat-intel/generated/latest-ingest.md b/08-threat-intel/generated/latest-ingest.md
index 259e3886..90affd1b 100644
--- a/08-threat-intel/generated/latest-ingest.md
+++ b/08-threat-intel/generated/latest-ingest.md
@@ -1,6 +1,6 @@
# 最新同步摘要
-- 渲染时间: `2026-03-19T02:54:09+00:00`
+- 渲染时间: `2026-03-19T03:38:08+00:00`
- 系统数量: `62`
- Advisory 数量: `2348`
- 重点 Markdown 数量: `156`
diff --git a/08-threat-intel/generated/monitor-summary.json b/08-threat-intel/generated/monitor-summary.json
index b817c31a..916f878e 100644
--- a/08-threat-intel/generated/monitor-summary.json
+++ b/08-threat-intel/generated/monitor-summary.json
@@ -1,15 +1,15 @@
{
- "generated_at": "2026-03-19T02:53:57+00:00",
- "active_source_count": 118,
- "green_source_count": 118,
+ "generated_at": "2026-03-19T03:38:01+00:00",
+ "active_source_count": 113,
+ "green_source_count": 113,
"source_failure_count": 0,
"open_alert_count": 0,
"resolved_alert_count": 4,
- "last_fully_green_run": "2026-03-19T02:53:57+00:00",
+ "last_fully_green_run": "2026-03-19T03:38:01+00:00",
"source_catalog": {
"system_count": 62,
- "source_count": 173,
- "retired_source_count": 55
+ "source_count": 179,
+ "retired_source_count": 66
},
"ingest": {
"new_count": 0,
diff --git a/08-threat-intel/generated/retired-sources.json b/08-threat-intel/generated/retired-sources.json
index 4271bc25..ca4c90f5 100644
--- a/08-threat-intel/generated/retired-sources.json
+++ b/08-threat-intel/generated/retired-sources.json
@@ -1,4 +1,16 @@
[
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "source_name": "NVD Adminer",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.",
+ "replacement_sources": [
+ "OSV Adminer"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -26,6 +38,18 @@
],
"url": ""
},
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "NVD Adobe Commerce",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -51,6 +75,44 @@
],
"url": ""
},
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "source_name": "NVD Apache HTTP Server",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "source_name": "NVD Tomcat",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "source_name": "NVD ASP.NET Core",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ],
+ "url": ""
+ },
{
"system_id": "astro",
"display_name": "Astro",
@@ -200,6 +262,19 @@
],
"url": ""
},
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "source_name": "NVD GitLab",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ],
+ "url": ""
+ },
{
"system_id": "hapi",
"display_name": "Hapi",
@@ -224,6 +299,31 @@
],
"url": "https://www.haproxy.org/security/"
},
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "source_name": "NVD HAProxy",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "source_name": "NVD Jenkins",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "joomla",
"display_name": "Joomla",
@@ -237,6 +337,19 @@
],
"url": ""
},
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "source_name": "NVD Kibana",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "koa",
"display_name": "Koa",
@@ -261,6 +374,19 @@
],
"url": ""
},
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "source_name": "NVD Magento",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ],
+ "url": ""
+ },
{
"system_id": "mattermost",
"display_name": "Mattermost",
@@ -373,6 +499,19 @@
],
"url": ""
},
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "source_name": "NVD NGINX",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ],
+ "url": ""
+ },
{
"system_id": "nuxt",
"display_name": "Nuxt",
diff --git a/08-threat-intel/generated/run-summary.json b/08-threat-intel/generated/run-summary.json
index 22dbe53b..c8e8298f 100644
--- a/08-threat-intel/generated/run-summary.json
+++ b/08-threat-intel/generated/run-summary.json
@@ -1,5 +1,5 @@
{
- "generated_at": "2026-03-19T02:54:09+00:00",
+ "generated_at": "2026-03-19T03:38:08+00:00",
"system_count": 62,
"advisory_count": 2348,
"markdown_count": 156,
diff --git a/08-threat-intel/generated/source-catalog-audit.json b/08-threat-intel/generated/source-catalog-audit.json
index b6a72666..df8ed15f 100644
--- a/08-threat-intel/generated/source-catalog-audit.json
+++ b/08-threat-intel/generated/source-catalog-audit.json
@@ -1,20 +1,20 @@
{
- "generated_at": "2026-03-19T02:53:49+00:00",
+ "generated_at": "2026-03-19T03:37:56+00:00",
"system_count": 62,
- "source_count": 173,
- "active_source_count": 118,
- "retired_source_count": 55,
+ "source_count": 179,
+ "active_source_count": 113,
+ "retired_source_count": 66,
"systems_with_active_official": 61,
- "systems_with_machine_readable_source": 62,
+ "systems_with_machine_readable_source": 61,
"systems": [
{
"system_id": "adminer",
"display_name": "Adminer",
"category": "platforms",
"tier": "rolling-24m",
- "source_total": 1,
+ "source_total": 2,
"active_source_total": 1,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 1,
"ecosystem_active": 0,
"research_active": 0,
@@ -28,14 +28,14 @@
"category": "ecommerce",
"tier": "history-full",
"source_total": 5,
- "active_source_total": 2,
- "retired_source_total": 3,
- "official_active": 2,
+ "active_source_total": 1,
+ "retired_source_total": 4,
+ "official_active": 1,
"ecosystem_active": 0,
"research_active": 0,
- "machine_readable_active": 1,
+ "machine_readable_active": 0,
"has_active_official": true,
- "has_machine_readable_source": true
+ "has_machine_readable_source": false
},
{
"system_id": "angular",
@@ -58,12 +58,12 @@
"category": "servers",
"tier": "history-full",
"source_total": 3,
- "active_source_total": 3,
- "retired_source_total": 0,
- "official_active": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
"ecosystem_active": 0,
"research_active": 0,
- "machine_readable_active": 2,
+ "machine_readable_active": 1,
"has_active_official": true,
"has_machine_readable_source": true
},
@@ -73,12 +73,12 @@
"category": "servers",
"tier": "history-full",
"source_total": 3,
- "active_source_total": 3,
- "retired_source_total": 0,
- "official_active": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
"ecosystem_active": 0,
"research_active": 0,
- "machine_readable_active": 2,
+ "machine_readable_active": 1,
"has_active_official": true,
"has_machine_readable_source": true
},
@@ -87,9 +87,9 @@
"display_name": "ASP.NET Core",
"category": "frameworks",
"tier": "rolling-24m",
- "source_total": 1,
+ "source_total": 2,
"active_source_total": 1,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 1,
"ecosystem_active": 0,
"research_active": 0,
@@ -312,9 +312,9 @@
"display_name": "GitLab CE",
"category": "platforms",
"tier": "rolling-24m",
- "source_total": 3,
+ "source_total": 4,
"active_source_total": 3,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 2,
"ecosystem_active": 1,
"research_active": 0,
@@ -358,12 +358,12 @@
"category": "servers",
"tier": "rolling-24m",
"source_total": 3,
- "active_source_total": 2,
- "retired_source_total": 1,
- "official_active": 2,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
"ecosystem_active": 0,
"research_active": 0,
- "machine_readable_active": 2,
+ "machine_readable_active": 1,
"has_active_official": true,
"has_machine_readable_source": true
},
@@ -372,9 +372,9 @@
"display_name": "Jenkins",
"category": "platforms",
"tier": "rolling-24m",
- "source_total": 2,
+ "source_total": 3,
"active_source_total": 2,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 2,
"ecosystem_active": 0,
"research_active": 0,
@@ -402,9 +402,9 @@
"display_name": "Kibana",
"category": "platforms",
"tier": "rolling-24m",
- "source_total": 2,
+ "source_total": 3,
"active_source_total": 2,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 2,
"ecosystem_active": 0,
"research_active": 0,
@@ -447,9 +447,9 @@
"display_name": "Magento Open Source",
"category": "ecommerce",
"tier": "history-full",
- "source_total": 3,
+ "source_total": 4,
"active_source_total": 3,
- "retired_source_total": 0,
+ "retired_source_total": 1,
"official_active": 2,
"ecosystem_active": 1,
"research_active": 0,
@@ -553,12 +553,12 @@
"category": "servers",
"tier": "history-full",
"source_total": 3,
- "active_source_total": 3,
- "retired_source_total": 0,
- "official_active": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
"ecosystem_active": 0,
"research_active": 0,
- "machine_readable_active": 2,
+ "machine_readable_active": 1,
"has_active_official": true,
"has_machine_readable_source": true
},
@@ -939,6 +939,18 @@
}
],
"retired_sources": [
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "source_name": "NVD Adminer",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.",
+ "replacement_sources": [
+ "OSV Adminer"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -966,6 +978,18 @@
],
"url": ""
},
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "NVD Adobe Commerce",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ],
+ "url": ""
+ },
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
@@ -991,6 +1015,44 @@
],
"url": ""
},
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "source_name": "NVD Apache HTTP Server",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "source_name": "NVD Tomcat",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "source_name": "NVD ASP.NET Core",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ],
+ "url": ""
+ },
{
"system_id": "astro",
"display_name": "Astro",
@@ -1140,6 +1202,19 @@
],
"url": ""
},
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "source_name": "NVD GitLab",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ],
+ "url": ""
+ },
{
"system_id": "hapi",
"display_name": "Hapi",
@@ -1164,6 +1239,31 @@
],
"url": "https://www.haproxy.org/security/"
},
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "source_name": "NVD HAProxy",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "source_name": "NVD Jenkins",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "joomla",
"display_name": "Joomla",
@@ -1177,6 +1277,19 @@
],
"url": ""
},
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "source_name": "NVD Kibana",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ],
+ "url": ""
+ },
{
"system_id": "koa",
"display_name": "Koa",
@@ -1201,6 +1314,19 @@
],
"url": ""
},
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "source_name": "NVD Magento",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ],
+ "url": ""
+ },
{
"system_id": "mattermost",
"display_name": "Mattermost",
@@ -1313,6 +1439,19 @@
],
"url": ""
},
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "source_name": "NVD NGINX",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ],
+ "url": ""
+ },
{
"system_id": "nuxt",
"display_name": "Nuxt",
@@ -1633,6 +1772,13 @@
}
],
"replacement_map": [
+ {
+ "system_id": "adminer",
+ "retired_source": "NVD Adminer",
+ "replacement_sources": [
+ "OSV Adminer"
+ ]
+ },
{
"system_id": "adobe-commerce",
"retired_source": "Adobe Security Bulletins",
@@ -1650,6 +1796,13 @@
"NVD Adobe Commerce"
]
},
+ {
+ "system_id": "adobe-commerce",
+ "retired_source": "NVD Adobe Commerce",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ]
+ },
{
"system_id": "adobe-commerce",
"retired_source": "Sansec Research",
@@ -1665,6 +1818,29 @@
"OSV Angular"
]
},
+ {
+ "system_id": "apache-httpd",
+ "retired_source": "NVD Apache HTTP Server",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ]
+ },
+ {
+ "system_id": "apache-tomcat",
+ "retired_source": "NVD Tomcat",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ]
+ },
+ {
+ "system_id": "aspnet-core",
+ "retired_source": "NVD ASP.NET Core",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ]
+ },
{
"system_id": "astro",
"retired_source": "GitHub Global Advisories",
@@ -1754,6 +1930,14 @@
"OSV Ghost"
]
},
+ {
+ "system_id": "gitlab-ce",
+ "retired_source": "NVD GitLab",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ]
+ },
{
"system_id": "hapi",
"retired_source": "GitHub Global Advisories",
@@ -1768,6 +1952,21 @@
"HAProxy Blog Feed"
]
},
+ {
+ "system_id": "haproxy",
+ "retired_source": "NVD HAProxy",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ]
+ },
+ {
+ "system_id": "jenkins",
+ "retired_source": "NVD Jenkins",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ]
+ },
{
"system_id": "joomla",
"retired_source": "NVD Joomla",
@@ -1776,6 +1975,14 @@
"OSV Joomla"
]
},
+ {
+ "system_id": "kibana",
+ "retired_source": "NVD Kibana",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ]
+ },
{
"system_id": "koa",
"retired_source": "GitHub Global Advisories",
@@ -1790,6 +1997,14 @@
"OSV Laravel"
]
},
+ {
+ "system_id": "magento-open-source",
+ "retired_source": "NVD Magento",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ]
+ },
{
"system_id": "mattermost",
"retired_source": "Mattermost Security Updates",
@@ -1857,6 +2072,14 @@
"OSV Next.js"
]
},
+ {
+ "system_id": "nginx",
+ "retired_source": "NVD NGINX",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ]
+ },
{
"system_id": "nuxt",
"retired_source": "GitHub Global Advisories",
diff --git a/08-threat-intel/generated/source-catalog-audit.md b/08-threat-intel/generated/source-catalog-audit.md
index abcdab5a..528199cd 100644
--- a/08-threat-intel/generated/source-catalog-audit.md
+++ b/08-threat-intel/generated/source-catalog-audit.md
@@ -1,19 +1,24 @@
# Source Catalog Audit
-- generated_at: `2026-03-19T02:53:49+00:00`
+- generated_at: `2026-03-19T03:37:56+00:00`
- systems: `62`
-- sources: `173`
-- active_sources: `118`
-- retired_sources: `55`
+- sources: `179`
+- active_sources: `113`
+- retired_sources: `66`
- systems_with_active_official: `61/62`
-- systems_with_machine_readable_source: `62/62`
+- systems_with_machine_readable_source: `61/62`
## Retired Sources
+- `adminer` `NVD Adminer` -> replacements: `OSV Adminer` | reason: OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.
- `adobe-commerce` `Adobe Security Bulletins` -> replacements: `Adobe Magento Security Index, NVD Adobe Commerce, GHSA Adobe Commerce` | reason: Original bulletin index probe was unstable under the old transport path; vendor index replacement uses explicit request policy and parser hints.
- `adobe-commerce` `GHSA Adobe Commerce` -> replacements: `Adobe Magento Security Index, NVD Adobe Commerce` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Adobe index and NVD remain active replacements.
+- `adobe-commerce` `NVD Adobe Commerce` -> replacements: `Adobe Magento Security Index` | reason: Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.
- `adobe-commerce` `Sansec Research` -> replacements: `GHSA Adobe Commerce, Adobe Magento Security Index` | reason: Research index is too slow for daily active monitoring; GHSA Adobe Commerce provides a stable machine-readable replacement.
- `angular` `GitHub Global Advisories` -> replacements: `OSV Angular` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Angular remains the active replacement source.
+- `apache-httpd` `NVD Apache HTTP Server` -> replacements: `Apache HTTPD Security, CISA KEV Apache HTTPD` | reason: Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+- `apache-tomcat` `NVD Tomcat` -> replacements: `Apache Tomcat Security, CISA KEV Tomcat` | reason: Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+- `aspnet-core` `NVD ASP.NET Core` -> replacements: `OSV ASP.NET Core` | reason: OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.
- `astro` `GitHub Global Advisories` -> replacements: `OSV Astro` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Astro remains the active replacement source.
- `discourse` `Discourse Meta Security` -> replacements: `Discourse Release Notes RSS, GitHub Discourse Advisories` | reason: Meta security category HTML changed and no longer provides stable scrape semantics for health checks.
- `discourse` `GitHub Discourse Advisories` -> replacements: `Discourse Release Notes RSS, Discourse Security RSS` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Discourse release feed remains the active official source.
@@ -26,11 +31,16 @@
- `fastify` `GitHub Global Advisories` -> replacements: `OSV Fastify` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Fastify remains the active replacement source.
- `flask` `GitHub Global Advisories` -> replacements: `OSV Flask` | reason: Unauthenticated GitHub advisory API is quota-limited; OSV Flask remains the active machine-readable source.
- `ghost` `NVD Ghost` -> replacements: `Ghost GitHub Advisories, OSV Ghost` | reason: OSV Ghost replaces NVD for machine-readable collection and keeps npm package alignment.
+- `gitlab-ce` `NVD GitLab` -> replacements: `GitLab Security Releases, GitLab Security Releases Atom` | reason: GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.
- `hapi` `GitHub Global Advisories` -> replacements: `OSV Hapi` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Hapi remains the active replacement source.
- `haproxy` `HAProxy Security Advisories` -> replacements: `HAProxy Blog Feed` | reason: Legacy haproxy.org security page no longer yields stable scrape results for monitoring.
+- `haproxy` `NVD HAProxy` -> replacements: `HAProxy Blog Feed` | reason: HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.
+- `jenkins` `NVD Jenkins` -> replacements: `Jenkins Security Advisories, Jenkins Security Advisories RSS` | reason: Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.
- `joomla` `NVD Joomla` -> replacements: `Joomla Security Centre, OSV Joomla` | reason: OSV Joomla CMS replaces NVD for machine-readable collection without public NVD throttling.
+- `kibana` `NVD Kibana` -> replacements: `Elastic Security Announcements, Elastic Security Announcements RSS` | reason: Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.
- `koa` `GitHub Global Advisories` -> replacements: `OSV Koa` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Koa remains the active replacement source.
- `laravel` `GitHub Global Advisories` -> replacements: `OSV Laravel` | reason: Unauthenticated GitHub advisory API is quota-limited; OSV Laravel remains the active machine-readable source.
+- `magento-open-source` `NVD Magento` -> replacements: `Magento GitHub Advisories, OSV Magento Open Source` | reason: OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.
- `mattermost` `Mattermost Security Updates` -> replacements: `NVD Mattermost` | reason: Mattermost security updates page returned repeated 403 responses from the collector path; NVD replacement remains active.
- `mattermost` `NVD Mattermost` -> replacements: `Mattermost Security Updates JSON, OSV Mattermost` | reason: Mattermost official JSON feed plus OSV Mattermost replace NVD for lower-latency machine-readable collection.
- `mediawiki` `MediaWiki Security Releases` -> replacements: `MediaWiki Announce RSS, NVD MediaWiki` | reason: MediaWiki security page is no longer reachable reliably from the collector path; NVD replacement remains active.
@@ -40,6 +50,7 @@
- `nestjs` `GitHub Global Advisories` -> replacements: `OSV NestJS` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV NestJS remains the active replacement source.
- `nestjs` `NVD NestJS` -> replacements: `OSV NestJS` | reason: OSV NestJS replaces NVD public search for lower-latency machine-readable collection.
- `nextjs` `GitHub Global Advisories` -> replacements: `GitHub Next.js Advisories, OSV Next.js` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub Next.js Advisories and OSV Next.js remain active replacements.
+- `nginx` `NVD NGINX` -> replacements: `NGINX Security Advisories, CISA KEV NGINX` | reason: Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.
- `nuxt` `GitHub Global Advisories` -> replacements: `Nuxt Security, OSV Nuxt` | reason: Unauthenticated GHSA API requests are rate-limited in daily monitoring; Nuxt Security and OSV Nuxt remain active replacements.
- `opencart` `NVD OpenCart` -> replacements: `OpenCart Releases, OSV OpenCart` | reason: OSV OpenCart replaces NVD for machine-readable collection while official release source remains active.
- `openmage` `NVD OpenMage` -> replacements: `OpenMage GitHub Advisories, OSV OpenMage` | reason: OSV OpenMage replaces NVD for machine-readable composer-aligned collection.
diff --git a/08-threat-intel/generated/source-health.json b/08-threat-intel/generated/source-health.json
index 45e60720..8b8783d7 100644
--- a/08-threat-intel/generated/source-health.json
+++ b/08-threat-intel/generated/source-health.json
@@ -1,41 +1,33 @@
{
- "generated_at": "2026-03-19T02:53:57+00:00",
- "active_source_count": 118,
- "green_source_count": 118,
+ "generated_at": "2026-03-19T03:38:01+00:00",
+ "active_source_count": 113,
+ "green_source_count": 113,
"failure_count": 0,
"all_green": true,
- "last_fully_green_run": "2026-03-19T02:53:57+00:00",
+ "last_fully_green_run": "2026-03-19T03:38:01+00:00",
"retries_performed": 0,
"probes": [
{
"system_id": "adminer",
- "source_name": "NVD Adminer",
- "source_kind": "nvd-search",
- "elapsed_seconds": 3.726,
- "kind": "nvd-search",
+ "source_name": "OSV Adminer",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.624,
+ "kind": "osv-batch",
"items_seen": 1
},
{
"system_id": "adobe-commerce",
"source_name": "Adobe Magento Security Index",
"source_kind": "vendor-index",
- "elapsed_seconds": 1.008,
+ "elapsed_seconds": 0.544,
"kind": "vendor-index",
"items_seen": 46
},
- {
- "system_id": "adobe-commerce",
- "source_name": "NVD Adobe Commerce",
- "source_kind": "nvd-search",
- "elapsed_seconds": 0.001,
- "kind": "nvd-search",
- "items_seen": 1
- },
{
"system_id": "angular",
"source_name": "OSV Angular",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.467,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -43,7 +35,7 @@
"system_id": "apache-httpd",
"source_name": "Apache HTTPD Security",
"source_kind": "html-links",
- "elapsed_seconds": 4.227,
+ "elapsed_seconds": 2.739,
"kind": "html-links",
"items_seen": 182
},
@@ -51,23 +43,15 @@
"system_id": "apache-httpd",
"source_name": "CISA KEV Apache HTTPD",
"source_kind": "kev-json",
- "elapsed_seconds": 3.839,
+ "elapsed_seconds": 2.768,
"kind": "kev-json",
"items_seen": 1545
},
- {
- "system_id": "apache-httpd",
- "source_name": "NVD Apache HTTP Server",
- "source_kind": "nvd-search",
- "elapsed_seconds": 1.978,
- "kind": "nvd-search",
- "items_seen": 1
- },
{
"system_id": "apache-tomcat",
"source_name": "Apache Tomcat Security",
"source_kind": "html-links",
- "elapsed_seconds": 2.946,
+ "elapsed_seconds": 2.707,
"kind": "html-links",
"items_seen": 270
},
@@ -75,31 +59,23 @@
"system_id": "apache-tomcat",
"source_name": "CISA KEV Tomcat",
"source_kind": "kev-json",
- "elapsed_seconds": 3.994,
+ "elapsed_seconds": 2.829,
"kind": "kev-json",
"items_seen": 1545
},
- {
- "system_id": "apache-tomcat",
- "source_name": "NVD Tomcat",
- "source_kind": "nvd-search",
- "elapsed_seconds": 2.801,
- "kind": "nvd-search",
- "items_seen": 1
- },
{
"system_id": "aspnet-core",
- "source_name": "NVD ASP.NET Core",
- "source_kind": "nvd-search",
- "elapsed_seconds": 1.779,
- "kind": "nvd-search",
+ "source_name": "OSV ASP.NET Core",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
"items_seen": 1
},
{
"system_id": "astro",
"source_name": "OSV Astro",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.468,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -107,7 +83,7 @@
"system_id": "caddy",
"source_name": "GitHub Caddy Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.962,
+ "elapsed_seconds": 3.835,
"kind": "html-links",
"items_seen": 114
},
@@ -115,7 +91,7 @@
"system_id": "caddy",
"source_name": "OSV Caddy",
"source_kind": "osv-batch",
- "elapsed_seconds": 2.947,
+ "elapsed_seconds": 2.434,
"kind": "osv-batch",
"items_seen": 1
},
@@ -123,7 +99,7 @@
"system_id": "directus",
"source_name": "Directus GitHub Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 0.972,
+ "elapsed_seconds": 1.474,
"kind": "html-links",
"items_seen": 127
},
@@ -131,7 +107,7 @@
"system_id": "directus",
"source_name": "OSV Directus",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.003,
+ "elapsed_seconds": 0.004,
"kind": "osv-batch",
"items_seen": 1
},
@@ -139,7 +115,7 @@
"system_id": "discourse",
"source_name": "Discourse Release Notes RSS",
"source_kind": "rss-feed",
- "elapsed_seconds": 1.98,
+ "elapsed_seconds": 1.879,
"kind": "rss-feed",
"items_seen": 30
},
@@ -147,7 +123,7 @@
"system_id": "discourse",
"source_name": "Discourse Security RSS",
"source_kind": "rss-feed",
- "elapsed_seconds": 1.46,
+ "elapsed_seconds": 0.999,
"kind": "rss-feed",
"items_seen": 3
},
@@ -163,7 +139,7 @@
"system_id": "django",
"source_name": "Django Security Releases Archive",
"source_kind": "vendor-index",
- "elapsed_seconds": 3.725,
+ "elapsed_seconds": 2.531,
"kind": "vendor-index",
"items_seen": 1276
},
@@ -171,7 +147,7 @@
"system_id": "django",
"source_name": "Django Security Weblog",
"source_kind": "vendor-index",
- "elapsed_seconds": 3.556,
+ "elapsed_seconds": 2.433,
"kind": "vendor-index",
"items_seen": 332
},
@@ -179,7 +155,7 @@
"system_id": "django",
"source_name": "OSV Django",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.776,
+ "elapsed_seconds": 1.877,
"kind": "osv-batch",
"items_seen": 1
},
@@ -187,7 +163,7 @@
"system_id": "drupal",
"source_name": "Drupal Security Advisories RSS",
"source_kind": "rss-feed",
- "elapsed_seconds": 0.879,
+ "elapsed_seconds": 0.829,
"kind": "rss-feed",
"items_seen": 20
},
@@ -195,7 +171,7 @@
"system_id": "drupal",
"source_name": "OSV Drupal",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.005,
+ "elapsed_seconds": 0.006,
"kind": "osv-batch",
"items_seen": 1
},
@@ -203,7 +179,7 @@
"system_id": "echo",
"source_name": "OSV Echo",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.779,
+ "elapsed_seconds": 1.878,
"kind": "osv-batch",
"items_seen": 1
},
@@ -211,7 +187,7 @@
"system_id": "esbuild",
"source_name": "OSV esbuild",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.609,
+ "elapsed_seconds": 1.47,
"kind": "osv-batch",
"items_seen": 1
},
@@ -219,7 +195,7 @@
"system_id": "express",
"source_name": "OSV Express",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.467,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -227,7 +203,7 @@
"system_id": "fastify",
"source_name": "OSV Fastify",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.469,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -235,7 +211,7 @@
"system_id": "flask",
"source_name": "OSV Flask",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.777,
+ "elapsed_seconds": 1.877,
"kind": "osv-batch",
"items_seen": 1
},
@@ -243,7 +219,7 @@
"system_id": "ghost",
"source_name": "Ghost GitHub Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.088,
+ "elapsed_seconds": 1.771,
"kind": "html-links",
"items_seen": 119
},
@@ -251,7 +227,7 @@
"system_id": "ghost",
"source_name": "OSV Ghost",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.003,
+ "elapsed_seconds": 0.005,
"kind": "osv-batch",
"items_seen": 1
},
@@ -259,7 +235,7 @@
"system_id": "gin",
"source_name": "OSV Gin",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.779,
+ "elapsed_seconds": 1.877,
"kind": "osv-batch",
"items_seen": 1
},
@@ -267,7 +243,7 @@
"system_id": "gitea",
"source_name": "GitHub Gitea Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.302,
+ "elapsed_seconds": 4.003,
"kind": "html-links",
"items_seen": 98
},
@@ -275,7 +251,7 @@
"system_id": "gitea",
"source_name": "OSV Gitea",
"source_kind": "osv-batch",
- "elapsed_seconds": 3.73,
+ "elapsed_seconds": 2.628,
"kind": "osv-batch",
"items_seen": 1
},
@@ -283,7 +259,7 @@
"system_id": "gitlab-ce",
"source_name": "GitLab Advisory Database",
"source_kind": "html-links",
- "elapsed_seconds": 5.215,
+ "elapsed_seconds": 3.55,
"kind": "html-links",
"items_seen": 5
},
@@ -291,23 +267,23 @@
"system_id": "gitlab-ce",
"source_name": "GitLab Security Releases",
"source_kind": "html-links",
- "elapsed_seconds": 4.223,
+ "elapsed_seconds": 3.18,
"kind": "html-links",
"items_seen": 250
},
{
"system_id": "gitlab-ce",
- "source_name": "NVD GitLab",
- "source_kind": "nvd-search",
- "elapsed_seconds": 3.781,
- "kind": "nvd-search",
- "items_seen": 1
+ "source_name": "GitLab Security Releases Atom",
+ "source_kind": "atom-feed",
+ "elapsed_seconds": 3.395,
+ "kind": "atom-feed",
+ "items_seen": 186
},
{
"system_id": "grafana",
"source_name": "CISA KEV Grafana",
"source_kind": "kev-json",
- "elapsed_seconds": 7.489,
+ "elapsed_seconds": 3.4,
"kind": "kev-json",
"items_seen": 1545
},
@@ -315,7 +291,7 @@
"system_id": "grafana",
"source_name": "Grafana Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 7.393,
+ "elapsed_seconds": 3.568,
"kind": "html-links",
"items_seen": 159
},
@@ -323,7 +299,7 @@
"system_id": "hapi",
"source_name": "OSV Hapi",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.469,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -331,39 +307,31 @@
"system_id": "haproxy",
"source_name": "HAProxy Blog Feed",
"source_kind": "rss-feed",
- "elapsed_seconds": 7.734,
+ "elapsed_seconds": 5.019,
"kind": "rss-feed",
"items_seen": 10
},
- {
- "system_id": "haproxy",
- "source_name": "NVD HAProxy",
- "source_kind": "nvd-search",
- "elapsed_seconds": 3.557,
- "kind": "nvd-search",
- "items_seen": 1
- },
{
"system_id": "jenkins",
"source_name": "Jenkins Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.398,
+ "elapsed_seconds": 4.303,
"kind": "html-links",
"items_seen": 1194
},
{
"system_id": "jenkins",
- "source_name": "NVD Jenkins",
- "source_kind": "nvd-search",
- "elapsed_seconds": 3.824,
- "kind": "nvd-search",
- "items_seen": 1
+ "source_name": "Jenkins Security Advisories RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 3.314,
+ "kind": "rss-feed",
+ "items_seen": 96
},
{
"system_id": "joomla",
"source_name": "Joomla Security Centre",
"source_kind": "html-links",
- "elapsed_seconds": 1.779,
+ "elapsed_seconds": 2.302,
"kind": "html-links",
"items_seen": 139
},
@@ -371,7 +339,7 @@
"system_id": "joomla",
"source_name": "OSV Joomla",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.004,
+ "elapsed_seconds": 0.006,
"kind": "osv-batch",
"items_seen": 1
},
@@ -379,23 +347,23 @@
"system_id": "kibana",
"source_name": "Elastic Security Announcements",
"source_kind": "html-links",
- "elapsed_seconds": 7.478,
+ "elapsed_seconds": 4.005,
"kind": "html-links",
"items_seen": 71
},
{
"system_id": "kibana",
- "source_name": "NVD Kibana",
- "source_kind": "nvd-search",
- "elapsed_seconds": 3.861,
- "kind": "nvd-search",
- "items_seen": 1
+ "source_name": "Elastic Security Announcements RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 4.874,
+ "kind": "rss-feed",
+ "items_seen": 25
},
{
"system_id": "koa",
"source_name": "OSV Koa",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.468,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -403,7 +371,7 @@
"system_id": "laravel",
"source_name": "OSV Laravel",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.747,
+ "elapsed_seconds": 1.663,
"kind": "osv-batch",
"items_seen": 1
},
@@ -411,23 +379,23 @@
"system_id": "magento-open-source",
"source_name": "Magento GitHub Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 0.72,
+ "elapsed_seconds": 1.417,
"kind": "html-links",
"items_seen": 99
},
{
"system_id": "magento-open-source",
- "source_name": "NVD Magento",
- "source_kind": "nvd-search",
- "elapsed_seconds": 0.001,
- "kind": "nvd-search",
+ "source_name": "OSV Magento Open Source",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.002,
+ "kind": "osv-batch",
"items_seen": 1
},
{
"system_id": "magento-open-source",
"source_name": "Sansec Research",
"source_kind": "html-links",
- "elapsed_seconds": 1.768,
+ "elapsed_seconds": 1.128,
"kind": "html-links",
"items_seen": 134
},
@@ -435,7 +403,7 @@
"system_id": "mattermost",
"source_name": "Mattermost Security Updates JSON",
"source_kind": "json-feed",
- "elapsed_seconds": 4.854,
+ "elapsed_seconds": 3.628,
"kind": "json-feed",
"items_seen": 594
},
@@ -443,7 +411,7 @@
"system_id": "mattermost",
"source_name": "OSV Mattermost",
"source_kind": "osv-batch",
- "elapsed_seconds": 3.9,
+ "elapsed_seconds": 2.829,
"kind": "osv-batch",
"items_seen": 1
},
@@ -451,7 +419,7 @@
"system_id": "mediawiki",
"source_name": "MediaWiki Announce RSS",
"source_kind": "rss-feed",
- "elapsed_seconds": 3.139,
+ "elapsed_seconds": 2.681,
"kind": "rss-feed",
"items_seen": 30
},
@@ -459,7 +427,7 @@
"system_id": "mediawiki",
"source_name": "OSV MediaWiki",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.002,
+ "elapsed_seconds": 0.003,
"kind": "osv-batch",
"items_seen": 1
},
@@ -467,7 +435,7 @@
"system_id": "medusa",
"source_name": "GitHub Medusa Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.826,
+ "elapsed_seconds": 2.623,
"kind": "html-links",
"items_seen": 102
},
@@ -475,7 +443,7 @@
"system_id": "medusa",
"source_name": "OSV Medusa",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.221,
+ "elapsed_seconds": 1.165,
"kind": "osv-batch",
"items_seen": 1
},
@@ -483,7 +451,7 @@
"system_id": "moodle",
"source_name": "OSV Moodle",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.002,
+ "elapsed_seconds": 0.003,
"kind": "osv-batch",
"items_seen": 1
},
@@ -491,7 +459,7 @@
"system_id": "nestjs",
"source_name": "OSV NestJS",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.468,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -499,7 +467,7 @@
"system_id": "nextjs",
"source_name": "GitHub Next.js Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.091,
+ "elapsed_seconds": 2.533,
"kind": "html-links",
"items_seen": 123
},
@@ -507,7 +475,7 @@
"system_id": "nextjs",
"source_name": "OSV Next.js",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.45,
+ "elapsed_seconds": 1.235,
"kind": "osv-batch",
"items_seen": 1
},
@@ -515,7 +483,7 @@
"system_id": "nginx",
"source_name": "CISA KEV NGINX",
"source_kind": "kev-json",
- "elapsed_seconds": 3.861,
+ "elapsed_seconds": 2.638,
"kind": "kev-json",
"items_seen": 1545
},
@@ -523,23 +491,15 @@
"system_id": "nginx",
"source_name": "NGINX Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.781,
+ "elapsed_seconds": 2.805,
"kind": "html-links",
"items_seen": 138
},
- {
- "system_id": "nginx",
- "source_name": "NVD NGINX",
- "source_kind": "nvd-search",
- "elapsed_seconds": 1.779,
- "kind": "nvd-search",
- "items_seen": 1
- },
{
"system_id": "nodejs",
"source_name": "CISA KEV Node.js",
"source_kind": "kev-json",
- "elapsed_seconds": 2.801,
+ "elapsed_seconds": 2.657,
"kind": "kev-json",
"items_seen": 1545
},
@@ -547,7 +507,7 @@
"system_id": "nodejs",
"source_name": "Node.js Security Releases",
"source_kind": "html-links",
- "elapsed_seconds": 3.901,
+ "elapsed_seconds": 2.409,
"kind": "html-links",
"items_seen": 74
},
@@ -555,7 +515,7 @@
"system_id": "nuxt",
"source_name": "Nuxt Security",
"source_kind": "html-links",
- "elapsed_seconds": 3.819,
+ "elapsed_seconds": 3.025,
"kind": "html-links",
"items_seen": 118
},
@@ -563,7 +523,7 @@
"system_id": "nuxt",
"source_name": "OSV Nuxt",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.459,
+ "elapsed_seconds": 1.416,
"kind": "osv-batch",
"items_seen": 1
},
@@ -571,7 +531,7 @@
"system_id": "opencart",
"source_name": "OSV OpenCart",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.007,
+ "elapsed_seconds": 1.127,
"kind": "osv-batch",
"items_seen": 1
},
@@ -579,7 +539,7 @@
"system_id": "opencart",
"source_name": "OpenCart Releases",
"source_kind": "html-links",
- "elapsed_seconds": 1.608,
+ "elapsed_seconds": 2.819,
"kind": "html-links",
"items_seen": 1500
},
@@ -595,7 +555,7 @@
"system_id": "openmage",
"source_name": "OpenMage GitHub Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 0.85,
+ "elapsed_seconds": 1.487,
"kind": "html-links",
"items_seen": 125
},
@@ -603,7 +563,7 @@
"system_id": "phpmyadmin",
"source_name": "OSV phpMyAdmin",
"source_kind": "osv-batch",
- "elapsed_seconds": 3.725,
+ "elapsed_seconds": 2.624,
"kind": "osv-batch",
"items_seen": 1
},
@@ -611,7 +571,7 @@
"system_id": "phpmyadmin",
"source_name": "phpMyAdmin Security Page",
"source_kind": "html-links",
- "elapsed_seconds": 4.316,
+ "elapsed_seconds": 3.221,
"kind": "html-links",
"items_seen": 262
},
@@ -619,7 +579,7 @@
"system_id": "prestashop",
"source_name": "Friends Of Presta Security",
"source_kind": "html-links",
- "elapsed_seconds": 2.101,
+ "elapsed_seconds": 1.437,
"kind": "html-links",
"items_seen": 38
},
@@ -627,7 +587,7 @@
"system_id": "prestashop",
"source_name": "GitHub PrestaShop Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.467,
+ "elapsed_seconds": 2.234,
"kind": "html-links",
"items_seen": 127
},
@@ -635,7 +595,7 @@
"system_id": "prestashop",
"source_name": "OSV PrestaShop",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.931,
+ "elapsed_seconds": 0.998,
"kind": "osv-batch",
"items_seen": 1
},
@@ -643,7 +603,7 @@
"system_id": "prestashop",
"source_name": "PrestaShop Security Page",
"source_kind": "html-links",
- "elapsed_seconds": 1.6,
+ "elapsed_seconds": 1.165,
"kind": "html-links",
"items_seen": 60
},
@@ -651,7 +611,7 @@
"system_id": "rails",
"source_name": "OSV Rails",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.778,
+ "elapsed_seconds": 1.877,
"kind": "osv-batch",
"items_seen": 1
},
@@ -659,7 +619,7 @@
"system_id": "react",
"source_name": "GitHub React Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.961,
+ "elapsed_seconds": 2.956,
"kind": "html-links",
"items_seen": 110
},
@@ -667,7 +627,7 @@
"system_id": "react",
"source_name": "OSV React",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.449,
+ "elapsed_seconds": 1.169,
"kind": "osv-batch",
"items_seen": 1
},
@@ -675,7 +635,7 @@
"system_id": "redmine",
"source_name": "OSV Redmine",
"source_kind": "osv-batch",
- "elapsed_seconds": 3.901,
+ "elapsed_seconds": 2.829,
"kind": "osv-batch",
"items_seen": 1
},
@@ -683,7 +643,7 @@
"system_id": "redmine",
"source_name": "Redmine Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 6.308,
+ "elapsed_seconds": 4.282,
"kind": "html-links",
"items_seen": 371
},
@@ -691,7 +651,7 @@
"system_id": "saleor",
"source_name": "GitHub Saleor Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.739,
+ "elapsed_seconds": 2.954,
"kind": "html-links",
"items_seen": 120
},
@@ -699,7 +659,7 @@
"system_id": "saleor",
"source_name": "OSV Saleor",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.085,
+ "elapsed_seconds": 1.134,
"kind": "osv-batch",
"items_seen": 1
},
@@ -707,7 +667,7 @@
"system_id": "shopware",
"source_name": "OSV Shopware",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.976,
+ "elapsed_seconds": 1.113,
"kind": "osv-batch",
"items_seen": 1
},
@@ -715,7 +675,7 @@
"system_id": "shopware",
"source_name": "Shopware Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.881,
+ "elapsed_seconds": 2.628,
"kind": "html-links",
"items_seen": 129
},
@@ -723,7 +683,7 @@
"system_id": "spring-boot",
"source_name": "OSV Spring Boot",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.747,
+ "elapsed_seconds": 1.663,
"kind": "osv-batch",
"items_seen": 1
},
@@ -731,7 +691,7 @@
"system_id": "spring-boot",
"source_name": "Spring Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.897,
+ "elapsed_seconds": 2.258,
"kind": "html-links",
"items_seen": 118
},
@@ -739,7 +699,7 @@
"system_id": "spring-framework",
"source_name": "OSV Spring Framework",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.609,
+ "elapsed_seconds": 1.486,
"kind": "osv-batch",
"items_seen": 1
},
@@ -747,7 +707,7 @@
"system_id": "spring-framework",
"source_name": "Spring Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.034,
+ "elapsed_seconds": 2.091,
"kind": "html-links",
"items_seen": 118
},
@@ -755,7 +715,7 @@
"system_id": "spring-security",
"source_name": "OSV Spring Security",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.74,
+ "elapsed_seconds": 1.523,
"kind": "osv-batch",
"items_seen": 1
},
@@ -763,7 +723,7 @@
"system_id": "spring-security",
"source_name": "Spring Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.173,
+ "elapsed_seconds": 2.304,
"kind": "html-links",
"items_seen": 118
},
@@ -771,7 +731,7 @@
"system_id": "strapi",
"source_name": "OSV Strapi",
"source_kind": "osv-batch",
- "elapsed_seconds": 0.003,
+ "elapsed_seconds": 0.005,
"kind": "osv-batch",
"items_seen": 1
},
@@ -779,7 +739,7 @@
"system_id": "strapi",
"source_name": "Strapi GitHub Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.47,
+ "elapsed_seconds": 1.443,
"kind": "html-links",
"items_seen": 124
},
@@ -787,7 +747,7 @@
"system_id": "sveltekit",
"source_name": "OSV SvelteKit",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.467,
+ "elapsed_seconds": 1.439,
"kind": "osv-batch",
"items_seen": 1
},
@@ -795,7 +755,7 @@
"system_id": "symfony",
"source_name": "OSV Symfony",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.747,
+ "elapsed_seconds": 1.663,
"kind": "osv-batch",
"items_seen": 1
},
@@ -803,7 +763,7 @@
"system_id": "traefik",
"source_name": "GitHub Traefik Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 3.823,
+ "elapsed_seconds": 4.008,
"kind": "html-links",
"items_seen": 124
},
@@ -811,7 +771,7 @@
"system_id": "traefik",
"source_name": "OSV Traefik",
"source_kind": "osv-batch",
- "elapsed_seconds": 3.137,
+ "elapsed_seconds": 2.532,
"kind": "osv-batch",
"items_seen": 1
},
@@ -819,7 +779,7 @@
"system_id": "undici",
"source_name": "OSV Undici",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.608,
+ "elapsed_seconds": 1.47,
"kind": "osv-batch",
"items_seen": 1
},
@@ -827,7 +787,7 @@
"system_id": "vite",
"source_name": "OSV Vite",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.467,
+ "elapsed_seconds": 1.437,
"kind": "osv-batch",
"items_seen": 1
},
@@ -835,7 +795,7 @@
"system_id": "vite",
"source_name": "Vite Security",
"source_kind": "html-links",
- "elapsed_seconds": 3.729,
+ "elapsed_seconds": 2.822,
"kind": "html-links",
"items_seen": 124
},
@@ -843,7 +803,7 @@
"system_id": "vue",
"source_name": "OSV Vue",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.456,
+ "elapsed_seconds": 1.4,
"kind": "osv-batch",
"items_seen": 1
},
@@ -851,7 +811,7 @@
"system_id": "vue",
"source_name": "Vue Security",
"source_kind": "html-links",
- "elapsed_seconds": 4.584,
+ "elapsed_seconds": 2.824,
"kind": "html-links",
"items_seen": 111
},
@@ -859,7 +819,7 @@
"system_id": "webpack",
"source_name": "OSV webpack",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.609,
+ "elapsed_seconds": 1.47,
"kind": "osv-batch",
"items_seen": 1
},
@@ -867,7 +827,7 @@
"system_id": "werkzeug",
"source_name": "OSV Werkzeug",
"source_kind": "osv-batch",
- "elapsed_seconds": 1.777,
+ "elapsed_seconds": 1.877,
"kind": "osv-batch",
"items_seen": 1
},
@@ -875,7 +835,7 @@
"system_id": "woocommerce",
"source_name": "GitHub WooCommerce Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 1.22,
+ "elapsed_seconds": 1.663,
"kind": "html-links",
"items_seen": 107
},
@@ -891,7 +851,7 @@
"system_id": "woocommerce",
"source_name": "Patchstack Database",
"source_kind": "html-links",
- "elapsed_seconds": 1.856,
+ "elapsed_seconds": 1.169,
"kind": "html-links",
"items_seen": 193
},
@@ -899,7 +859,7 @@
"system_id": "woocommerce",
"source_name": "Woo Developer Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 0.976,
+ "elapsed_seconds": 1.235,
"kind": "html-links",
"items_seen": 121
},
@@ -907,7 +867,7 @@
"system_id": "woocommerce",
"source_name": "Wordfence Vulnerability Database",
"source_kind": "html-links",
- "elapsed_seconds": 1.445,
+ "elapsed_seconds": 1.133,
"kind": "html-links",
"items_seen": 0
},
@@ -915,7 +875,7 @@
"system_id": "wordpress",
"source_name": "Patchstack Database",
"source_kind": "html-links",
- "elapsed_seconds": 1.459,
+ "elapsed_seconds": 1.099,
"kind": "html-links",
"items_seen": 193
},
@@ -923,7 +883,7 @@
"system_id": "wordpress",
"source_name": "PortSwigger Research",
"source_kind": "html-links",
- "elapsed_seconds": 1.783,
+ "elapsed_seconds": 1.117,
"kind": "html-links",
"items_seen": 99
},
@@ -931,7 +891,7 @@
"system_id": "wordpress",
"source_name": "WPScan Vulnerability Database",
"source_kind": "html-links",
- "elapsed_seconds": 1.453,
+ "elapsed_seconds": 1.528,
"kind": "html-links",
"items_seen": 74
},
@@ -939,7 +899,7 @@
"system_id": "wordpress",
"source_name": "WordPress Security News RSS",
"source_kind": "rss-feed",
- "elapsed_seconds": 1.752,
+ "elapsed_seconds": 1.405,
"kind": "rss-feed",
"items_seen": 10
},
@@ -947,7 +907,7 @@
"system_id": "wordpress",
"source_name": "Wordfence Vulnerability Database",
"source_kind": "html-links",
- "elapsed_seconds": 0.935,
+ "elapsed_seconds": 0.313,
"kind": "html-links",
"items_seen": 0
}
@@ -958,70 +918,70 @@
"system_id": "haproxy",
"source_name": "HAProxy Blog Feed",
"source_kind": "rss-feed",
- "elapsed_seconds": 7.734,
- "status": "ok"
- },
- {
- "system_id": "grafana",
- "source_name": "CISA KEV Grafana",
- "source_kind": "kev-json",
- "elapsed_seconds": 7.489,
+ "elapsed_seconds": 5.019,
"status": "ok"
},
{
"system_id": "kibana",
- "source_name": "Elastic Security Announcements",
- "source_kind": "html-links",
- "elapsed_seconds": 7.478,
- "status": "ok"
- },
- {
- "system_id": "grafana",
- "source_name": "Grafana Security Advisories",
- "source_kind": "html-links",
- "elapsed_seconds": 7.393,
- "status": "ok"
- },
- {
- "system_id": "redmine",
- "source_name": "Redmine Security Advisories",
- "source_kind": "html-links",
- "elapsed_seconds": 6.308,
- "status": "ok"
- },
- {
- "system_id": "gitlab-ce",
- "source_name": "GitLab Advisory Database",
- "source_kind": "html-links",
- "elapsed_seconds": 5.215,
- "status": "ok"
- },
- {
- "system_id": "mattermost",
- "source_name": "Mattermost Security Updates JSON",
- "source_kind": "json-feed",
- "elapsed_seconds": 4.854,
- "status": "ok"
- },
- {
- "system_id": "vue",
- "source_name": "Vue Security",
- "source_kind": "html-links",
- "elapsed_seconds": 4.584,
+ "source_name": "Elastic Security Announcements RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 4.874,
"status": "ok"
},
{
"system_id": "jenkins",
"source_name": "Jenkins Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.398,
+ "elapsed_seconds": 4.303,
"status": "ok"
},
{
- "system_id": "phpmyadmin",
- "source_name": "phpMyAdmin Security Page",
+ "system_id": "redmine",
+ "source_name": "Redmine Security Advisories",
"source_kind": "html-links",
- "elapsed_seconds": 4.316,
+ "elapsed_seconds": 4.282,
+ "status": "ok"
+ },
+ {
+ "system_id": "traefik",
+ "source_name": "GitHub Traefik Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.008,
+ "status": "ok"
+ },
+ {
+ "system_id": "kibana",
+ "source_name": "Elastic Security Announcements",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.005,
+ "status": "ok"
+ },
+ {
+ "system_id": "gitea",
+ "source_name": "GitHub Gitea Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.003,
+ "status": "ok"
+ },
+ {
+ "system_id": "caddy",
+ "source_name": "GitHub Caddy Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.835,
+ "status": "ok"
+ },
+ {
+ "system_id": "mattermost",
+ "source_name": "Mattermost Security Updates JSON",
+ "source_kind": "json-feed",
+ "elapsed_seconds": 3.628,
+ "status": "ok"
+ },
+ {
+ "system_id": "grafana",
+ "source_name": "Grafana Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.568,
"status": "ok"
}
],
@@ -1036,8 +996,8 @@
{
"system_id": "adobe-commerce",
"display_name": "Adobe Commerce",
- "active_source_total": 2,
- "green_source_total": 2,
+ "active_source_total": 1,
+ "green_source_total": 1,
"failure_count": 0
},
{
@@ -1050,15 +1010,15 @@
{
"system_id": "apache-httpd",
"display_name": "Apache HTTP Server",
- "active_source_total": 3,
- "green_source_total": 3,
+ "active_source_total": 2,
+ "green_source_total": 2,
"failure_count": 0
},
{
"system_id": "apache-tomcat",
"display_name": "Apache Tomcat",
- "active_source_total": 3,
- "green_source_total": 3,
+ "active_source_total": 2,
+ "green_source_total": 2,
"failure_count": 0
},
{
@@ -1190,8 +1150,8 @@
{
"system_id": "haproxy",
"display_name": "HAProxy",
- "active_source_total": 2,
- "green_source_total": 2,
+ "active_source_total": 1,
+ "green_source_total": 1,
"failure_count": 0
},
{
@@ -1281,8 +1241,8 @@
{
"system_id": "nginx",
"display_name": "Nginx",
- "active_source_total": 3,
- "green_source_total": 3,
+ "active_source_total": 2,
+ "green_source_total": 2,
"failure_count": 0
},
{
diff --git a/08-threat-intel/registry/monitoring/2026-03-19T03-38-01+00-00.json b/08-threat-intel/registry/monitoring/2026-03-19T03-38-01+00-00.json
new file mode 100644
index 00000000..74f7733e
--- /dev/null
+++ b/08-threat-intel/registry/monitoring/2026-03-19T03-38-01+00-00.json
@@ -0,0 +1,3839 @@
+{
+ "generated_at": "2026-03-19T03:38:01+00:00",
+ "source_catalog_audit": {
+ "generated_at": "2026-03-19T03:37:56+00:00",
+ "system_count": 62,
+ "source_count": 179,
+ "active_source_count": 113,
+ "retired_source_count": 66,
+ "systems_with_active_official": 61,
+ "systems_with_machine_readable_source": 61,
+ "systems": [
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 5,
+ "active_source_total": 1,
+ "retired_source_total": 4,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 0,
+ "has_active_official": true,
+ "has_machine_readable_source": false
+ },
+ {
+ "system_id": "angular",
+ "display_name": "Angular",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "category": "servers",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "category": "servers",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "astro",
+ "display_name": "Astro",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "caddy",
+ "display_name": "Caddy",
+ "category": "servers",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "directus",
+ "display_name": "Directus",
+ "category": "cms",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "discourse",
+ "display_name": "Discourse",
+ "category": "cms",
+ "tier": "rolling-24m",
+ "source_total": 5,
+ "active_source_total": 3,
+ "retired_source_total": 2,
+ "official_active": 2,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 3,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "django",
+ "display_name": "Django",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 4,
+ "active_source_total": 3,
+ "retired_source_total": 1,
+ "official_active": 3,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "drupal",
+ "display_name": "Drupal",
+ "category": "cms",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 2,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "echo",
+ "display_name": "Echo",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 1,
+ "active_source_total": 1,
+ "retired_source_total": 0,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "esbuild",
+ "display_name": "esbuild",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "express",
+ "display_name": "Express",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "fastify",
+ "display_name": "Fastify",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "flask",
+ "display_name": "Flask",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "ghost",
+ "display_name": "Ghost",
+ "category": "cms",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "gin",
+ "display_name": "Gin",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 1,
+ "active_source_total": 1,
+ "retired_source_total": 0,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "gitea",
+ "display_name": "Gitea",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 4,
+ "active_source_total": 3,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "grafana",
+ "display_name": "Grafana",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "hapi",
+ "display_name": "Hapi",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "category": "servers",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "joomla",
+ "display_name": "Joomla",
+ "category": "cms",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "koa",
+ "display_name": "Koa",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "laravel",
+ "display_name": "Laravel",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 4,
+ "active_source_total": 3,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "mattermost",
+ "display_name": "Mattermost",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 4,
+ "active_source_total": 2,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 2,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "mediawiki",
+ "display_name": "MediaWiki",
+ "category": "cms",
+ "tier": "rolling-24m",
+ "source_total": 4,
+ "active_source_total": 2,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 2,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "medusa",
+ "display_name": "Medusa",
+ "category": "ecommerce",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "moodle",
+ "display_name": "Moodle",
+ "category": "cms",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 0,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": false,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "nestjs",
+ "display_name": "NestJS",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "nextjs",
+ "display_name": "Next.js",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "category": "servers",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "nodejs",
+ "display_name": "Node.js",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "nuxt",
+ "display_name": "Nuxt",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "opencart",
+ "display_name": "OpenCart",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "openmage",
+ "display_name": "OpenMage / Mage-OS",
+ "category": "ecommerce",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "phpmyadmin",
+ "display_name": "phpMyAdmin",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "prestashop",
+ "display_name": "PrestaShop",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 5,
+ "active_source_total": 4,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 2,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "rails",
+ "display_name": "Ruby on Rails",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "react",
+ "display_name": "React",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "redmine",
+ "display_name": "Redmine",
+ "category": "platforms",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "saleor",
+ "display_name": "Saleor",
+ "category": "ecommerce",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "shopware",
+ "display_name": "Shopware",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "spring-boot",
+ "display_name": "Spring Boot",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "spring-framework",
+ "display_name": "Spring Framework",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "spring-security",
+ "display_name": "Spring Security",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 1,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "strapi",
+ "display_name": "Strapi",
+ "category": "cms",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "sveltekit",
+ "display_name": "SvelteKit",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "symfony",
+ "display_name": "Symfony",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "traefik",
+ "display_name": "Traefik",
+ "category": "servers",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 2,
+ "retired_source_total": 0,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "undici",
+ "display_name": "Undici",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "vite",
+ "display_name": "Vite",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "vue",
+ "display_name": "Vue",
+ "category": "frameworks",
+ "tier": "history-full",
+ "source_total": 3,
+ "active_source_total": 2,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "webpack",
+ "display_name": "webpack",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 3,
+ "active_source_total": 1,
+ "retired_source_total": 2,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "werkzeug",
+ "display_name": "Werkzeug",
+ "category": "frameworks",
+ "tier": "rolling-24m",
+ "source_total": 2,
+ "active_source_total": 1,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 0,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "woocommerce",
+ "display_name": "WooCommerce",
+ "category": "ecommerce",
+ "tier": "history-full",
+ "source_total": 6,
+ "active_source_total": 5,
+ "retired_source_total": 1,
+ "official_active": 2,
+ "ecosystem_active": 3,
+ "research_active": 0,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ },
+ {
+ "system_id": "wordpress",
+ "display_name": "WordPress",
+ "category": "cms",
+ "tier": "history-full",
+ "source_total": 6,
+ "active_source_total": 5,
+ "retired_source_total": 1,
+ "official_active": 1,
+ "ecosystem_active": 3,
+ "research_active": 1,
+ "machine_readable_active": 1,
+ "has_active_official": true,
+ "has_machine_readable_source": true
+ }
+ ],
+ "retired_sources": [
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "source_name": "NVD Adminer",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.",
+ "replacement_sources": [
+ "OSV Adminer"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "Adobe Security Bulletins",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "Original bulletin index probe was unstable under the old transport path; vendor index replacement uses explicit request policy and parser hints.",
+ "replacement_sources": [
+ "Adobe Magento Security Index",
+ "NVD Adobe Commerce",
+ "GHSA Adobe Commerce"
+ ],
+ "url": "https://helpx.adobe.com/security/products/magento.html"
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "GHSA Adobe Commerce",
+ "bucket": "ecosystem_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Adobe index and NVD remain active replacements.",
+ "replacement_sources": [
+ "Adobe Magento Security Index",
+ "NVD Adobe Commerce"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "NVD Adobe Commerce",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "source_name": "Sansec Research",
+ "bucket": "ecosystem_sources",
+ "kind": "vendor-index",
+ "retired_reason": "Research index is too slow for daily active monitoring; GHSA Adobe Commerce provides a stable machine-readable replacement.",
+ "replacement_sources": [
+ "GHSA Adobe Commerce",
+ "Adobe Magento Security Index"
+ ],
+ "url": "https://sansec.io/research"
+ },
+ {
+ "system_id": "angular",
+ "display_name": "Angular",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Angular remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Angular"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "source_name": "NVD Apache HTTP Server",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "source_name": "NVD Tomcat",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "source_name": "NVD ASP.NET Core",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "astro",
+ "display_name": "Astro",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Astro remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Astro"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "discourse",
+ "display_name": "Discourse",
+ "source_name": "Discourse Meta Security",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "Meta security category HTML changed and no longer provides stable scrape semantics for health checks.",
+ "replacement_sources": [
+ "Discourse Release Notes RSS",
+ "GitHub Discourse Advisories"
+ ],
+ "url": "https://meta.discourse.org/c/bug/security/40"
+ },
+ {
+ "system_id": "discourse",
+ "display_name": "Discourse",
+ "source_name": "GitHub Discourse Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Discourse release feed remains the active official source.",
+ "replacement_sources": [
+ "Discourse Release Notes RSS",
+ "Discourse Security RSS"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "django",
+ "display_name": "Django",
+ "source_name": "Django Security RSS",
+ "bucket": "official_sources",
+ "kind": "rss-feed",
+ "retired_reason": "Official security tag feed became unstable; use official weblog index and release archive instead.",
+ "replacement_sources": [
+ "Django Security Weblog",
+ "Django Security Releases Archive"
+ ],
+ "url": "https://www.djangoproject.com/weblog/feeds/tags/security/"
+ },
+ {
+ "system_id": "drupal",
+ "display_name": "Drupal",
+ "source_name": "NVD Drupal",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Drupal + Drupal official RSS now cover machine-readable collection with lower cold-start latency than NVD public search.",
+ "replacement_sources": [
+ "Drupal Security Advisories RSS",
+ "OSV Drupal"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "esbuild",
+ "display_name": "esbuild",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV esbuild remains the active replacement source.",
+ "replacement_sources": [
+ "OSV esbuild"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "esbuild",
+ "display_name": "esbuild",
+ "source_name": "NVD esbuild",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV esbuild replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV esbuild"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "express",
+ "display_name": "Express",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Express remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Express"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "express",
+ "display_name": "Express",
+ "source_name": "NVD Express.js",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Express replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV Express"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "fastify",
+ "display_name": "Fastify",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Fastify remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Fastify"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "flask",
+ "display_name": "Flask",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Flask remains the active machine-readable source.",
+ "replacement_sources": [
+ "OSV Flask"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "ghost",
+ "display_name": "Ghost",
+ "source_name": "NVD Ghost",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Ghost replaces NVD for machine-readable collection and keeps npm package alignment.",
+ "replacement_sources": [
+ "Ghost GitHub Advisories",
+ "OSV Ghost"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "source_name": "NVD GitLab",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "hapi",
+ "display_name": "Hapi",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Hapi remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Hapi"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "source_name": "HAProxy Security Advisories",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "Legacy haproxy.org security page no longer yields stable scrape results for monitoring.",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ],
+ "url": "https://www.haproxy.org/security/"
+ },
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "source_name": "NVD HAProxy",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "source_name": "NVD Jenkins",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "joomla",
+ "display_name": "Joomla",
+ "source_name": "NVD Joomla",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Joomla CMS replaces NVD for machine-readable collection without public NVD throttling.",
+ "replacement_sources": [
+ "Joomla Security Centre",
+ "OSV Joomla"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "source_name": "NVD Kibana",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "koa",
+ "display_name": "Koa",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Koa remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Koa"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "laravel",
+ "display_name": "Laravel",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Laravel remains the active machine-readable source.",
+ "replacement_sources": [
+ "OSV Laravel"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "source_name": "NVD Magento",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "mattermost",
+ "display_name": "Mattermost",
+ "source_name": "Mattermost Security Updates",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "Mattermost security updates page returned repeated 403 responses from the collector path; NVD replacement remains active.",
+ "replacement_sources": [
+ "NVD Mattermost"
+ ],
+ "url": "https://mattermost.com/security-updates/"
+ },
+ {
+ "system_id": "mattermost",
+ "display_name": "Mattermost",
+ "source_name": "NVD Mattermost",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Mattermost official JSON feed plus OSV Mattermost replace NVD for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "Mattermost Security Updates JSON",
+ "OSV Mattermost"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "mediawiki",
+ "display_name": "MediaWiki",
+ "source_name": "MediaWiki Security Releases",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "MediaWiki security page is no longer reachable reliably from the collector path; NVD replacement remains active.",
+ "replacement_sources": [
+ "MediaWiki Announce RSS",
+ "NVD MediaWiki"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Security"
+ },
+ {
+ "system_id": "mediawiki",
+ "display_name": "MediaWiki",
+ "source_name": "NVD MediaWiki",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "MediaWiki announce RSS plus OSV MediaWiki now replace NVD for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "MediaWiki Announce RSS",
+ "OSV MediaWiki"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "moodle",
+ "display_name": "Moodle",
+ "source_name": "Moodle Security News",
+ "bucket": "official_sources",
+ "kind": "html-links",
+ "retired_reason": "Security page is reachable with a browser-style UA, but the current markup only exposes generic \"Discuss this topic\" anchors to the collector; NVD Moodle remains the active replacement source until a richer parser is added.",
+ "replacement_sources": [
+ "NVD Moodle"
+ ],
+ "url": "https://moodle.org/security/"
+ },
+ {
+ "system_id": "moodle",
+ "display_name": "Moodle",
+ "source_name": "NVD Moodle",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Moodle replaces NVD for machine-readable collection while official Moodle sources remain for cross-checking.",
+ "replacement_sources": [
+ "OSV Moodle"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "nestjs",
+ "display_name": "NestJS",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV NestJS remains the active replacement source.",
+ "replacement_sources": [
+ "OSV NestJS"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "nestjs",
+ "display_name": "NestJS",
+ "source_name": "NVD NestJS",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV NestJS replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV NestJS"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "nextjs",
+ "display_name": "Next.js",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub Next.js Advisories and OSV Next.js remain active replacements.",
+ "replacement_sources": [
+ "GitHub Next.js Advisories",
+ "OSV Next.js"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "source_name": "NVD NGINX",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "nuxt",
+ "display_name": "Nuxt",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Nuxt Security and OSV Nuxt remain active replacements.",
+ "replacement_sources": [
+ "Nuxt Security",
+ "OSV Nuxt"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "opencart",
+ "display_name": "OpenCart",
+ "source_name": "NVD OpenCart",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV OpenCart replaces NVD for machine-readable collection while official release source remains active.",
+ "replacement_sources": [
+ "OpenCart Releases",
+ "OSV OpenCart"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "openmage",
+ "display_name": "OpenMage / Mage-OS",
+ "source_name": "NVD OpenMage",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV OpenMage replaces NVD for machine-readable composer-aligned collection.",
+ "replacement_sources": [
+ "OpenMage GitHub Advisories",
+ "OSV OpenMage"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "phpmyadmin",
+ "display_name": "phpMyAdmin",
+ "source_name": "NVD phpMyAdmin",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV phpMyAdmin replaces NVD for machine-readable collection while the official security page remains active.",
+ "replacement_sources": [
+ "phpMyAdmin Security Page",
+ "OSV phpMyAdmin"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "prestashop",
+ "display_name": "PrestaShop",
+ "source_name": "NVD PrestaShop",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV PrestaShop replaces NVD for machine-readable collection while official and ecosystem advisories remain active.",
+ "replacement_sources": [
+ "PrestaShop Security Page",
+ "GitHub PrestaShop Advisories",
+ "OSV PrestaShop"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "rails",
+ "display_name": "Ruby on Rails",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Rails remains the active machine-readable source.",
+ "replacement_sources": [
+ "OSV Rails"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "rails",
+ "display_name": "Ruby on Rails",
+ "source_name": "NVD Ruby on Rails",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Rails replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV Rails"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "react",
+ "display_name": "React",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub React Advisories and OSV React remain active replacements.",
+ "replacement_sources": [
+ "GitHub React Advisories",
+ "OSV React"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "redmine",
+ "display_name": "Redmine",
+ "source_name": "NVD Redmine",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "Official Redmine advisories page remains active and NVD public search is retired to reduce cold-start latency.",
+ "replacement_sources": [
+ "Redmine Security Advisories"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "saleor",
+ "display_name": "Saleor",
+ "source_name": "NVD Saleor",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Saleor replaces NVD for machine-readable collection and aligns with the published PyPI package.",
+ "replacement_sources": [
+ "GitHub Saleor Advisories",
+ "OSV Saleor"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "shopware",
+ "display_name": "Shopware",
+ "source_name": "NVD Shopware",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Shopware replaces NVD for machine-readable collection with lower cold-start overhead.",
+ "replacement_sources": [
+ "Shopware Security Advisories",
+ "OSV Shopware"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "spring-boot",
+ "display_name": "Spring Boot",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; Spring official page and OSV remain the active replacements.",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Boot"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "spring-framework",
+ "display_name": "Spring Framework",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Spring official page and OSV remain the active replacements.",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Framework"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "spring-security",
+ "display_name": "Spring Security",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; Spring official page and OSV remain the active replacements.",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Security"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "sveltekit",
+ "display_name": "SvelteKit",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV SvelteKit remains the active replacement source.",
+ "replacement_sources": [
+ "OSV SvelteKit"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "symfony",
+ "display_name": "Symfony",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Symfony remains the active machine-readable source.",
+ "replacement_sources": [
+ "OSV Symfony"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "undici",
+ "display_name": "Undici",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Undici remains the active replacement source.",
+ "replacement_sources": [
+ "OSV Undici"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "undici",
+ "display_name": "Undici",
+ "source_name": "NVD Undici",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV Undici replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV Undici"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "vite",
+ "display_name": "Vite",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Vite Security and OSV Vite remain active replacements.",
+ "replacement_sources": [
+ "Vite Security",
+ "OSV Vite"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "vue",
+ "display_name": "Vue",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Vue Security and OSV Vue remain active replacements.",
+ "replacement_sources": [
+ "Vue Security",
+ "OSV Vue"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "webpack",
+ "display_name": "webpack",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV webpack remains the active replacement source.",
+ "replacement_sources": [
+ "OSV webpack"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "webpack",
+ "display_name": "webpack",
+ "source_name": "NVD webpack",
+ "bucket": "ecosystem_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV webpack replaces NVD public search for lower-latency machine-readable collection.",
+ "replacement_sources": [
+ "OSV webpack"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "werkzeug",
+ "display_name": "Werkzeug",
+ "source_name": "GitHub Global Advisories",
+ "bucket": "official_sources",
+ "kind": "ghsa-global",
+ "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Werkzeug remains the active machine-readable source.",
+ "replacement_sources": [
+ "OSV Werkzeug"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "woocommerce",
+ "display_name": "WooCommerce",
+ "source_name": "NVD WooCommerce",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "OSV WooCommerce replaces NVD for machine-readable collection while official and ecosystem advisory pages remain active.",
+ "replacement_sources": [
+ "Woo Developer Advisories",
+ "GitHub WooCommerce Advisories",
+ "OSV WooCommerce"
+ ],
+ "url": ""
+ },
+ {
+ "system_id": "wordpress",
+ "display_name": "WordPress",
+ "source_name": "NVD WordPress",
+ "bucket": "official_sources",
+ "kind": "nvd-search",
+ "retired_reason": "WordPress official RSS plus ecosystem plugin intelligence cover active collection with lower cold-start latency and lower public-search dependence than NVD.",
+ "replacement_sources": [
+ "WordPress Security News RSS",
+ "Wordfence Vulnerability Database",
+ "WPScan Vulnerability Database"
+ ],
+ "url": ""
+ }
+ ],
+ "replacement_map": [
+ {
+ "system_id": "adminer",
+ "retired_source": "NVD Adminer",
+ "replacement_sources": [
+ "OSV Adminer"
+ ]
+ },
+ {
+ "system_id": "adobe-commerce",
+ "retired_source": "Adobe Security Bulletins",
+ "replacement_sources": [
+ "Adobe Magento Security Index",
+ "NVD Adobe Commerce",
+ "GHSA Adobe Commerce"
+ ]
+ },
+ {
+ "system_id": "adobe-commerce",
+ "retired_source": "GHSA Adobe Commerce",
+ "replacement_sources": [
+ "Adobe Magento Security Index",
+ "NVD Adobe Commerce"
+ ]
+ },
+ {
+ "system_id": "adobe-commerce",
+ "retired_source": "NVD Adobe Commerce",
+ "replacement_sources": [
+ "Adobe Magento Security Index"
+ ]
+ },
+ {
+ "system_id": "adobe-commerce",
+ "retired_source": "Sansec Research",
+ "replacement_sources": [
+ "GHSA Adobe Commerce",
+ "Adobe Magento Security Index"
+ ]
+ },
+ {
+ "system_id": "angular",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Angular"
+ ]
+ },
+ {
+ "system_id": "apache-httpd",
+ "retired_source": "NVD Apache HTTP Server",
+ "replacement_sources": [
+ "Apache HTTPD Security",
+ "CISA KEV Apache HTTPD"
+ ]
+ },
+ {
+ "system_id": "apache-tomcat",
+ "retired_source": "NVD Tomcat",
+ "replacement_sources": [
+ "Apache Tomcat Security",
+ "CISA KEV Tomcat"
+ ]
+ },
+ {
+ "system_id": "aspnet-core",
+ "retired_source": "NVD ASP.NET Core",
+ "replacement_sources": [
+ "OSV ASP.NET Core"
+ ]
+ },
+ {
+ "system_id": "astro",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Astro"
+ ]
+ },
+ {
+ "system_id": "discourse",
+ "retired_source": "Discourse Meta Security",
+ "replacement_sources": [
+ "Discourse Release Notes RSS",
+ "GitHub Discourse Advisories"
+ ]
+ },
+ {
+ "system_id": "discourse",
+ "retired_source": "GitHub Discourse Advisories",
+ "replacement_sources": [
+ "Discourse Release Notes RSS",
+ "Discourse Security RSS"
+ ]
+ },
+ {
+ "system_id": "django",
+ "retired_source": "Django Security RSS",
+ "replacement_sources": [
+ "Django Security Weblog",
+ "Django Security Releases Archive"
+ ]
+ },
+ {
+ "system_id": "drupal",
+ "retired_source": "NVD Drupal",
+ "replacement_sources": [
+ "Drupal Security Advisories RSS",
+ "OSV Drupal"
+ ]
+ },
+ {
+ "system_id": "esbuild",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV esbuild"
+ ]
+ },
+ {
+ "system_id": "esbuild",
+ "retired_source": "NVD esbuild",
+ "replacement_sources": [
+ "OSV esbuild"
+ ]
+ },
+ {
+ "system_id": "express",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Express"
+ ]
+ },
+ {
+ "system_id": "express",
+ "retired_source": "NVD Express.js",
+ "replacement_sources": [
+ "OSV Express"
+ ]
+ },
+ {
+ "system_id": "fastify",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Fastify"
+ ]
+ },
+ {
+ "system_id": "flask",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Flask"
+ ]
+ },
+ {
+ "system_id": "ghost",
+ "retired_source": "NVD Ghost",
+ "replacement_sources": [
+ "Ghost GitHub Advisories",
+ "OSV Ghost"
+ ]
+ },
+ {
+ "system_id": "gitlab-ce",
+ "retired_source": "NVD GitLab",
+ "replacement_sources": [
+ "GitLab Security Releases",
+ "GitLab Security Releases Atom"
+ ]
+ },
+ {
+ "system_id": "hapi",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Hapi"
+ ]
+ },
+ {
+ "system_id": "haproxy",
+ "retired_source": "HAProxy Security Advisories",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ]
+ },
+ {
+ "system_id": "haproxy",
+ "retired_source": "NVD HAProxy",
+ "replacement_sources": [
+ "HAProxy Blog Feed"
+ ]
+ },
+ {
+ "system_id": "jenkins",
+ "retired_source": "NVD Jenkins",
+ "replacement_sources": [
+ "Jenkins Security Advisories",
+ "Jenkins Security Advisories RSS"
+ ]
+ },
+ {
+ "system_id": "joomla",
+ "retired_source": "NVD Joomla",
+ "replacement_sources": [
+ "Joomla Security Centre",
+ "OSV Joomla"
+ ]
+ },
+ {
+ "system_id": "kibana",
+ "retired_source": "NVD Kibana",
+ "replacement_sources": [
+ "Elastic Security Announcements",
+ "Elastic Security Announcements RSS"
+ ]
+ },
+ {
+ "system_id": "koa",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Koa"
+ ]
+ },
+ {
+ "system_id": "laravel",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Laravel"
+ ]
+ },
+ {
+ "system_id": "magento-open-source",
+ "retired_source": "NVD Magento",
+ "replacement_sources": [
+ "Magento GitHub Advisories",
+ "OSV Magento Open Source"
+ ]
+ },
+ {
+ "system_id": "mattermost",
+ "retired_source": "Mattermost Security Updates",
+ "replacement_sources": [
+ "NVD Mattermost"
+ ]
+ },
+ {
+ "system_id": "mattermost",
+ "retired_source": "NVD Mattermost",
+ "replacement_sources": [
+ "Mattermost Security Updates JSON",
+ "OSV Mattermost"
+ ]
+ },
+ {
+ "system_id": "mediawiki",
+ "retired_source": "MediaWiki Security Releases",
+ "replacement_sources": [
+ "MediaWiki Announce RSS",
+ "NVD MediaWiki"
+ ]
+ },
+ {
+ "system_id": "mediawiki",
+ "retired_source": "NVD MediaWiki",
+ "replacement_sources": [
+ "MediaWiki Announce RSS",
+ "OSV MediaWiki"
+ ]
+ },
+ {
+ "system_id": "moodle",
+ "retired_source": "Moodle Security News",
+ "replacement_sources": [
+ "NVD Moodle"
+ ]
+ },
+ {
+ "system_id": "moodle",
+ "retired_source": "NVD Moodle",
+ "replacement_sources": [
+ "OSV Moodle"
+ ]
+ },
+ {
+ "system_id": "nestjs",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV NestJS"
+ ]
+ },
+ {
+ "system_id": "nestjs",
+ "retired_source": "NVD NestJS",
+ "replacement_sources": [
+ "OSV NestJS"
+ ]
+ },
+ {
+ "system_id": "nextjs",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "GitHub Next.js Advisories",
+ "OSV Next.js"
+ ]
+ },
+ {
+ "system_id": "nginx",
+ "retired_source": "NVD NGINX",
+ "replacement_sources": [
+ "NGINX Security Advisories",
+ "CISA KEV NGINX"
+ ]
+ },
+ {
+ "system_id": "nuxt",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Nuxt Security",
+ "OSV Nuxt"
+ ]
+ },
+ {
+ "system_id": "opencart",
+ "retired_source": "NVD OpenCart",
+ "replacement_sources": [
+ "OpenCart Releases",
+ "OSV OpenCart"
+ ]
+ },
+ {
+ "system_id": "openmage",
+ "retired_source": "NVD OpenMage",
+ "replacement_sources": [
+ "OpenMage GitHub Advisories",
+ "OSV OpenMage"
+ ]
+ },
+ {
+ "system_id": "phpmyadmin",
+ "retired_source": "NVD phpMyAdmin",
+ "replacement_sources": [
+ "phpMyAdmin Security Page",
+ "OSV phpMyAdmin"
+ ]
+ },
+ {
+ "system_id": "prestashop",
+ "retired_source": "NVD PrestaShop",
+ "replacement_sources": [
+ "PrestaShop Security Page",
+ "GitHub PrestaShop Advisories",
+ "OSV PrestaShop"
+ ]
+ },
+ {
+ "system_id": "rails",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Rails"
+ ]
+ },
+ {
+ "system_id": "rails",
+ "retired_source": "NVD Ruby on Rails",
+ "replacement_sources": [
+ "OSV Rails"
+ ]
+ },
+ {
+ "system_id": "react",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "GitHub React Advisories",
+ "OSV React"
+ ]
+ },
+ {
+ "system_id": "redmine",
+ "retired_source": "NVD Redmine",
+ "replacement_sources": [
+ "Redmine Security Advisories"
+ ]
+ },
+ {
+ "system_id": "saleor",
+ "retired_source": "NVD Saleor",
+ "replacement_sources": [
+ "GitHub Saleor Advisories",
+ "OSV Saleor"
+ ]
+ },
+ {
+ "system_id": "shopware",
+ "retired_source": "NVD Shopware",
+ "replacement_sources": [
+ "Shopware Security Advisories",
+ "OSV Shopware"
+ ]
+ },
+ {
+ "system_id": "spring-boot",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Boot"
+ ]
+ },
+ {
+ "system_id": "spring-framework",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Framework"
+ ]
+ },
+ {
+ "system_id": "spring-security",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Spring Security Advisories",
+ "OSV Spring Security"
+ ]
+ },
+ {
+ "system_id": "sveltekit",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV SvelteKit"
+ ]
+ },
+ {
+ "system_id": "symfony",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Symfony"
+ ]
+ },
+ {
+ "system_id": "undici",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Undici"
+ ]
+ },
+ {
+ "system_id": "undici",
+ "retired_source": "NVD Undici",
+ "replacement_sources": [
+ "OSV Undici"
+ ]
+ },
+ {
+ "system_id": "vite",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Vite Security",
+ "OSV Vite"
+ ]
+ },
+ {
+ "system_id": "vue",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "Vue Security",
+ "OSV Vue"
+ ]
+ },
+ {
+ "system_id": "webpack",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV webpack"
+ ]
+ },
+ {
+ "system_id": "webpack",
+ "retired_source": "NVD webpack",
+ "replacement_sources": [
+ "OSV webpack"
+ ]
+ },
+ {
+ "system_id": "werkzeug",
+ "retired_source": "GitHub Global Advisories",
+ "replacement_sources": [
+ "OSV Werkzeug"
+ ]
+ },
+ {
+ "system_id": "woocommerce",
+ "retired_source": "NVD WooCommerce",
+ "replacement_sources": [
+ "Woo Developer Advisories",
+ "GitHub WooCommerce Advisories",
+ "OSV WooCommerce"
+ ]
+ },
+ {
+ "system_id": "wordpress",
+ "retired_source": "NVD WordPress",
+ "replacement_sources": [
+ "WordPress Security News RSS",
+ "Wordfence Vulnerability Database",
+ "WPScan Vulnerability Database"
+ ]
+ }
+ ]
+ },
+ "source_health": {
+ "generated_at": "2026-03-19T03:38:01+00:00",
+ "active_source_count": 113,
+ "green_source_count": 113,
+ "failure_count": 0,
+ "all_green": true,
+ "last_fully_green_run": "2026-03-19T03:38:01+00:00",
+ "retries_performed": 0,
+ "probes": [
+ {
+ "system_id": "adminer",
+ "source_name": "OSV Adminer",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.624,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "adobe-commerce",
+ "source_name": "Adobe Magento Security Index",
+ "source_kind": "vendor-index",
+ "elapsed_seconds": 0.544,
+ "kind": "vendor-index",
+ "items_seen": 46
+ },
+ {
+ "system_id": "angular",
+ "source_name": "OSV Angular",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "apache-httpd",
+ "source_name": "Apache HTTPD Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.739,
+ "kind": "html-links",
+ "items_seen": 182
+ },
+ {
+ "system_id": "apache-httpd",
+ "source_name": "CISA KEV Apache HTTPD",
+ "source_kind": "kev-json",
+ "elapsed_seconds": 2.768,
+ "kind": "kev-json",
+ "items_seen": 1545
+ },
+ {
+ "system_id": "apache-tomcat",
+ "source_name": "Apache Tomcat Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.707,
+ "kind": "html-links",
+ "items_seen": 270
+ },
+ {
+ "system_id": "apache-tomcat",
+ "source_name": "CISA KEV Tomcat",
+ "source_kind": "kev-json",
+ "elapsed_seconds": 2.829,
+ "kind": "kev-json",
+ "items_seen": 1545
+ },
+ {
+ "system_id": "aspnet-core",
+ "source_name": "OSV ASP.NET Core",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "astro",
+ "source_name": "OSV Astro",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "caddy",
+ "source_name": "GitHub Caddy Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.835,
+ "kind": "html-links",
+ "items_seen": 114
+ },
+ {
+ "system_id": "caddy",
+ "source_name": "OSV Caddy",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.434,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "directus",
+ "source_name": "Directus GitHub Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.474,
+ "kind": "html-links",
+ "items_seen": 127
+ },
+ {
+ "system_id": "directus",
+ "source_name": "OSV Directus",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.004,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "discourse",
+ "source_name": "Discourse Release Notes RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 1.879,
+ "kind": "rss-feed",
+ "items_seen": 30
+ },
+ {
+ "system_id": "discourse",
+ "source_name": "Discourse Security RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 0.999,
+ "kind": "rss-feed",
+ "items_seen": 3
+ },
+ {
+ "system_id": "discourse",
+ "source_name": "OSV Discourse",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.002,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "django",
+ "source_name": "Django Security Releases Archive",
+ "source_kind": "vendor-index",
+ "elapsed_seconds": 2.531,
+ "kind": "vendor-index",
+ "items_seen": 1276
+ },
+ {
+ "system_id": "django",
+ "source_name": "Django Security Weblog",
+ "source_kind": "vendor-index",
+ "elapsed_seconds": 2.433,
+ "kind": "vendor-index",
+ "items_seen": 332
+ },
+ {
+ "system_id": "django",
+ "source_name": "OSV Django",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "drupal",
+ "source_name": "Drupal Security Advisories RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 0.829,
+ "kind": "rss-feed",
+ "items_seen": 20
+ },
+ {
+ "system_id": "drupal",
+ "source_name": "OSV Drupal",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.006,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "echo",
+ "source_name": "OSV Echo",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.878,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "esbuild",
+ "source_name": "OSV esbuild",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.47,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "express",
+ "source_name": "OSV Express",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "fastify",
+ "source_name": "OSV Fastify",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "flask",
+ "source_name": "OSV Flask",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "ghost",
+ "source_name": "Ghost GitHub Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.771,
+ "kind": "html-links",
+ "items_seen": 119
+ },
+ {
+ "system_id": "ghost",
+ "source_name": "OSV Ghost",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.005,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "gin",
+ "source_name": "OSV Gin",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "gitea",
+ "source_name": "GitHub Gitea Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.003,
+ "kind": "html-links",
+ "items_seen": 98
+ },
+ {
+ "system_id": "gitea",
+ "source_name": "OSV Gitea",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.628,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "gitlab-ce",
+ "source_name": "GitLab Advisory Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.55,
+ "kind": "html-links",
+ "items_seen": 5
+ },
+ {
+ "system_id": "gitlab-ce",
+ "source_name": "GitLab Security Releases",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.18,
+ "kind": "html-links",
+ "items_seen": 250
+ },
+ {
+ "system_id": "gitlab-ce",
+ "source_name": "GitLab Security Releases Atom",
+ "source_kind": "atom-feed",
+ "elapsed_seconds": 3.395,
+ "kind": "atom-feed",
+ "items_seen": 186
+ },
+ {
+ "system_id": "grafana",
+ "source_name": "CISA KEV Grafana",
+ "source_kind": "kev-json",
+ "elapsed_seconds": 3.4,
+ "kind": "kev-json",
+ "items_seen": 1545
+ },
+ {
+ "system_id": "grafana",
+ "source_name": "Grafana Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.568,
+ "kind": "html-links",
+ "items_seen": 159
+ },
+ {
+ "system_id": "hapi",
+ "source_name": "OSV Hapi",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "haproxy",
+ "source_name": "HAProxy Blog Feed",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 5.019,
+ "kind": "rss-feed",
+ "items_seen": 10
+ },
+ {
+ "system_id": "jenkins",
+ "source_name": "Jenkins Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.303,
+ "kind": "html-links",
+ "items_seen": 1194
+ },
+ {
+ "system_id": "jenkins",
+ "source_name": "Jenkins Security Advisories RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 3.314,
+ "kind": "rss-feed",
+ "items_seen": 96
+ },
+ {
+ "system_id": "joomla",
+ "source_name": "Joomla Security Centre",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.302,
+ "kind": "html-links",
+ "items_seen": 139
+ },
+ {
+ "system_id": "joomla",
+ "source_name": "OSV Joomla",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.006,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "kibana",
+ "source_name": "Elastic Security Announcements",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.005,
+ "kind": "html-links",
+ "items_seen": 71
+ },
+ {
+ "system_id": "kibana",
+ "source_name": "Elastic Security Announcements RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 4.874,
+ "kind": "rss-feed",
+ "items_seen": 25
+ },
+ {
+ "system_id": "koa",
+ "source_name": "OSV Koa",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "laravel",
+ "source_name": "OSV Laravel",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.663,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "magento-open-source",
+ "source_name": "Magento GitHub Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.417,
+ "kind": "html-links",
+ "items_seen": 99
+ },
+ {
+ "system_id": "magento-open-source",
+ "source_name": "OSV Magento Open Source",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.002,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "magento-open-source",
+ "source_name": "Sansec Research",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.128,
+ "kind": "html-links",
+ "items_seen": 134
+ },
+ {
+ "system_id": "mattermost",
+ "source_name": "Mattermost Security Updates JSON",
+ "source_kind": "json-feed",
+ "elapsed_seconds": 3.628,
+ "kind": "json-feed",
+ "items_seen": 594
+ },
+ {
+ "system_id": "mattermost",
+ "source_name": "OSV Mattermost",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.829,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "mediawiki",
+ "source_name": "MediaWiki Announce RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 2.681,
+ "kind": "rss-feed",
+ "items_seen": 30
+ },
+ {
+ "system_id": "mediawiki",
+ "source_name": "OSV MediaWiki",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.003,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "medusa",
+ "source_name": "GitHub Medusa Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.623,
+ "kind": "html-links",
+ "items_seen": 102
+ },
+ {
+ "system_id": "medusa",
+ "source_name": "OSV Medusa",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.165,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "moodle",
+ "source_name": "OSV Moodle",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.003,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "nestjs",
+ "source_name": "OSV NestJS",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "nextjs",
+ "source_name": "GitHub Next.js Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.533,
+ "kind": "html-links",
+ "items_seen": 123
+ },
+ {
+ "system_id": "nextjs",
+ "source_name": "OSV Next.js",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.235,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "nginx",
+ "source_name": "CISA KEV NGINX",
+ "source_kind": "kev-json",
+ "elapsed_seconds": 2.638,
+ "kind": "kev-json",
+ "items_seen": 1545
+ },
+ {
+ "system_id": "nginx",
+ "source_name": "NGINX Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.805,
+ "kind": "html-links",
+ "items_seen": 138
+ },
+ {
+ "system_id": "nodejs",
+ "source_name": "CISA KEV Node.js",
+ "source_kind": "kev-json",
+ "elapsed_seconds": 2.657,
+ "kind": "kev-json",
+ "items_seen": 1545
+ },
+ {
+ "system_id": "nodejs",
+ "source_name": "Node.js Security Releases",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.409,
+ "kind": "html-links",
+ "items_seen": 74
+ },
+ {
+ "system_id": "nuxt",
+ "source_name": "Nuxt Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.025,
+ "kind": "html-links",
+ "items_seen": 118
+ },
+ {
+ "system_id": "nuxt",
+ "source_name": "OSV Nuxt",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.416,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "opencart",
+ "source_name": "OSV OpenCart",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.127,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "opencart",
+ "source_name": "OpenCart Releases",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.819,
+ "kind": "html-links",
+ "items_seen": 1500
+ },
+ {
+ "system_id": "openmage",
+ "source_name": "OSV OpenMage",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.001,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "openmage",
+ "source_name": "OpenMage GitHub Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.487,
+ "kind": "html-links",
+ "items_seen": 125
+ },
+ {
+ "system_id": "phpmyadmin",
+ "source_name": "OSV phpMyAdmin",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.624,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "phpmyadmin",
+ "source_name": "phpMyAdmin Security Page",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.221,
+ "kind": "html-links",
+ "items_seen": 262
+ },
+ {
+ "system_id": "prestashop",
+ "source_name": "Friends Of Presta Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.437,
+ "kind": "html-links",
+ "items_seen": 38
+ },
+ {
+ "system_id": "prestashop",
+ "source_name": "GitHub PrestaShop Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.234,
+ "kind": "html-links",
+ "items_seen": 127
+ },
+ {
+ "system_id": "prestashop",
+ "source_name": "OSV PrestaShop",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.998,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "prestashop",
+ "source_name": "PrestaShop Security Page",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.165,
+ "kind": "html-links",
+ "items_seen": 60
+ },
+ {
+ "system_id": "rails",
+ "source_name": "OSV Rails",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "react",
+ "source_name": "GitHub React Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.956,
+ "kind": "html-links",
+ "items_seen": 110
+ },
+ {
+ "system_id": "react",
+ "source_name": "OSV React",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.169,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "redmine",
+ "source_name": "OSV Redmine",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.829,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "redmine",
+ "source_name": "Redmine Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.282,
+ "kind": "html-links",
+ "items_seen": 371
+ },
+ {
+ "system_id": "saleor",
+ "source_name": "GitHub Saleor Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.954,
+ "kind": "html-links",
+ "items_seen": 120
+ },
+ {
+ "system_id": "saleor",
+ "source_name": "OSV Saleor",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.134,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "shopware",
+ "source_name": "OSV Shopware",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.113,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "shopware",
+ "source_name": "Shopware Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.628,
+ "kind": "html-links",
+ "items_seen": 129
+ },
+ {
+ "system_id": "spring-boot",
+ "source_name": "OSV Spring Boot",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.663,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "spring-boot",
+ "source_name": "Spring Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.258,
+ "kind": "html-links",
+ "items_seen": 118
+ },
+ {
+ "system_id": "spring-framework",
+ "source_name": "OSV Spring Framework",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.486,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "spring-framework",
+ "source_name": "Spring Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.091,
+ "kind": "html-links",
+ "items_seen": 118
+ },
+ {
+ "system_id": "spring-security",
+ "source_name": "OSV Spring Security",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.523,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "spring-security",
+ "source_name": "Spring Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.304,
+ "kind": "html-links",
+ "items_seen": 118
+ },
+ {
+ "system_id": "strapi",
+ "source_name": "OSV Strapi",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.005,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "strapi",
+ "source_name": "Strapi GitHub Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.443,
+ "kind": "html-links",
+ "items_seen": 124
+ },
+ {
+ "system_id": "sveltekit",
+ "source_name": "OSV SvelteKit",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.439,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "symfony",
+ "source_name": "OSV Symfony",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.663,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "traefik",
+ "source_name": "GitHub Traefik Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.008,
+ "kind": "html-links",
+ "items_seen": 124
+ },
+ {
+ "system_id": "traefik",
+ "source_name": "OSV Traefik",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 2.532,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "undici",
+ "source_name": "OSV Undici",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.47,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "vite",
+ "source_name": "OSV Vite",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.437,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "vite",
+ "source_name": "Vite Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.822,
+ "kind": "html-links",
+ "items_seen": 124
+ },
+ {
+ "system_id": "vue",
+ "source_name": "OSV Vue",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.4,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "vue",
+ "source_name": "Vue Security",
+ "source_kind": "html-links",
+ "elapsed_seconds": 2.824,
+ "kind": "html-links",
+ "items_seen": 111
+ },
+ {
+ "system_id": "webpack",
+ "source_name": "OSV webpack",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.47,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "werkzeug",
+ "source_name": "OSV Werkzeug",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 1.877,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "woocommerce",
+ "source_name": "GitHub WooCommerce Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.663,
+ "kind": "html-links",
+ "items_seen": 107
+ },
+ {
+ "system_id": "woocommerce",
+ "source_name": "OSV WooCommerce",
+ "source_kind": "osv-batch",
+ "elapsed_seconds": 0.001,
+ "kind": "osv-batch",
+ "items_seen": 1
+ },
+ {
+ "system_id": "woocommerce",
+ "source_name": "Patchstack Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.169,
+ "kind": "html-links",
+ "items_seen": 193
+ },
+ {
+ "system_id": "woocommerce",
+ "source_name": "Woo Developer Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.235,
+ "kind": "html-links",
+ "items_seen": 121
+ },
+ {
+ "system_id": "woocommerce",
+ "source_name": "Wordfence Vulnerability Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.133,
+ "kind": "html-links",
+ "items_seen": 0
+ },
+ {
+ "system_id": "wordpress",
+ "source_name": "Patchstack Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.099,
+ "kind": "html-links",
+ "items_seen": 193
+ },
+ {
+ "system_id": "wordpress",
+ "source_name": "PortSwigger Research",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.117,
+ "kind": "html-links",
+ "items_seen": 99
+ },
+ {
+ "system_id": "wordpress",
+ "source_name": "WPScan Vulnerability Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 1.528,
+ "kind": "html-links",
+ "items_seen": 74
+ },
+ {
+ "system_id": "wordpress",
+ "source_name": "WordPress Security News RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 1.405,
+ "kind": "rss-feed",
+ "items_seen": 10
+ },
+ {
+ "system_id": "wordpress",
+ "source_name": "Wordfence Vulnerability Database",
+ "source_kind": "html-links",
+ "elapsed_seconds": 0.313,
+ "kind": "html-links",
+ "items_seen": 0
+ }
+ ],
+ "failures": [],
+ "slow_sources": [
+ {
+ "system_id": "haproxy",
+ "source_name": "HAProxy Blog Feed",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 5.019,
+ "status": "ok"
+ },
+ {
+ "system_id": "kibana",
+ "source_name": "Elastic Security Announcements RSS",
+ "source_kind": "rss-feed",
+ "elapsed_seconds": 4.874,
+ "status": "ok"
+ },
+ {
+ "system_id": "jenkins",
+ "source_name": "Jenkins Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.303,
+ "status": "ok"
+ },
+ {
+ "system_id": "redmine",
+ "source_name": "Redmine Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.282,
+ "status": "ok"
+ },
+ {
+ "system_id": "traefik",
+ "source_name": "GitHub Traefik Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.008,
+ "status": "ok"
+ },
+ {
+ "system_id": "kibana",
+ "source_name": "Elastic Security Announcements",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.005,
+ "status": "ok"
+ },
+ {
+ "system_id": "gitea",
+ "source_name": "GitHub Gitea Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 4.003,
+ "status": "ok"
+ },
+ {
+ "system_id": "caddy",
+ "source_name": "GitHub Caddy Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.835,
+ "status": "ok"
+ },
+ {
+ "system_id": "mattermost",
+ "source_name": "Mattermost Security Updates JSON",
+ "source_kind": "json-feed",
+ "elapsed_seconds": 3.628,
+ "status": "ok"
+ },
+ {
+ "system_id": "grafana",
+ "source_name": "Grafana Security Advisories",
+ "source_kind": "html-links",
+ "elapsed_seconds": 3.568,
+ "status": "ok"
+ }
+ ],
+ "systems": [
+ {
+ "system_id": "adminer",
+ "display_name": "Adminer",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "adobe-commerce",
+ "display_name": "Adobe Commerce",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "angular",
+ "display_name": "Angular",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "apache-httpd",
+ "display_name": "Apache HTTP Server",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "apache-tomcat",
+ "display_name": "Apache Tomcat",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "aspnet-core",
+ "display_name": "ASP.NET Core",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "astro",
+ "display_name": "Astro",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "caddy",
+ "display_name": "Caddy",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "directus",
+ "display_name": "Directus",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "discourse",
+ "display_name": "Discourse",
+ "active_source_total": 3,
+ "green_source_total": 3,
+ "failure_count": 0
+ },
+ {
+ "system_id": "django",
+ "display_name": "Django",
+ "active_source_total": 3,
+ "green_source_total": 3,
+ "failure_count": 0
+ },
+ {
+ "system_id": "drupal",
+ "display_name": "Drupal",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "echo",
+ "display_name": "Echo",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "esbuild",
+ "display_name": "esbuild",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "express",
+ "display_name": "Express",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "fastify",
+ "display_name": "Fastify",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "flask",
+ "display_name": "Flask",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "ghost",
+ "display_name": "Ghost",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "gin",
+ "display_name": "Gin",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "gitea",
+ "display_name": "Gitea",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "gitlab-ce",
+ "display_name": "GitLab CE",
+ "active_source_total": 3,
+ "green_source_total": 3,
+ "failure_count": 0
+ },
+ {
+ "system_id": "grafana",
+ "display_name": "Grafana",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "hapi",
+ "display_name": "Hapi",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "haproxy",
+ "display_name": "HAProxy",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "jenkins",
+ "display_name": "Jenkins",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "joomla",
+ "display_name": "Joomla",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "kibana",
+ "display_name": "Kibana",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "koa",
+ "display_name": "Koa",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "laravel",
+ "display_name": "Laravel",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "magento-open-source",
+ "display_name": "Magento Open Source",
+ "active_source_total": 3,
+ "green_source_total": 3,
+ "failure_count": 0
+ },
+ {
+ "system_id": "mattermost",
+ "display_name": "Mattermost",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "mediawiki",
+ "display_name": "MediaWiki",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "medusa",
+ "display_name": "Medusa",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "moodle",
+ "display_name": "Moodle",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "nestjs",
+ "display_name": "NestJS",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "nextjs",
+ "display_name": "Next.js",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "nginx",
+ "display_name": "Nginx",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "nodejs",
+ "display_name": "Node.js",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "nuxt",
+ "display_name": "Nuxt",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "opencart",
+ "display_name": "OpenCart",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "openmage",
+ "display_name": "OpenMage / Mage-OS",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "phpmyadmin",
+ "display_name": "phpMyAdmin",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "prestashop",
+ "display_name": "PrestaShop",
+ "active_source_total": 4,
+ "green_source_total": 4,
+ "failure_count": 0
+ },
+ {
+ "system_id": "rails",
+ "display_name": "Ruby on Rails",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "react",
+ "display_name": "React",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "redmine",
+ "display_name": "Redmine",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "saleor",
+ "display_name": "Saleor",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "shopware",
+ "display_name": "Shopware",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "spring-boot",
+ "display_name": "Spring Boot",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "spring-framework",
+ "display_name": "Spring Framework",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "spring-security",
+ "display_name": "Spring Security",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "strapi",
+ "display_name": "Strapi",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "sveltekit",
+ "display_name": "SvelteKit",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "symfony",
+ "display_name": "Symfony",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "traefik",
+ "display_name": "Traefik",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "undici",
+ "display_name": "Undici",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "vite",
+ "display_name": "Vite",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "vue",
+ "display_name": "Vue",
+ "active_source_total": 2,
+ "green_source_total": 2,
+ "failure_count": 0
+ },
+ {
+ "system_id": "webpack",
+ "display_name": "webpack",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "werkzeug",
+ "display_name": "Werkzeug",
+ "active_source_total": 1,
+ "green_source_total": 1,
+ "failure_count": 0
+ },
+ {
+ "system_id": "woocommerce",
+ "display_name": "WooCommerce",
+ "active_source_total": 5,
+ "green_source_total": 5,
+ "failure_count": 0
+ },
+ {
+ "system_id": "wordpress",
+ "display_name": "WordPress",
+ "active_source_total": 5,
+ "green_source_total": 5,
+ "failure_count": 0
+ }
+ ]
+ },
+ "alerts": [
+ {
+ "alert_id": "django::OSV Django",
+ "system_id": "django",
+ "display_name": "Django",
+ "source_name": "OSV Django",
+ "source_kind": "osv-batch",
+ "status": "resolved",
+ "opened_at": "2026-03-19T02:27:12+00:00",
+ "updated_at": "2026-03-19T02:27:12+00:00",
+ "resolved_at": "2026-03-19T02:27:12+00:00",
+ "failure_streak": 1,
+ "last_category": "tls",
+ "last_failure": {
+ "system_id": "django",
+ "display_name": "Django",
+ "source_name": "OSV Django",
+ "source_kind": "osv-batch",
+ "source_bucket": "official_sources",
+ "category": "tls",
+ "exception": "SSLError",
+ "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "status_code": null,
+ "url": "",
+ "summary": "django::OSV Django::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "elapsed_seconds": 25.112
+ }
+ },
+ {
+ "alert_id": "flask::OSV Flask",
+ "system_id": "flask",
+ "display_name": "Flask",
+ "source_name": "OSV Flask",
+ "source_kind": "osv-batch",
+ "status": "resolved",
+ "opened_at": "2026-03-19T02:27:12+00:00",
+ "updated_at": "2026-03-19T02:27:12+00:00",
+ "resolved_at": "2026-03-19T02:27:12+00:00",
+ "failure_streak": 1,
+ "last_category": "tls",
+ "last_failure": {
+ "system_id": "flask",
+ "display_name": "Flask",
+ "source_name": "OSV Flask",
+ "source_kind": "osv-batch",
+ "source_bucket": "official_sources",
+ "category": "tls",
+ "exception": "SSLError",
+ "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "status_code": null,
+ "url": "",
+ "summary": "flask::OSV Flask::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "elapsed_seconds": 25.129
+ }
+ },
+ {
+ "alert_id": "spring-security::OSV Spring Security",
+ "system_id": "spring-security",
+ "display_name": "Spring Security",
+ "source_name": "OSV Spring Security",
+ "source_kind": "osv-batch",
+ "status": "resolved",
+ "opened_at": "2026-03-19T02:27:12+00:00",
+ "updated_at": "2026-03-19T02:27:12+00:00",
+ "resolved_at": "2026-03-19T02:27:12+00:00",
+ "failure_streak": 1,
+ "last_category": "tls",
+ "last_failure": {
+ "system_id": "spring-security",
+ "display_name": "Spring Security",
+ "source_name": "OSV Spring Security",
+ "source_kind": "osv-batch",
+ "source_bucket": "ecosystem_sources",
+ "category": "tls",
+ "exception": "SSLError",
+ "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "status_code": null,
+ "url": "",
+ "summary": "spring-security::OSV Spring Security::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "elapsed_seconds": 25.247
+ }
+ },
+ {
+ "alert_id": "symfony::OSV Symfony",
+ "system_id": "symfony",
+ "display_name": "Symfony",
+ "source_name": "OSV Symfony",
+ "source_kind": "osv-batch",
+ "status": "resolved",
+ "opened_at": "2026-03-19T02:27:12+00:00",
+ "updated_at": "2026-03-19T02:27:12+00:00",
+ "resolved_at": "2026-03-19T02:27:12+00:00",
+ "failure_streak": 1,
+ "last_category": "tls",
+ "last_failure": {
+ "system_id": "symfony",
+ "display_name": "Symfony",
+ "source_name": "OSV Symfony",
+ "source_kind": "osv-batch",
+ "source_bucket": "official_sources",
+ "category": "tls",
+ "exception": "SSLError",
+ "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "status_code": null,
+ "url": "",
+ "summary": "symfony::OSV Symfony::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+ "elapsed_seconds": 25.232
+ }
+ }
+ ],
+ "monitor_summary": {
+ "generated_at": "2026-03-19T03:38:01+00:00",
+ "active_source_count": 113,
+ "green_source_count": 113,
+ "source_failure_count": 0,
+ "open_alert_count": 0,
+ "resolved_alert_count": 4,
+ "last_fully_green_run": "2026-03-19T03:38:01+00:00",
+ "source_catalog": {
+ "system_count": 62,
+ "source_count": 179,
+ "retired_source_count": 66
+ },
+ "ingest": {
+ "new_count": 0,
+ "updated_count": 0,
+ "failure_count": 0,
+ "systems_touched": []
+ },
+ "validation": {
+ "passed": true,
+ "error_count": 0,
+ "errors": []
+ }
+ }
+}
diff --git a/08-threat-intel/source-map.yaml b/08-threat-intel/source-map.yaml
index cc6d6566..1e170b29 100644
--- a/08-threat-intel/source-map.yaml
+++ b/08-threat-intel/source-map.yaml
@@ -456,6 +456,9 @@ systems:
confidence: official
advisory_mode: core
results_per_page: 50
+ status: retired
+ retired_reason: Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.
+ replacement_sources: [Adobe Magento Security Index]
ecosystem_sources:
- name: GHSA Adobe Commerce
kind: ghsa-global
@@ -503,12 +506,19 @@ systems:
advisory_mode: core
keywords: [magento]
max_items: 50
+ - name: OSV Magento Open Source
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD Magento
kind: nvd-search
keyword: Magento
confidence: official
advisory_mode: core
results_per_page: 50
+ status: retired
+ retired_reason: OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.
+ replacement_sources: [Magento GitHub Advisories, OSV Magento Open Source]
ecosystem_sources:
- name: Sansec Research
kind: html-links
@@ -519,9 +529,9 @@ systems:
max_items: 50
research_sources: []
package_names:
- - ecosystem: composer
+ - ecosystem: Packagist
name: magento/product-community-edition
- - ecosystem: composer
+ - ecosystem: Packagist
name: magento/framework
cpe_keys: ["magento:magento"]
ghsa_keywords: [magento]
@@ -1812,15 +1822,24 @@ systems:
tier: rolling-24m
advisory_modes: [core]
official_sources:
+ - name: OSV ASP.NET Core
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD ASP.NET Core
kind: nvd-search
keyword: ASP.NET Core
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.
+ replacement_sources: [OSV ASP.NET Core]
ecosystem_sources: []
research_sources: []
- package_names: []
+ package_names:
+ - ecosystem: NuGet
+ name: Microsoft.AspNetCore.App
cpe_keys: ["microsoft:asp.net_core"]
ghsa_keywords: [asp.net core]
kev_keywords: [asp.net core]
@@ -1894,6 +1913,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.
+ replacement_sources: [NGINX Security Advisories, CISA KEV NGINX]
- name: CISA KEV NGINX
kind: kev-json
url: https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
@@ -1936,6 +1958,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+ replacement_sources: [Apache HTTPD Security, CISA KEV Apache HTTPD]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -1972,6 +1997,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 50
+ status: retired
+ retired_reason: Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.
+ replacement_sources: [Apache Tomcat Security, CISA KEV Tomcat]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2072,6 +2100,9 @@ systems:
confidence: official
advisory_mode: server
results_per_page: 40
+ status: retired
+ retired_reason: HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.
+ replacement_sources: [HAProxy Blog Feed]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2128,15 +2159,24 @@ systems:
tier: rolling-24m
advisory_modes: [core]
official_sources:
+ - name: OSV Adminer
+ kind: osv-batch
+ confidence: official
+ advisory_mode: core
- name: NVD Adminer
kind: nvd-search
keyword: Adminer
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.
+ replacement_sources: [OSV Adminer]
ecosystem_sources: []
research_sources: []
- package_names: []
+ package_names:
+ - ecosystem: Packagist
+ name: vrana/adminer
cpe_keys: ["adminer:adminer"]
ghsa_keywords: [adminer]
kev_keywords: [adminer]
@@ -2188,12 +2228,22 @@ systems:
advisory_mode: core
keywords: [security release, gitlab]
max_items: 50
+ - name: GitLab Security Releases Atom
+ kind: atom-feed
+ url: https://about.gitlab.com/security-releases.xml
+ confidence: official
+ advisory_mode: core
+ keywords: [security release, gitlab]
+ max_items: 50
- name: NVD GitLab
kind: nvd-search
keyword: GitLab CE
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.
+ replacement_sources: [GitLab Security Releases, GitLab Security Releases Atom]
ecosystem_sources:
- name: GitLab Advisory Database
kind: html-links
@@ -2225,12 +2275,22 @@ systems:
advisory_mode: core
keywords: [jenkins]
max_items: 60
+ - name: Jenkins Security Advisories RSS
+ kind: rss-feed
+ url: https://www.jenkins.io/security/advisories/rss.xml
+ confidence: official
+ advisory_mode: core
+ keywords: [jenkins]
+ max_items: 60
- name: NVD Jenkins
kind: nvd-search
keyword: Jenkins
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.
+ replacement_sources: [Jenkins Security Advisories, Jenkins Security Advisories RSS]
ecosystem_sources: []
research_sources: []
package_names: []
@@ -2286,12 +2346,22 @@ systems:
advisory_mode: core
keywords: [kibana, elastic, security]
max_items: 60
+ - name: Elastic Security Announcements RSS
+ kind: rss-feed
+ url: https://discuss.elastic.co/c/announcements/security-announcements/31.rss
+ confidence: official
+ advisory_mode: core
+ keywords: [kibana, elastic, security]
+ max_items: 60
- name: NVD Kibana
kind: nvd-search
keyword: Kibana
confidence: official
advisory_mode: core
results_per_page: 40
+ status: retired
+ retired_reason: Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.
+ replacement_sources: [Elastic Security Announcements, Elastic Security Announcements RSS]
ecosystem_sources: []
research_sources: []
package_names: []
diff --git a/docs/testing-completeness-report.md b/docs/testing-completeness-report.md
index 9b840826..1eb47e4e 100644
--- a/docs/testing-completeness-report.md
+++ b/docs/testing-completeness-report.md
@@ -1,14 +1,14 @@
# 全库 Advisory 完整度报告
-- 生成时间: `2026-03-19T02:54:09+00:00`
+- 生成时间: `2026-03-19T03:38:08+00:00`
- 最新 advisory 完整度: `89/89` `verified-real`
- 合成验证数量: `0`
- 阻塞数量: `0`
- 人工/待补证据数量: `0`
- 完整度百分比: `100.0%`
-- active source 全绿: `118/118`
+- active source 全绿: `113/113`
- source open alerts: `0`
-- 最近一次 source 全绿: `2026-03-19T02:53:57+00:00`
+- 最近一次 source 全绿: `2026-03-19T03:38:01+00:00`
## 系统覆盖矩阵
@@ -30,8 +30,8 @@
## Ingest / Source 健康度
- source failures: `0`
-- active sources: `118`
-- green sources: `118`
+- active sources: `113`
+- green sources: `113`
- open alerts: `0`
## 剩余风险说明