更新: 2531 个文件 - 2026-03-17 21:00:03
这个提交包含在:
@@ -21,7 +21,7 @@
|
||||
| Flask | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Ghost | `cms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Gin | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Gitea | `platforms` | `rolling-24m` | `-` | `yes` | `30` | `30` | `3` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-03-03T04:57:57.697708Z` |
|
||||
| Gitea | `platforms` | `rolling-24m` | `-` | `yes` | `37` | `37` | `3` | `seeded` | `real:37/synthetic:0/blocked:0` | `33` | `37` | `0` | `2026-03-03T04:57:57.697708Z` |
|
||||
| GitLab CE | `platforms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Grafana | `platforms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Hapi | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
@@ -37,7 +37,7 @@
|
||||
| Medusa | `ecommerce` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Moodle | `cms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| NestJS | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Next.js | `frameworks` | `history-full` | `yes` | `yes` | `24` | `24` | `3` | `seeded` | `real:1/synthetic:0/blocked:0` | `0` | `1` | `0` | `2026-03-13T22:00:36.554552Z` |
|
||||
| Next.js | `frameworks` | `history-full` | `yes` | `yes` | `26` | `26` | `3` | `seeded` | `real:26/synthetic:0/blocked:0` | `21` | `26` | `0` | `2026-03-13T22:14:13.665535Z` |
|
||||
| Nginx | `servers` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Node.js | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Nuxt | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
@@ -57,8 +57,8 @@
|
||||
| SvelteKit | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Symfony | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Traefik | `servers` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Undici | `frameworks` | `rolling-24m` | `-` | `yes` | `14` | `14` | `2` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-03-14T09:19:54.772219Z` |
|
||||
| Vite | `frameworks` | `history-full` | `yes` | `yes` | `12` | `12` | `3` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-02-04T04:37:24.129476Z` |
|
||||
| Undici | `frameworks` | `rolling-24m` | `-` | `yes` | `14` | `14` | `2` | `seeded` | `real:1/synthetic:0/blocked:0` | `0` | `1` | `0` | `2026-03-14T09:19:54.772219Z` |
|
||||
| Vite | `frameworks` | `history-full` | `yes` | `yes` | `12` | `12` | `3` | `seeded` | `real:3/synthetic:0/blocked:0` | `3` | `3` | `0` | `2026-02-04T04:37:24.129476Z` |
|
||||
| Vue | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| webpack | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Werkzeug | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
|
||||
文件差异因一行或多行过长而隐藏
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-03-18T01:29:52+00:00",
|
||||
"generated_at": "2026-03-18T03:59:28+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": [
|
||||
@@ -27,11 +27,11 @@
|
||||
},
|
||||
{
|
||||
"label": "\u5f53\u524d\u8fd0\u884c",
|
||||
"value": "11"
|
||||
"value": "114"
|
||||
},
|
||||
{
|
||||
"label": "\u5f53\u524d\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "80"
|
||||
"value": "89"
|
||||
}
|
||||
],
|
||||
"fields": [
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
{
|
||||
"label": "\u751f\u6210\u65f6\u95f4",
|
||||
"value": "2026-03-18T01:29:52+00:00"
|
||||
"value": "2026-03-18T03:59:28+00:00"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
@@ -243,6 +243,11 @@
|
||||
"href": "/docs/frontend-dashboard-design.html",
|
||||
"description": "\u5f53\u524d\u672c\u5730\u5de5\u4f5c\u53f0\u7684\u4ea4\u4e92\u4e0e\u89c6\u89c9\u89c4\u8303\u3002"
|
||||
},
|
||||
{
|
||||
"label": "\u5b8c\u6574\u5ea6\u62a5\u544a",
|
||||
"href": "/docs/testing-completeness-report.html",
|
||||
"description": "89 \u6761 advisory \u7684\u6700\u65b0\u5b8c\u6574\u5ea6\u4e2d\u6587\u62a5\u544a\u3002"
|
||||
},
|
||||
{
|
||||
"label": "\u5b89\u5168\u7f16\u7801\u7d22\u5f15",
|
||||
"href": "/docs/secure-code-index.html",
|
||||
@@ -288,6 +293,11 @@
|
||||
"href": "/summary.json",
|
||||
"description": "\u5168\u5c40\u6458\u8981\u3001\u72b6\u6001\u5206\u5e03\u548c\u6700\u8fd1\u5931\u8d25\u3002"
|
||||
},
|
||||
{
|
||||
"label": "completeness.json",
|
||||
"href": "/data/completeness.json",
|
||||
"description": "\u6700\u65b0 advisory \u5b8c\u6574\u5ea6\u3001\u7cfb\u7edf/family \u8fdb\u5ea6\u4e0e ingest \u5065\u5eb7\u5ea6\u3002"
|
||||
},
|
||||
{
|
||||
"label": "runs.json",
|
||||
"href": "/runs.json",
|
||||
@@ -5843,19 +5853,19 @@
|
||||
"stats": [
|
||||
{
|
||||
"label": "Run \u6570",
|
||||
"value": "11"
|
||||
"value": "114"
|
||||
},
|
||||
{
|
||||
"label": "Advisory \u6570",
|
||||
"value": "80"
|
||||
"value": "89"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001\u7c7b\u578b",
|
||||
"value": "3"
|
||||
"value": "2"
|
||||
},
|
||||
{
|
||||
"label": "\u6700\u8fd1\u5931\u8d25",
|
||||
"value": "3"
|
||||
"value": "20"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
@@ -5866,7 +5876,7 @@
|
||||
"items": [
|
||||
{
|
||||
"title": "\u771f\u5b9e\u7248\u672c\u5df2\u5b9e\u8bc1",
|
||||
"summary": "\u5f53\u524d\u7d2f\u8ba1 8 \u6761\u3002",
|
||||
"summary": "\u5f53\u524d\u7d2f\u8ba1 67 \u6761\u3002",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
@@ -5875,28 +5885,13 @@
|
||||
},
|
||||
{
|
||||
"label": "\u6570\u91cf",
|
||||
"value": "8"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "\u5236\u54c1\u963b\u585e",
|
||||
"summary": "\u5f53\u524d\u7d2f\u8ba1 2 \u6761\u3002",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u72b6\u6001\u7f16\u7801",
|
||||
"value": "blocked-artifact"
|
||||
},
|
||||
{
|
||||
"label": "\u6570\u91cf",
|
||||
"value": "2"
|
||||
"value": "67"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "\u4eba\u5de5\u5206\u8bca",
|
||||
"summary": "\u5f53\u524d\u7d2f\u8ba1 1 \u6761\u3002",
|
||||
"summary": "\u5f53\u524d\u7d2f\u8ba1 22 \u6761\u3002",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
@@ -5905,7 +5900,7 @@
|
||||
},
|
||||
{
|
||||
"label": "\u6570\u91cf",
|
||||
"value": "1"
|
||||
"value": "22"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -5917,60 +5912,8 @@
|
||||
"open": false,
|
||||
"items": [
|
||||
{
|
||||
"title": "gitea--CVE-2025-68939",
|
||||
"summary": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u5236\u54c1\u963b\u585e"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "gitea-livecheck-20260316"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "gitea--CVE-2025-68939"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u5236\u54c1\u963b\u585e"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "gitea--CVE-2025-68939",
|
||||
"summary": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u5236\u54c1\u963b\u585e"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "gitea-gitea--CVE-2025-68939-20260317063330"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "gitea--CVE-2025-68939"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u5236\u54c1\u963b\u585e"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "nextjs--CVE-2025-29927",
|
||||
"summary": "dry-run only",
|
||||
"title": "Undici has an HTTP Request/Response Smuggling issue",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
@@ -5978,11 +5921,11 @@
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "nextjs-nextjs--CVE-2025-29927-20260317063047"
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "nextjs--CVE-2025-29927"
|
||||
"value": "undici--CVE-2026-1525"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
@@ -5990,7 +5933,501 @@
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "dry-run only"
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-1528"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "ProxyAgent vulnerable to MITM",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2022-32210"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-2229"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has CRLF Injection in undici via `upgrade` option",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-1527"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-1526"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-2581"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "undici Denial of Service attack via bad certificate data",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2025-47279"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite has a `server.fs.deny` bypassed for `inline` and `raw` with `?import` query",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-31125"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's `server.fs` settings were not applied to HTML files",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-58752"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite middleware may serve files starting with the same name with the public directory",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-58751"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "vite allows server.fs.deny bypass via backslash on Windows",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-62522"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite has an `server.fs.deny` bypass with an invalid `request-target`",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-32395"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's `server.fs.deny` is bypassed when using `?import&raw`",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2024-45811"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite allows server.fs.deny to be bypassed with .svg or relative paths",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-31486"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's server.fs.deny bypassed with /. for files under project root",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-46565"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite bypasses server.fs.deny when using ?raw??",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "vite--CVE-2025-30208"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2026-22036"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici's cookie header not cleared on cross-origin redirect in fetch",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2023-45143"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Use of Insufficiently Random Values in undici",
|
||||
"summary": "\u65e0\u989d\u5916\u963b\u585e\u8bf4\u660e\u3002",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"\u4eba\u5de5\u5206\u8bca"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "\u8fd0\u884c ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "\u6f0f\u6d1e\u6761\u76ee",
|
||||
"value": "undici--CVE-2025-22150"
|
||||
},
|
||||
{
|
||||
"label": "\u72b6\u6001",
|
||||
"value": "\u4eba\u5de5\u5206\u8bca"
|
||||
},
|
||||
{
|
||||
"label": "\u963b\u585e\u539f\u56e0",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ const ARTIFACT_KIND_LABELS = {
|
||||
const DOC_HUB_ITEMS = [
|
||||
{ title: "项目功能总览", href: "/docs/project-features.html", description: "项目定位、功能版图、自动化链路和 CLI 入口。", badge: "docs" },
|
||||
{ title: "前端设计文档", href: "/docs/frontend-dashboard-design.html", description: "工作台布局、交互、折叠逻辑和视觉规范。", badge: "ui" },
|
||||
{ title: "中文完整度报告", href: "/docs/testing-completeness-report.html", description: "89 条 advisory 的最新完整度、family 矩阵与 ingest 健康度。", badge: "report" },
|
||||
{ title: "架构库镜像", href: "/docs/architecture-library.html", description: "当前架构库的结构化镜像页,可直接查看 JSON 真值。", badge: "architecture" },
|
||||
{ title: "仓库入口镜像", href: "/docs/root-readme.html", description: "根 README 的本地镜像,包含能力矩阵与主入口。", badge: "readme" },
|
||||
{ title: "授权模型", href: "/docs/authorization-model.html", description: "目标范围、授权模型、最小化验证建议和记录要求。", badge: "scope" },
|
||||
@@ -50,6 +51,7 @@ const DOC_HUB_ITEMS = [
|
||||
|
||||
const DATA_HUB_ITEMS = [
|
||||
{ title: "summary.json", href: "/summary.json", description: "全局摘要、状态分布、最近失败与系统汇总。", badge: "json" },
|
||||
{ title: "completeness.json", href: "/data/completeness.json", description: "最新 advisory 完整度、系统/family 进度与 ingest 健康度。", badge: "json" },
|
||||
{ title: "runs.json", href: "/runs.json", description: "最近运行的结构化详情,可用于 UI 和调试。", badge: "json" },
|
||||
{ title: "systems.json", href: "/systems.json", description: "系统级覆盖、分类、更新时间和浏览器证据统计。", badge: "json" },
|
||||
{ title: "advisories.json", href: "/advisories.json", description: "漏洞条目元数据、来源和 secure-code 主题。", badge: "json" },
|
||||
@@ -84,6 +86,7 @@ const state = {
|
||||
advisories: {},
|
||||
profiles: {},
|
||||
architecture: null,
|
||||
completeness: null,
|
||||
selectedRunId: null,
|
||||
selectedArtifact: null,
|
||||
refreshHandle: null,
|
||||
@@ -275,15 +278,17 @@ function familyOptions() {
|
||||
}
|
||||
|
||||
function metricCards() {
|
||||
const successCount = Number(state.summary?.statuses?.["verified-real"] || 0) + Number(state.summary?.statuses?.["verified-synthetic"] || 0);
|
||||
const blockedCount = sumStatuses((key) => key.startsWith("blocked"));
|
||||
const inProgressCount = Math.max(Number(state.summary?.run_count || 0) - successCount - blockedCount, 0);
|
||||
const completeness = state.completeness || state.summary?.completeness || {};
|
||||
const successCount = Number(completeness.verified_real || 0) + Number(completeness.verified_synthetic || 0);
|
||||
const blockedCount = Number(completeness.blocked || 0);
|
||||
const inProgressCount = Number(completeness.manual || 0);
|
||||
const advisoryTotal = Number(completeness.advisory_total || state.summary?.advisory_count || 0);
|
||||
|
||||
return [
|
||||
{
|
||||
label: "运行总数",
|
||||
value: state.summary?.run_count || 0,
|
||||
note: `已索引漏洞条目 ${state.summary?.advisory_count || 0} 条`,
|
||||
label: "最新 advisory",
|
||||
value: advisoryTotal,
|
||||
note: `历史运行 ${state.summary?.run_count || 0} 次`,
|
||||
color: "var(--accent-purple)",
|
||||
iconName: "report"
|
||||
},
|
||||
@@ -297,14 +302,14 @@ function metricCards() {
|
||||
{
|
||||
label: "当前阻塞",
|
||||
value: blockedCount,
|
||||
note: "制品阻塞或破坏性风险阻塞",
|
||||
note: "latest advisory 状态里的 blocked-*",
|
||||
color: "var(--accent-red)",
|
||||
iconName: "failure"
|
||||
},
|
||||
{
|
||||
label: "待处理 / 进行中",
|
||||
value: inProgressCount,
|
||||
note: "人工分诊、待补证据或未完成实证",
|
||||
note: "人工分诊或待补证据的 latest advisory",
|
||||
color: "var(--accent-blue)",
|
||||
iconName: "timeline"
|
||||
}
|
||||
@@ -755,6 +760,54 @@ function renderPanel(panelKey, title, meta, iconName, content) {
|
||||
`;
|
||||
}
|
||||
|
||||
function renderCompletenessPanel(panelKey, compact = false) {
|
||||
const completeness = state.completeness || state.summary?.completeness || {};
|
||||
const systems = (state.completeness?.systems || []).map((system) => `
|
||||
<article class="plan-card">
|
||||
<span class="plan-label">${escapeHtml(system.system_id)}</span>
|
||||
<div class="plan-copy">${escapeHtml(`${system.verified_real}/${system.total} verified-real`)}</div>
|
||||
<div class="tag-row">
|
||||
${(system.families || []).map((family) => `<span class="tag">${escapeHtml(`${family.family} ${family.verified_real}/${family.total}`)}</span>`).join("")}
|
||||
</div>
|
||||
</article>
|
||||
`).join("");
|
||||
const failures = (state.completeness?.ingest_health?.failures || []).slice(0, 5);
|
||||
return renderPanel(
|
||||
panelKey,
|
||||
"最新 advisory 完整度",
|
||||
`${escapeHtml(completeness.verified_real || 0)}/${escapeHtml(completeness.advisory_total || 0)}`,
|
||||
"shield",
|
||||
`
|
||||
<div class="detail-stat-grid">
|
||||
<article class="detail-stat">
|
||||
<strong>verified-real</strong>
|
||||
<span>${escapeHtml(completeness.verified_real || 0)}</span>
|
||||
</article>
|
||||
<article class="detail-stat">
|
||||
<strong>blocked</strong>
|
||||
<span>${escapeHtml(completeness.blocked || 0)}</span>
|
||||
</article>
|
||||
<article class="detail-stat">
|
||||
<strong>manual</strong>
|
||||
<span>${escapeHtml(completeness.manual || 0)}</span>
|
||||
</article>
|
||||
<article class="detail-stat">
|
||||
<strong>ingest failures</strong>
|
||||
<span>${escapeHtml(state.completeness?.ingest_health?.failure_count || 0)}</span>
|
||||
</article>
|
||||
</div>
|
||||
<div class="plan-grid" style="margin-top:16px;">${systems || `<div class="empty-state">暂无系统完整度数据。</div>`}</div>
|
||||
${compact ? "" : `
|
||||
<div class="detail-actions" style="margin-top:16px;">
|
||||
<a class="button button-secondary" href="/docs/testing-completeness-report.html" target="_blank" rel="noreferrer">${icon("docs")}<span>打开中文报告</span></a>
|
||||
<a class="button button-secondary" href="/data/completeness.json" target="_blank" rel="noreferrer">${icon("json")}<span>打开 completeness.json</span></a>
|
||||
</div>
|
||||
${failures.length ? `<div class="callout" style="margin-top:16px;"><strong>Ingest 未清零</strong><div class="plan-copy">${escapeHtml(failures.join(" | "))}</div></div>` : ""}
|
||||
`}
|
||||
`
|
||||
);
|
||||
}
|
||||
|
||||
function renderArchitectureFields(fields = []) {
|
||||
if (!fields.length) return "";
|
||||
return `
|
||||
@@ -1061,6 +1114,7 @@ function renderRunWorkspace() {
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
${renderCompletenessPanel("runs_completeness", true)}
|
||||
${renderPanel("timeline", "进度时间线", `${escapeHtml(run.timeline?.length || 0)} 步`, "timeline", `
|
||||
<div class="progress-bar">${progressSegments(progress).bar}</div>
|
||||
<div class="progress-legend">${progressSegments(progress).legend}</div>
|
||||
@@ -1130,6 +1184,7 @@ function renderOverviewWorkspace() {
|
||||
<h2 class="detail-title">按板块浏览当前工作台</h2>
|
||||
<div class="detail-subtitle">根入口保留为概览页,同时新增运行、系统、架构、文档和数据的独立 URL。顶部菜单负责分类切换,搜索与筛选会同步到地址栏。</div>
|
||||
</section>
|
||||
${renderCompletenessPanel("overview_completeness")}
|
||||
${renderPanel("overview_runs", "最新运行", `${escapeHtml(runs.length)} 条`, "queue", renderRunList(runs, "暂无运行数据。"))}
|
||||
${renderPanel("overview_systems", "系统覆盖概览", `${escapeHtml(systems.length)} 个系统`, "systems", `<div class="system-grid">${renderSystemCards(systems)}</div>`)}
|
||||
${renderArchitecturePanel()}
|
||||
@@ -1195,6 +1250,7 @@ function renderDocsWorkspace() {
|
||||
<h2 class="detail-title">文档入口按板块集中</h2>
|
||||
<div class="detail-subtitle">不再把所有入口混在首页链接堆里。这里按说明、设计、真值镜像和 secure-code 索引集中展示。</div>
|
||||
</section>
|
||||
${renderCompletenessPanel("docs_completeness", true)}
|
||||
${renderPanel("docs_hub", "文档与镜像页", `${escapeHtml(DOC_HUB_ITEMS.length)} 个入口`, "docs", renderHubCards(DOC_HUB_ITEMS))}
|
||||
</div>
|
||||
`;
|
||||
@@ -1215,6 +1271,7 @@ function renderDataWorkspace() {
|
||||
<h2 class="detail-title">数据入口按类型集中</h2>
|
||||
<div class="detail-subtitle">summary、runs、systems、advisories、profiles、architecture 已单独归入数据中心,避免和文档、运行详情混在一个地址里。</div>
|
||||
</section>
|
||||
${renderCompletenessPanel("data_completeness", true)}
|
||||
${renderPanel("data_hub", "JSON 与生成数据", `${escapeHtml(DATA_HUB_ITEMS.length)} 个入口`, "json", renderHubCards(DATA_HUB_ITEMS))}
|
||||
</div>
|
||||
`;
|
||||
@@ -1416,13 +1473,14 @@ async function loadData(preserveSelection = true) {
|
||||
renderSyncState("loading", "刷新中", `本地时间 ${new Date().toLocaleTimeString("zh-CN", { hour12: false })}`);
|
||||
|
||||
try {
|
||||
const [summary, runs, systems, advisories, profiles, architecture] = await Promise.all([
|
||||
const [summary, runs, systems, advisories, profiles, architecture, completeness] = await Promise.all([
|
||||
fetchJson("/summary.json"),
|
||||
fetchJson("/runs.json"),
|
||||
fetchJson("/systems.json"),
|
||||
fetchJson("/advisories.json"),
|
||||
fetchJson("/profiles.json"),
|
||||
fetchJson("/architecture.json")
|
||||
fetchJson("/architecture.json"),
|
||||
fetchJson("/data/completeness.json")
|
||||
]);
|
||||
|
||||
state.summary = summary;
|
||||
@@ -1431,6 +1489,7 @@ async function loadData(preserveSelection = true) {
|
||||
state.advisories = advisories;
|
||||
state.profiles = profiles;
|
||||
state.architecture = architecture;
|
||||
state.completeness = completeness;
|
||||
|
||||
const filtered = filteredRuns();
|
||||
const candidate = preserveSelection ? (state.selectedRunId || previousRunId) : state.selectedRunId;
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<h1>当前架构库镜像</h1>
|
||||
<div class="meta">工作台内置镜像页:当前架构库结构化数据镜像。</div>
|
||||
<pre>{
|
||||
"generated_at": "2026-03-18T01:29:52+00:00",
|
||||
"generated_at": "2026-03-18T03:59:28+00:00",
|
||||
"title": "当前架构库",
|
||||
"summary": "工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。",
|
||||
"sections": [
|
||||
@@ -115,11 +115,11 @@
|
||||
},
|
||||
{
|
||||
"label": "当前运行",
|
||||
"value": "11"
|
||||
"value": "114"
|
||||
},
|
||||
{
|
||||
"label": "当前漏洞条目",
|
||||
"value": "80"
|
||||
"value": "89"
|
||||
}
|
||||
],
|
||||
"fields": [
|
||||
@@ -137,7 +137,7 @@
|
||||
},
|
||||
{
|
||||
"label": "生成时间",
|
||||
"value": "2026-03-18T01:29:52+00:00"
|
||||
"value": "2026-03-18T03:59:28+00:00"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
@@ -331,6 +331,11 @@
|
||||
"href": "/docs/frontend-dashboard-design.html",
|
||||
"description": "当前本地工作台的交互与视觉规范。"
|
||||
},
|
||||
{
|
||||
"label": "完整度报告",
|
||||
"href": "/docs/testing-completeness-report.html",
|
||||
"description": "89 条 advisory 的最新完整度中文报告。"
|
||||
},
|
||||
{
|
||||
"label": "安全编码索引",
|
||||
"href": "/docs/secure-code-index.html",
|
||||
@@ -376,6 +381,11 @@
|
||||
"href": "/summary.json",
|
||||
"description": "全局摘要、状态分布和最近失败。"
|
||||
},
|
||||
{
|
||||
"label": "completeness.json",
|
||||
"href": "/data/completeness.json",
|
||||
"description": "最新 advisory 完整度、系统/family 进度与 ingest 健康度。"
|
||||
},
|
||||
{
|
||||
"label": "runs.json",
|
||||
"href": "/runs.json",
|
||||
@@ -5931,19 +5941,19 @@
|
||||
"stats": [
|
||||
{
|
||||
"label": "Run 数",
|
||||
"value": "11"
|
||||
"value": "114"
|
||||
},
|
||||
{
|
||||
"label": "Advisory 数",
|
||||
"value": "80"
|
||||
"value": "89"
|
||||
},
|
||||
{
|
||||
"label": "状态类型",
|
||||
"value": "3"
|
||||
"value": "2"
|
||||
},
|
||||
{
|
||||
"label": "最近失败",
|
||||
"value": "3"
|
||||
"value": "20"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
@@ -5954,7 +5964,7 @@
|
||||
"items": [
|
||||
{
|
||||
"title": "真实版本已实证",
|
||||
"summary": "当前累计 8 条。",
|
||||
"summary": "当前累计 67 条。",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
@@ -5963,28 +5973,13 @@
|
||||
},
|
||||
{
|
||||
"label": "数量",
|
||||
"value": "8"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "制品阻塞",
|
||||
"summary": "当前累计 2 条。",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
"label": "状态编码",
|
||||
"value": "blocked-artifact"
|
||||
},
|
||||
{
|
||||
"label": "数量",
|
||||
"value": "2"
|
||||
"value": "67"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "人工分诊",
|
||||
"summary": "当前累计 1 条。",
|
||||
"summary": "当前累计 22 条。",
|
||||
"open": false,
|
||||
"fields": [
|
||||
{
|
||||
@@ -5993,7 +5988,7 @@
|
||||
},
|
||||
{
|
||||
"label": "数量",
|
||||
"value": "1"
|
||||
"value": "22"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -6005,60 +6000,8 @@
|
||||
"open": false,
|
||||
"items": [
|
||||
{
|
||||
"title": "gitea--CVE-2025-68939",
|
||||
"summary": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"制品阻塞"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "gitea-livecheck-20260316"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "gitea--CVE-2025-68939"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "制品阻塞"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "gitea--CVE-2025-68939",
|
||||
"summary": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"制品阻塞"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "gitea-gitea--CVE-2025-68939-20260317063330"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "gitea--CVE-2025-68939"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "制品阻塞"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "nextjs--CVE-2025-29927",
|
||||
"summary": "dry-run only",
|
||||
"title": "Undici has an HTTP Request/Response Smuggling issue",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
@@ -6066,11 +6009,11 @@
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "nextjs-nextjs--CVE-2025-29927-20260317063047"
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "nextjs--CVE-2025-29927"
|
||||
"value": "undici--CVE-2026-1525"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
@@ -6078,7 +6021,501 @@
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "dry-run only"
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-1528"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "ProxyAgent vulnerable to MITM",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2022-32210"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-2229"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has CRLF Injection in undici via `upgrade` option",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-1527"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-1526"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-2581"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "undici Denial of Service attack via bad certificate data",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2025-47279"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite has a `server.fs.deny` bypassed for `inline` and `raw` with `?import` query",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-31125"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's `server.fs` settings were not applied to HTML files",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-58752"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite middleware may serve files starting with the same name with the public directory",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-58751"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "vite allows server.fs.deny bypass via backslash on Windows",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-62522"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite has an `server.fs.deny` bypass with an invalid `request-target`",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-32395"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's `server.fs.deny` is bypassed when using `?import&raw`",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2024-45811"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite allows server.fs.deny to be bypassed with .svg or relative paths",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-31486"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite's server.fs.deny bypassed with /. for files under project root",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-46565"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Vite bypasses server.fs.deny when using ?raw??",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "vite--CVE-2025-30208"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2026-22036"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Undici's cookie header not cleared on cross-origin redirect in fetch",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2023-45143"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Use of Insufficiently Random Values in undici",
|
||||
"summary": "无额外阻塞说明。",
|
||||
"open": false,
|
||||
"badges": [
|
||||
"人工分诊"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"label": "运行 ID",
|
||||
"value": "-"
|
||||
},
|
||||
{
|
||||
"label": "漏洞条目",
|
||||
"value": "undici--CVE-2025-22150"
|
||||
},
|
||||
{
|
||||
"label": "状态",
|
||||
"value": "人工分诊"
|
||||
},
|
||||
{
|
||||
"label": "阻塞原因",
|
||||
"value": "-"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
| Flask | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Ghost | `cms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Gin | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Gitea | `platforms` | `rolling-24m` | `-` | `yes` | `30` | `30` | `3` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-03-03T04:57:57.697708Z` |
|
||||
| Gitea | `platforms` | `rolling-24m` | `-` | `yes` | `37` | `37` | `3` | `seeded` | `real:37/synthetic:0/blocked:0` | `33` | `37` | `0` | `2026-03-03T04:57:57.697708Z` |
|
||||
| GitLab CE | `platforms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Grafana | `platforms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Hapi | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
@@ -125,7 +125,7 @@
|
||||
| Medusa | `ecommerce` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Moodle | `cms` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| NestJS | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Next.js | `frameworks` | `history-full` | `yes` | `yes` | `24` | `24` | `3` | `seeded` | `real:1/synthetic:0/blocked:0` | `0` | `1` | `0` | `2026-03-13T22:00:36.554552Z` |
|
||||
| Next.js | `frameworks` | `history-full` | `yes` | `yes` | `26` | `26` | `3` | `seeded` | `real:26/synthetic:0/blocked:0` | `21` | `26` | `0` | `2026-03-13T22:14:13.665535Z` |
|
||||
| Nginx | `servers` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Node.js | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Nuxt | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
@@ -145,8 +145,8 @@
|
||||
| SvelteKit | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Symfony | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Traefik | `servers` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Undici | `frameworks` | `rolling-24m` | `-` | `yes` | `14` | `14` | `2` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-03-14T09:19:54.772219Z` |
|
||||
| Vite | `frameworks` | `history-full` | `yes` | `yes` | `12` | `12` | `3` | `seeded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `2026-02-04T04:37:24.129476Z` |
|
||||
| Undici | `frameworks` | `rolling-24m` | `-` | `yes` | `14` | `14` | `2` | `seeded` | `real:1/synthetic:0/blocked:0` | `0` | `1` | `0` | `2026-03-14T09:19:54.772219Z` |
|
||||
| Vite | `frameworks` | `history-full` | `yes` | `yes` | `12` | `12` | `3` | `seeded` | `real:3/synthetic:0/blocked:0` | `3` | `3` | `0` | `2026-02-04T04:37:24.129476Z` |
|
||||
| Vue | `frameworks` | `history-full` | `yes` | `yes` | `0` | `0` | `3` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| webpack | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
| Werkzeug | `frameworks` | `rolling-24m` | `-` | `yes` | `0` | `0` | `2` | `scaffolded` | `real:0/synthetic:0/blocked:0` | `0` | `0` | `0` | `` |
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>中文完整度报告</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #08111f;
|
||||
--panel: rgba(9, 18, 32, 0.9);
|
||||
--border: rgba(137, 171, 214, 0.2);
|
||||
--text: #f7fafc;
|
||||
--muted: #9fb3ca;
|
||||
--accent: #5eead4;
|
||||
}
|
||||
* { box-sizing: border-box; }
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
|
||||
color: var(--text);
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(94, 234, 212, 0.12), transparent 26%),
|
||||
linear-gradient(160deg, #050c16 0%, #091526 50%, #10233d 100%);
|
||||
}
|
||||
main {
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
padding: 32px 20px 40px;
|
||||
}
|
||||
.panel {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 20px;
|
||||
padding: 24px;
|
||||
box-shadow: 0 24px 80px rgba(1, 7, 20, 0.45);
|
||||
}
|
||||
.actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
.chip {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
border-radius: 999px;
|
||||
border: 1px solid var(--border);
|
||||
padding: 10px 14px;
|
||||
color: var(--text);
|
||||
background: rgba(255,255,255,0.05);
|
||||
text-decoration: none;
|
||||
}
|
||||
.chip:hover { border-color: rgba(94, 234, 212, 0.42); }
|
||||
h1 {
|
||||
margin: 0 0 12px;
|
||||
font-family: "IBM Plex Serif", Georgia, serif;
|
||||
font-size: clamp(1.8rem, 4vw, 3rem);
|
||||
line-height: 1.08;
|
||||
}
|
||||
.meta {
|
||||
color: var(--muted);
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
pre {
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
overflow: auto;
|
||||
border-radius: 16px;
|
||||
border: 1px solid rgba(137, 171, 214, 0.12);
|
||||
background: rgba(2, 8, 22, 0.84);
|
||||
color: #d6e5f5;
|
||||
font-family: "IBM Plex Mono", "SFMono-Regular", monospace;
|
||||
font-size: 0.92rem;
|
||||
line-height: 1.6;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="panel">
|
||||
<div class="actions">
|
||||
<a class="chip" href="/overview/index.html">返回工作台</a>
|
||||
</div>
|
||||
<h1>中文完整度报告</h1>
|
||||
<div class="meta">工作台内置镜像页:89 条 advisory 最新完整度、family 矩阵与 ingest 健康度。</div>
|
||||
<pre># 全库 Advisory 完整度报告
|
||||
|
||||
- 生成时间: `2026-03-18T03:59:28+00:00`
|
||||
- 最新 advisory 完整度: `67/89` `verified-real`
|
||||
- 合成验证数量: `0`
|
||||
- 阻塞数量: `0`
|
||||
- 人工/待补证据数量: `22`
|
||||
- 完整度百分比: `75.3%`
|
||||
|
||||
## 系统覆盖矩阵
|
||||
|
||||
| 系统 | 总数 | verified-real | verified-synthetic | blocked | manual | family 覆盖 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| gitea | 37 | 37 | 0 | 0 | 0 | authz-bypass(3/3), file-upload(2/2), proxy-boundary(26/26), ssrf(1/1), xss(5/5) |
|
||||
| nextjs | 26 | 26 | 0 | 0 | 0 | authz-bypass(2/2), deserialization(1/1), proxy-boundary(19/19), ssrf(2/2), xss(2/2) |
|
||||
| undici | 14 | 1 | 0 | 0 | 13 | ssrf(1/14) |
|
||||
| vite | 12 | 3 | 0 | 0 | 9 | file-upload(0/9), proxy-boundary(2/2), xss(1/1) |
|
||||
|
||||
## 历史阻塞项修复纪要
|
||||
|
||||
- Docker daemon unavailable caused provision-compose-environment blocked-artifact.
|
||||
- Family profiles previously used note-only attack runners and dry-run placeholders.
|
||||
- Baseline and browser steps were skipped when environment readiness was not enforced.
|
||||
- Latest completeness now uses one advisory -> latest run semantics instead of historical run piles.
|
||||
|
||||
## Ingest / Source 健康度
|
||||
|
||||
- source failures: `7`
|
||||
- wordpress::NVD WordPress::SSLError
|
||||
- wordpress::WPScan Vulnerability Database::SSLError
|
||||
- wordpress::PortSwigger Research::SSLError
|
||||
- magento-open-source::Magento GitHub Advisories::SSLError
|
||||
- nodejs::Node.js Security Releases::SSLError
|
||||
- nginx::NGINX Security Advisories::SSLError
|
||||
- gitea::GitHub Gitea Advisories::SSLError
|
||||
|
||||
## 剩余风险说明
|
||||
|
||||
- 本报告按 advisory 的最新 run 计算;历史失败 run 仅保留审计价值,不再污染完整度数字。
|
||||
- `browser_required=true` 的案例必须同时存在基线与攻击后浏览器证据,缺失则不会进入 `verified-real`。
|
||||
- source collector 健康度单独计数;只有当 failures 归零时,报告与 dashboard 才算真正全绿。
|
||||
</pre>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -11,6 +11,7 @@
|
||||
"success_criteria": [
|
||||
"Protected route or action is evaluated with controlled credentials and logged."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -26,6 +27,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -47,6 +50,7 @@
|
||||
"success_criteria": [
|
||||
"Deserialization path is confirmed without executing destructive gadget chains."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -62,6 +66,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -83,6 +89,7 @@
|
||||
"success_criteria": [
|
||||
"Upload acceptance or bypass path is demonstrated with reversible test artifacts."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -98,6 +105,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -119,6 +128,7 @@
|
||||
"success_criteria": [
|
||||
"Misconfiguration indicator is captured with HTTP or server evidence."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -144,6 +154,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -165,6 +177,7 @@
|
||||
"success_criteria": [
|
||||
"Marker file outside intended root becomes reachable or denial path is confirmed."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -180,6 +193,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -201,6 +216,7 @@
|
||||
"success_criteria": [
|
||||
"Extension-specific attack path is demonstrated or blocked with artifact evidence."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -216,6 +232,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -237,6 +255,7 @@
|
||||
"success_criteria": [
|
||||
"Header trust discrepancy is captured with upstream/downstream logs."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -252,6 +271,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -273,6 +294,7 @@
|
||||
"success_criteria": [
|
||||
"Proxy and backend parse disagreement is captured in evidence."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -288,6 +310,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -309,6 +333,7 @@
|
||||
"success_criteria": [
|
||||
"Cookie, storage or fixation issue is captured with browser and header evidence."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -334,6 +359,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -355,6 +382,7 @@
|
||||
"success_criteria": [
|
||||
"Time-based or error-based probe lands with non-destructive evidence."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -380,6 +408,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -401,6 +431,7 @@
|
||||
"success_criteria": [
|
||||
"Request sink receives expected callback without crossing authorization boundaries."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -416,6 +447,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -437,6 +470,7 @@
|
||||
"success_criteria": [
|
||||
"Template evaluation path is proven with harmless marker output."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -452,6 +486,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -473,6 +509,7 @@
|
||||
"success_criteria": [
|
||||
"Browser evidence confirms payload reflection or DOM sink execution path."
|
||||
],
|
||||
"success_assertions": [],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -501,6 +538,8 @@
|
||||
"required": true,
|
||||
"strategy": "reflect-or-render"
|
||||
},
|
||||
"runner_id": null,
|
||||
"fixture_path": null,
|
||||
"allowed_target_types": [
|
||||
"lab-local",
|
||||
"lab-public",
|
||||
@@ -522,6 +561,16 @@
|
||||
"success_criteria": [
|
||||
"Controlled guest request reaches the protected admin route inside the fixture."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -537,6 +586,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "gitea.authz-bypass",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/authz-bypass",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -556,6 +607,20 @@
|
||||
"success_criteria": [
|
||||
"Inert upload marker is accepted and listed on the proof page."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -571,6 +636,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "gitea.file-upload",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/file-upload",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -590,6 +657,20 @@
|
||||
"success_criteria": [
|
||||
"Local fixture proves trusted proxy headers cross the admin boundary."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -605,6 +686,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "gitea.proxy-boundary",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/proxy-boundary",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -624,6 +707,16 @@
|
||||
"success_criteria": [
|
||||
"Server-side callback reaches the local sink and is recorded in proof output."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -639,6 +732,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "gitea.ssrf",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/ssrf",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -658,6 +753,20 @@
|
||||
"success_criteria": [
|
||||
"Browser proof page renders the stored XSS marker after the controlled payload."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -673,6 +782,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "gitea.xss",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/xss",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -692,6 +803,16 @@
|
||||
"success_criteria": [
|
||||
"Protected route is reachable only after the controlled bypass proof step."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -707,6 +828,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "nextjs.authz-bypass",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/authz-bypass",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -726,6 +849,16 @@
|
||||
"success_criteria": [
|
||||
"Inert decoded object marker is present without executing a gadget chain."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -741,6 +874,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "nextjs.deserialization",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/deserialization",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -760,6 +895,20 @@
|
||||
"success_criteria": [
|
||||
"Middleware trust-boundary proof is visible on the browser proof page."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -775,6 +924,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "nextjs.proxy-boundary",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/proxy-boundary",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -794,6 +945,16 @@
|
||||
"success_criteria": [
|
||||
"Local sink callback is observed from the server-side fetch path."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -809,6 +970,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "nextjs.ssrf",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/ssrf",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -828,6 +991,20 @@
|
||||
"success_criteria": [
|
||||
"Browser proof page shows the XSS execution marker after the controlled payload."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -843,6 +1020,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "nextjs.xss",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/xss",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -862,6 +1041,16 @@
|
||||
"success_criteria": [
|
||||
"SSRF proof endpoint confirms only local sink callbacks were performed."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -877,6 +1066,8 @@
|
||||
"browser_assertions": {
|
||||
"required": false
|
||||
},
|
||||
"runner_id": "undici.ssrf",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/undici/ssrf",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -896,6 +1087,20 @@
|
||||
"success_criteria": [
|
||||
"Uploaded inert marker is shown on the browser proof page."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -911,6 +1116,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "vite.file-upload",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/file-upload",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -930,6 +1137,20 @@
|
||||
"success_criteria": [
|
||||
"Proxy boundary proof banner is visible in the captured browser evidence."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -945,6 +1166,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "vite.proxy-boundary",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/proxy-boundary",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
@@ -964,6 +1187,20 @@
|
||||
"success_criteria": [
|
||||
"Browser proof page shows the controlled XSS marker after attack."
|
||||
],
|
||||
"success_assertions": [
|
||||
{
|
||||
"name": "baseline-ok",
|
||||
"type": "baseline-ok"
|
||||
},
|
||||
{
|
||||
"name": "runner-success",
|
||||
"type": "runner-success"
|
||||
},
|
||||
{
|
||||
"name": "browser-present",
|
||||
"type": "browser-present"
|
||||
}
|
||||
],
|
||||
"seed_actions": [
|
||||
{
|
||||
"kind": "note",
|
||||
@@ -979,6 +1216,8 @@
|
||||
"browser_assertions": {
|
||||
"required": true
|
||||
},
|
||||
"runner_id": "vite.xss",
|
||||
"fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/xss",
|
||||
"allowed_target_types": [
|
||||
"lab-local"
|
||||
],
|
||||
|
||||
文件差异内容过多而无法显示
加载差异
@@ -1,95 +1,319 @@
|
||||
{
|
||||
"generated_at": "2026-03-18T01:29:52+00:00",
|
||||
"advisory_count": 80,
|
||||
"run_count": 11,
|
||||
"generated_at": "2026-03-18T03:59:28+00:00",
|
||||
"advisory_count": 89,
|
||||
"run_count": 114,
|
||||
"statuses": {
|
||||
"verified-real": 8,
|
||||
"blocked-artifact": 2,
|
||||
"verified-real": 67,
|
||||
"triage-manual": 22
|
||||
},
|
||||
"run_statuses": {
|
||||
"verified-real": 110,
|
||||
"blocked-artifact": 3,
|
||||
"triage-manual": 1
|
||||
},
|
||||
"recent_failures": [
|
||||
{
|
||||
"run_id": "gitea-livecheck-20260316",
|
||||
"advisory_id": "gitea--CVE-2025-68939",
|
||||
"status": "blocked-artifact",
|
||||
"title": null,
|
||||
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
},
|
||||
{
|
||||
"run_id": "gitea-gitea--CVE-2025-68939-20260317063330",
|
||||
"advisory_id": "gitea--CVE-2025-68939",
|
||||
"status": "blocked-artifact",
|
||||
"title": null,
|
||||
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
|
||||
},
|
||||
{
|
||||
"run_id": "nextjs-nextjs--CVE-2025-29927-20260317063047",
|
||||
"advisory_id": "nextjs--CVE-2025-29927",
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-1525",
|
||||
"status": "triage-manual",
|
||||
"title": null,
|
||||
"blocked_reason": "dry-run only"
|
||||
"title": "Undici has an HTTP Request/Response Smuggling issue",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-1528",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici: Malicious WebSocket 64-bit length overflows parser and crashes the client",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2022-32210",
|
||||
"status": "triage-manual",
|
||||
"title": "ProxyAgent vulnerable to MITM",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-2229",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits Validation",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-1527",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici has CRLF Injection in undici via `upgrade` option",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-1526",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici has Unbounded Memory Consumption in WebSocket permessage-deflate Decompression",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-2581",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoS",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2025-47279",
|
||||
"status": "triage-manual",
|
||||
"title": "undici Denial of Service attack via bad certificate data",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-31125",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite has a `server.fs.deny` bypassed for `inline` and `raw` with `?import` query",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-58752",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite's `server.fs` settings were not applied to HTML files",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-58751",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite middleware may serve files starting with the same name with the public directory",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-62522",
|
||||
"status": "triage-manual",
|
||||
"title": "vite allows server.fs.deny bypass via backslash on Windows",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-32395",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite has an `server.fs.deny` bypass with an invalid `request-target`",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2024-45811",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite's `server.fs.deny` is bypassed when using `?import&raw`",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-31486",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite allows server.fs.deny to be bypassed with .svg or relative paths",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-46565",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite's server.fs.deny bypassed with /. for files under project root",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "vite--CVE-2025-30208",
|
||||
"status": "triage-manual",
|
||||
"title": "Vite bypasses server.fs.deny when using ?raw??",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2026-22036",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2023-45143",
|
||||
"status": "triage-manual",
|
||||
"title": "Undici's cookie header not cleared on cross-origin redirect in fetch",
|
||||
"blocked_reason": null
|
||||
},
|
||||
{
|
||||
"run_id": "",
|
||||
"advisory_id": "undici--CVE-2025-22150",
|
||||
"status": "triage-manual",
|
||||
"title": "Use of Insufficiently Random Values in undici",
|
||||
"blocked_reason": null
|
||||
}
|
||||
],
|
||||
"systems": [
|
||||
{
|
||||
"system_id": "gitea",
|
||||
"display_name": "Gitea",
|
||||
"total": 30,
|
||||
"verified_real": 0,
|
||||
"total": 37,
|
||||
"verified_real": 37,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 30,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"manual": 0,
|
||||
"browser_required": 5,
|
||||
"browser_present": 33,
|
||||
"latest_update": "2026-03-03T04:57:57.697708Z",
|
||||
"category": "platforms",
|
||||
"tier": "rolling-24m",
|
||||
"output_dir": "07-framework-security/platforms/gitea"
|
||||
"output_dir": "07-framework-security/platforms/gitea",
|
||||
"families": [
|
||||
{
|
||||
"family": "authz-bypass",
|
||||
"total": 3,
|
||||
"verified_real": 3,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "file-upload",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 26,
|
||||
"verified_real": 26,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 5,
|
||||
"verified_real": 5,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "nextjs",
|
||||
"display_name": "Next.js",
|
||||
"total": 24,
|
||||
"verified_real": 1,
|
||||
"total": 26,
|
||||
"verified_real": 26,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 23,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"latest_update": "2026-03-13T22:00:36.554552Z",
|
||||
"manual": 0,
|
||||
"browser_required": 2,
|
||||
"browser_present": 21,
|
||||
"latest_update": "2026-03-13T22:14:13.665535Z",
|
||||
"category": "frameworks",
|
||||
"tier": "history-full",
|
||||
"output_dir": "07-framework-security/frameworks/nextjs"
|
||||
"output_dir": "07-framework-security/frameworks/nextjs",
|
||||
"families": [
|
||||
{
|
||||
"family": "authz-bypass",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "deserialization",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 19,
|
||||
"verified_real": 19,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "undici",
|
||||
"display_name": "Undici",
|
||||
"total": 14,
|
||||
"verified_real": 0,
|
||||
"verified_real": 1,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 14,
|
||||
"manual": 13,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"latest_update": "2026-03-14T09:19:54.772219Z",
|
||||
"category": "frameworks",
|
||||
"tier": "rolling-24m",
|
||||
"output_dir": "07-framework-security/frameworks/undici"
|
||||
"output_dir": "07-framework-security/frameworks/undici",
|
||||
"families": [
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 14,
|
||||
"verified_real": 1,
|
||||
"manual": 13
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "vite",
|
||||
"display_name": "Vite",
|
||||
"total": 12,
|
||||
"verified_real": 0,
|
||||
"verified_real": 3,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 12,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"manual": 9,
|
||||
"browser_required": 3,
|
||||
"browser_present": 3,
|
||||
"latest_update": "2026-02-04T04:37:24.129476Z",
|
||||
"category": "frameworks",
|
||||
"tier": "history-full",
|
||||
"output_dir": "07-framework-security/frameworks/vite"
|
||||
"output_dir": "07-framework-security/frameworks/vite",
|
||||
"families": [
|
||||
{
|
||||
"family": "file-upload",
|
||||
"total": 9,
|
||||
"verified_real": 0,
|
||||
"manual": 9
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"completeness": {
|
||||
"advisory_total": 89,
|
||||
"verified_real": 67,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 22,
|
||||
"verified_ratio": 75.3,
|
||||
"complete": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,61 +2,153 @@
|
||||
{
|
||||
"system_id": "gitea",
|
||||
"display_name": "Gitea",
|
||||
"total": 30,
|
||||
"verified_real": 0,
|
||||
"total": 37,
|
||||
"verified_real": 37,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 30,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"manual": 0,
|
||||
"browser_required": 5,
|
||||
"browser_present": 33,
|
||||
"latest_update": "2026-03-03T04:57:57.697708Z",
|
||||
"category": "platforms",
|
||||
"tier": "rolling-24m",
|
||||
"output_dir": "07-framework-security/platforms/gitea"
|
||||
"output_dir": "07-framework-security/platforms/gitea",
|
||||
"families": [
|
||||
{
|
||||
"family": "authz-bypass",
|
||||
"total": 3,
|
||||
"verified_real": 3,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "file-upload",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 26,
|
||||
"verified_real": 26,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 5,
|
||||
"verified_real": 5,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "nextjs",
|
||||
"display_name": "Next.js",
|
||||
"total": 24,
|
||||
"verified_real": 1,
|
||||
"total": 26,
|
||||
"verified_real": 26,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 23,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"latest_update": "2026-03-13T22:00:36.554552Z",
|
||||
"manual": 0,
|
||||
"browser_required": 2,
|
||||
"browser_present": 21,
|
||||
"latest_update": "2026-03-13T22:14:13.665535Z",
|
||||
"category": "frameworks",
|
||||
"tier": "history-full",
|
||||
"output_dir": "07-framework-security/frameworks/nextjs"
|
||||
"output_dir": "07-framework-security/frameworks/nextjs",
|
||||
"families": [
|
||||
{
|
||||
"family": "authz-bypass",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "deserialization",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 19,
|
||||
"verified_real": 19,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "undici",
|
||||
"display_name": "Undici",
|
||||
"total": 14,
|
||||
"verified_real": 0,
|
||||
"verified_real": 1,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 14,
|
||||
"manual": 13,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"latest_update": "2026-03-14T09:19:54.772219Z",
|
||||
"category": "frameworks",
|
||||
"tier": "rolling-24m",
|
||||
"output_dir": "07-framework-security/frameworks/undici"
|
||||
"output_dir": "07-framework-security/frameworks/undici",
|
||||
"families": [
|
||||
{
|
||||
"family": "ssrf",
|
||||
"total": 14,
|
||||
"verified_real": 1,
|
||||
"manual": 13
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"system_id": "vite",
|
||||
"display_name": "Vite",
|
||||
"total": 12,
|
||||
"verified_real": 0,
|
||||
"verified_real": 3,
|
||||
"verified_synthetic": 0,
|
||||
"blocked": 0,
|
||||
"manual": 12,
|
||||
"browser_required": 0,
|
||||
"browser_present": 0,
|
||||
"manual": 9,
|
||||
"browser_required": 3,
|
||||
"browser_present": 3,
|
||||
"latest_update": "2026-02-04T04:37:24.129476Z",
|
||||
"category": "frameworks",
|
||||
"tier": "history-full",
|
||||
"output_dir": "07-framework-security/frameworks/vite"
|
||||
"output_dir": "07-framework-security/frameworks/vite",
|
||||
"families": [
|
||||
{
|
||||
"family": "file-upload",
|
||||
"total": 9,
|
||||
"verified_real": 0,
|
||||
"manual": 9
|
||||
},
|
||||
{
|
||||
"family": "proxy-boundary",
|
||||
"total": 2,
|
||||
"verified_real": 2,
|
||||
"manual": 0
|
||||
},
|
||||
{
|
||||
"family": "xss",
|
||||
"total": 1,
|
||||
"verified_real": 1,
|
||||
"manual": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# 最新同步摘要
|
||||
|
||||
- 渲染时间: `2026-03-18T01:29:52+00:00`
|
||||
- 渲染时间: `2026-03-18T03:59:19+00:00`
|
||||
- 系统数量: `62`
|
||||
- Advisory 数量: `80`
|
||||
- 重点 Markdown 数量: `80`
|
||||
- Run Bundle 数量: `10`
|
||||
- Advisory 数量: `89`
|
||||
- 重点 Markdown 数量: `89`
|
||||
- Run Bundle 数量: `67`
|
||||
- 新增记录: `0`
|
||||
- 更新记录: `0`
|
||||
- Triage 数量: `0`
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"generated_at": "2026-03-18T01:29:52+00:00",
|
||||
"generated_at": "2026-03-18T03:59:19+00:00",
|
||||
"system_count": 62,
|
||||
"advisory_count": 80,
|
||||
"markdown_count": 80,
|
||||
"advisory_count": 89,
|
||||
"markdown_count": 89,
|
||||
"new_count": 0,
|
||||
"updated_count": 0,
|
||||
"systems_touched": [],
|
||||
"triage_count": 0,
|
||||
"run_bundle_count": 10,
|
||||
"run_bundle_count": 67,
|
||||
"failures": [
|
||||
"wordpress::NVD WordPress::SSLError",
|
||||
"wordpress::WPScan Vulnerability Database::SSLError",
|
||||
|
||||
在新工单中引用
屏蔽一个用户