0sec-cli 0.15.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/0sec.js +327 -0
- package/README.md +68 -48
- package/attacks/data-exfiltration/pii-leakage.yaml +27 -0
- package/attacks/encoding-bypass/base64-encoding.yaml +24 -0
- package/attacks/jailbreak/dan-roleplay.yaml +27 -0
- package/attacks/jailbreak/hypothetical-scenario.yaml +25 -0
- package/attacks/jailbreak/multilingual-bypass.yaml +22 -0
- package/attacks/output-manipulation/harmful-content.yaml +25 -0
- package/attacks/prompt-injection/context-manipulation.yaml +32 -0
- package/attacks/prompt-injection/direct-injection.yaml +28 -0
- package/attacks/prompt-injection/indirect-injection.yaml +33 -0
- package/attacks/system-prompt-extraction/direct-ask.yaml +30 -0
- package/attacks/system-prompt-extraction/markdown-exfil.yaml +26 -0
- package/attacks/tool-misuse/ssrf-via-tools.yaml +27 -0
- package/chunks/adapt-loop-SMH6V4PD.js +18 -0
- package/chunks/adgraph-JLGA6RYI.js +54 -0
- package/chunks/agent/skills/frameworks/entra-id.yaml +63 -0
- package/chunks/agent/skills/frameworks/graphql-introspection.yaml +116 -0
- package/chunks/agent/skills/frameworks/nextjs.yaml +82 -0
- package/chunks/agent/skills/frameworks/python-web.yaml +85 -0
- package/chunks/agent/skills/frameworks/supabase.yaml +83 -0
- package/chunks/agent/skills/frameworks/wordpress-deep.yaml +122 -0
- package/chunks/agent/skills/techniques/ad-attack-paths.yaml +57 -0
- package/chunks/agent/skills/techniques/advisory-disclosure.yaml +59 -0
- package/chunks/agent/skills/techniques/assumption-mining.yaml +53 -0
- package/chunks/agent/skills/techniques/blind-exploitation.yaml +143 -0
- package/chunks/agent/skills/techniques/crypto-misuse.yaml +88 -0
- package/chunks/agent/skills/techniques/cve-poc-adaptation.yaml +82 -0
- package/chunks/agent/skills/techniques/entra-attack-paths.yaml +55 -0
- package/chunks/agent/skills/techniques/http-conformance-diff.yaml +48 -0
- package/chunks/agent/skills/techniques/jwt-attacks.yaml +137 -0
- package/chunks/agent/skills/techniques/kernel-weaponization.yaml +53 -0
- package/chunks/agent/skills/techniques/llm-excessive-agency.yaml +55 -0
- package/chunks/agent/skills/techniques/llm-insecure-output-handling.yaml +56 -0
- package/chunks/agent/skills/techniques/llm-prompt-injection.yaml +54 -0
- package/chunks/agent/skills/techniques/llm-prompt-layer-write.yaml +68 -0
- package/chunks/agent/skills/techniques/llm-rag-poisoning.yaml +57 -0
- package/chunks/agent/skills/techniques/llm-safety-eval.yaml +51 -0
- package/chunks/agent/skills/techniques/npm-ecosystem.yaml +51 -0
- package/chunks/agent/skills/techniques/poc-verification.yaml +55 -0
- package/chunks/agent/skills/techniques/race-condition.yaml +122 -0
- package/chunks/agent/skills/techniques/scoped-fix.yaml +49 -0
- package/chunks/agent/skills/techniques/seedless-depth-review.yaml +59 -0
- package/chunks/agent/skills/techniques/spec-differential.yaml +48 -0
- package/chunks/agent/skills/techniques/variant-hunting.yaml +55 -0
- package/chunks/agent/skills/vulnerabilities/cardano-eutxo-validators.yaml +72 -0
- package/chunks/agent/skills/vulnerabilities/command-injection.yaml +99 -0
- package/chunks/agent/skills/vulnerabilities/deserialization-chains.yaml +106 -0
- package/chunks/agent/skills/vulnerabilities/native-memory-safety.yaml +93 -0
- package/chunks/agent/skills/vulnerabilities/path-traversal.yaml +78 -0
- package/chunks/agent/skills/vulnerabilities/prototype-pollution.yaml +132 -0
- package/chunks/agent/skills/vulnerabilities/request-smuggling.yaml +129 -0
- package/chunks/agent/skills/vulnerabilities/sqli-advanced.yaml +102 -0
- package/chunks/agent/skills/vulnerabilities/ssrf-bypass.yaml +84 -0
- package/chunks/agent/skills/vulnerabilities/ssti-exploitation.yaml +112 -0
- package/chunks/agent/skills/vulnerabilities/structural-sqli.yaml +91 -0
- package/chunks/appsec-catalog-CBWHGTEL.js +24 -0
- package/chunks/artifact-scraper-HQ7HLP6V.js +34 -0
- package/chunks/assumption-mining-5SNIVVDN.js +79 -0
- package/chunks/chunk-242TMK6G.js +110 -0
- package/chunks/chunk-2JCCA2JL.js +381 -0
- package/chunks/chunk-2RMLOJVB.js +47 -0
- package/chunks/chunk-3KPWWJCI.js +1422 -0
- package/chunks/chunk-3MOLBTLS.js +953 -0
- package/chunks/chunk-53G27VPS.js +136 -0
- package/chunks/chunk-57ZENEX2.js +169 -0
- package/chunks/chunk-5G3ZXFBW.js +182 -0
- package/chunks/chunk-5JI7L7KV.js +74240 -0
- package/chunks/chunk-6L26OBWI.js +1094 -0
- package/chunks/chunk-6LKRLK2R.js +542 -0
- package/chunks/chunk-72CISA2D.js +2597 -0
- package/chunks/chunk-7DQEV5QI.js +287 -0
- package/chunks/chunk-AD7WXDH6.js +3250 -0
- package/chunks/chunk-ADOLI6DT.js +102 -0
- package/chunks/chunk-AHTBZC3E.js +596 -0
- package/chunks/chunk-ASUR522M.js +518 -0
- package/chunks/chunk-ATATQACO.js +471 -0
- package/chunks/chunk-BATRQBOR.js +1732 -0
- package/chunks/chunk-BFR2CDV5.js +5735 -0
- package/chunks/chunk-BFRB6HB2.js +235 -0
- package/chunks/chunk-BKZFDZ23.js +361 -0
- package/chunks/chunk-BVAZO4WA.js +193 -0
- package/chunks/chunk-BZNEY2ZS.js +33225 -0
- package/chunks/chunk-C2WXWFBB.js +1070 -0
- package/chunks/chunk-CMKXP5RR.js +917 -0
- package/chunks/chunk-DW5UWPFY.js +275 -0
- package/chunks/chunk-F3WBKITT.js +687 -0
- package/chunks/chunk-GMT2AZKM.js +2439 -0
- package/chunks/chunk-H2FFLZNK.js +3 -0
- package/chunks/chunk-IOL7D5YV.js +515 -0
- package/chunks/chunk-IR537GON.js +49 -0
- package/chunks/chunk-JQHOLLTD.js +3729 -0
- package/chunks/chunk-KLTNTE2Z.js +121 -0
- package/chunks/chunk-LP3HHYQU.js +245 -0
- package/chunks/chunk-MYVT64FN.js +16 -0
- package/chunks/chunk-N7BOUYEV.js +852 -0
- package/chunks/chunk-OEFNRYI2.js +150 -0
- package/chunks/chunk-P6WKNFWX.js +1968 -0
- package/chunks/chunk-QI233I24.js +333 -0
- package/chunks/chunk-RJWOYEOG.js +271 -0
- package/chunks/chunk-RRMJC3ZE.js +105 -0
- package/chunks/chunk-RWONANDA.js +973 -0
- package/chunks/chunk-SAFFWQW4.js +5921 -0
- package/chunks/chunk-SF4KZ4O3.js +502 -0
- package/chunks/chunk-SVJEDVYK.js +808 -0
- package/chunks/chunk-TSK2AG6J.js +5108 -0
- package/chunks/chunk-U5FLXGHT.js +2010 -0
- package/chunks/chunk-UCYRA73C.js +662 -0
- package/chunks/chunk-UR4ELX2Y.js +4784 -0
- package/chunks/chunk-VQG4FT5D.js +685 -0
- package/chunks/chunk-WEBMRWEG.js +9337 -0
- package/chunks/chunk-WU6AFRAZ.js +1167 -0
- package/chunks/chunk-WVTBZEQO.js +1531 -0
- package/chunks/chunk-WXQ6BJ6A.js +596 -0
- package/chunks/chunk-XM5NLHYU.js +600 -0
- package/chunks/chunk-YLMN3N25.js +4054 -0
- package/chunks/chunk-YYRBQVFE.js +2572 -0
- package/chunks/chunk-Z5FA2XOX.js +2798 -0
- package/chunks/commands-TBC2F5CE.js +16999 -0
- package/chunks/corpus-v1.json +403 -0
- package/chunks/cost-ledger-NU63MYZM.js +13 -0
- package/chunks/data/appsec-archetypes.json +102 -0
- package/chunks/data/chromium-archetypes.json +204 -0
- package/chunks/data/freebsd-archetypes.json +171 -0
- package/chunks/data/kernel-archetypes.json +611 -0
- package/chunks/db-KFWOAUUB.js +16 -0
- package/chunks/disclose-EKTWSCGW.js +132 -0
- package/chunks/dist-4MAW5X6L.js +74 -0
- package/chunks/dist-4YICS2J2.js +2776 -0
- package/chunks/dist-FMGSR3DW.js +159 -0
- package/chunks/eval-runner-7ZF472KV.js +27 -0
- package/chunks/example-manifest.json +95 -0
- package/chunks/exploit-agent-45YQOHPJ.js +98 -0
- package/chunks/exploit-autoclimb-UZGEMGYT.js +81 -0
- package/chunks/exploit-climb-SG23KB2G.js +358 -0
- package/chunks/fix-IG7LYXH3.js +12 -0
- package/chunks/github-issues-MJ6OYOOU.js +157 -0
- package/chunks/harness-7ODOLOWU.js +22 -0
- package/chunks/http-conformance-DU66MZIU.js +11 -0
- package/chunks/http-sender-GWH2IYEA.js +10 -0
- package/chunks/hunt-scan-MMKUOETU.js +38 -0
- package/chunks/identity-6ZAIIWOR.js +191 -0
- package/chunks/kernel-primitive-7U6CWHXD.js +44 -0
- package/chunks/kernel-vm-runner-3JAU4O6J.js +62 -0
- package/chunks/memsafety-scan-J7SECV5W.js +16 -0
- package/chunks/native-loop-RJCJPOUS.js +54 -0
- package/chunks/npm-detectors-KB5Y5ZFX.js +69 -0
- package/chunks/npm-dynamic-discovery-AHROOZDB.js +13 -0
- package/chunks/orchestrate-OC2VZN2X.js +62 -0
- package/chunks/pipeline-BZK5BLJR.js +14 -0
- package/chunks/pre-recon-cve-66EB6G4M.js +351 -0
- package/chunks/prepare-MYY743TK.js +13 -0
- package/chunks/process-LQRCS5OY.js +13 -0
- package/chunks/replay-runner-45G3VU7X.js +39 -0
- package/chunks/run-D56MPDKY.js +32716 -0
- package/chunks/runtime-G7YWIO3B.js +43 -0
- package/chunks/runtime-J7PLXZNM.js +12 -0
- package/chunks/scan-stream-FHI2FYZE.js +96 -0
- package/chunks/scope-BI7BF4ZY.js +18 -0
- package/chunks/session-store-GZ4A4KYT.js +28 -0
- package/chunks/source-files-PWRQR6LY.js +12 -0
- package/chunks/specdrift-WCLH6TTQ.js +19 -0
- package/chunks/variant-candidates-YERCYMPD.js +13 -0
- package/chunks/web-recon-prepass-JJGPEOLE.js +1148 -0
- package/dashboard/assets/0sec-icon-66SreztZ.gif +0 -0
- package/dashboard/assets/bot-yILPnRgD.js +1 -0
- package/dashboard/assets/chevron-down-BeDJ-Vka.js +1 -0
- package/dashboard/assets/circle-alert-BEnMBMT-.js +1 -0
- package/dashboard/assets/client-DRYsuOGl.js +9 -0
- package/dashboard/assets/copy-Bi5vzoF9.js +1 -0
- package/dashboard/assets/desktop-CXTQonNm.js +32 -0
- package/dashboard/assets/desktop-NOekk4QS.css +1 -0
- package/dashboard/assets/dist-CmX-h7a4.js +1 -0
- package/dashboard/assets/dist-DAwYQmf_.js +45 -0
- package/dashboard/assets/findings-page-CACW9nw2.js +5 -0
- package/dashboard/assets/format-PoISqsES.js +1 -0
- package/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
- package/dashboard/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
- package/dashboard/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dashboard/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
- package/dashboard/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
- package/dashboard/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
- package/dashboard/assets/jsx-runtime-C7oxC63R.js +1 -0
- package/dashboard/assets/live-page-DrgQqQK5.js +1 -0
- package/dashboard/assets/meta-tile-CcskIV_o.js +1 -0
- package/dashboard/assets/operations-BKE8T-vY.css +2 -0
- package/dashboard/assets/operations-D8nUP5_m.js +4 -0
- package/dashboard/assets/operations-app-CQQhG54n.js +2 -0
- package/dashboard/assets/overview-page-DTGS8dPo.js +1 -0
- package/dashboard/assets/page-header-MFVvEtZW.js +1 -0
- package/dashboard/assets/play-Dwo-9xt6.js +1 -0
- package/dashboard/assets/scans-page-ChVtq8Us.js +1 -0
- package/dashboard/assets/search-CiooTLck.js +1 -0
- package/dashboard/assets/siren-CCBwTSuk.js +1 -0
- package/dashboard/assets/table-BYS-nIVA.js +1 -0
- package/dashboard/assets/tabs-DivxbhQy.js +1 -0
- package/dashboard/desktop.html +21 -0
- package/dashboard/index.html +15 -0
- package/package.json +30 -18
- package/bin/0sec.cjs +0 -361
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "0sec-bench-corpus-v1",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"_comment": "LABELED, UNCONTAMINATED REGRESSION CORPUS v1 (0sec#657). Ground truth the #656 A/B tournament + CI gate measures against. REFERENCES ONLY — no exploit material. A source-audit case is a PUBLIC registry coordinate (package@version) the engine installs at run time; a kernel case is a reproducerRef resolved OUTSIDE the repo. Positives are sourced from our own confirmed disclosures (disclosure/*.md); sinkMarkers are literal file/symbol substrings drawn from those writeups, used for DETERMINISTIC marker-based grading (never LLM-judged). Known-negatives are (a) real triage false-positive controls — findings the maintainer rejected as by-design / unreachable / superseded / refuted, where a 'verified' verdict is itself a false positive — and (b) PUBLIC fixed-CVE packages pinned at a PATCHED version: re-reporting the historical class there is a false positive. EMBARGO: references pending-disclosure findings; do not publish externally without operator approval (disclosure/AGENTS.md rules apply). Provenance + full label table: docs/operations/bench-corpus-v1.md.",
|
|
5
|
+
"cases": [
|
|
6
|
+
{
|
|
7
|
+
"id": "src-sequelize-set-sqli",
|
|
8
|
+
"name": "sequelize Sequelize.prototype.set SQLi via unescaped names/values",
|
|
9
|
+
"target": { "kind": "source-audit", "package": "sequelize", "version": "6.37.8", "ecosystem": "npm" },
|
|
10
|
+
"objective": { "type": "finding-match", "vulnClass": "sql-injection", "sinkMarkers": ["Sequelize.prototype.set", "quoteIdentifier", "sequelize.set"] },
|
|
11
|
+
"ci": true,
|
|
12
|
+
"tags": ["npm", "sqli", "disclosure"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "src-sequelize-fn-cast-json-sqli",
|
|
16
|
+
"name": "sequelize SQLi via fn(), cast(), json() APIs",
|
|
17
|
+
"target": { "kind": "source-audit", "package": "sequelize", "version": "6.37.8", "ecosystem": "npm" },
|
|
18
|
+
"objective": { "type": "finding-match", "vulnClass": "sql-injection", "sinkMarkers": ["ALLOWED_CAST_TYPES", "sequelize.fn", "sequelize.cast", "sequelize.json"] },
|
|
19
|
+
"tags": ["npm", "sqli", "disclosure"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "src-sequelize-pg-startup-sqli",
|
|
23
|
+
"name": "sequelize PostgreSQL connection-startup SQLi via dialectOptions",
|
|
24
|
+
"target": { "kind": "source-audit", "package": "sequelize", "version": "6.37.8", "ecosystem": "npm" },
|
|
25
|
+
"objective": { "type": "finding-match", "vulnClass": "sql-injection", "sinkMarkers": ["clientMinMessages", "SET client_min_messages TO", "dialectOptions"] },
|
|
26
|
+
"tags": ["npm", "sqli", "disclosure"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "src-eta-renderstring-ssti-rce",
|
|
30
|
+
"name": "eta SSTI to RCE via constructor chain in renderString",
|
|
31
|
+
"target": { "kind": "source-audit", "package": "eta", "version": "4.5.1", "ecosystem": "npm" },
|
|
32
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["renderString", "renderStringAsync", "new Function", "constructor"] },
|
|
33
|
+
"ci": true,
|
|
34
|
+
"tags": ["npm", "ssti-rce", "disclosure"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "src-nunjucks-ssti-rce",
|
|
38
|
+
"name": "nunjucks SSTI to RCE via constructor chain in renderString()",
|
|
39
|
+
"target": { "kind": "source-audit", "package": "nunjucks", "version": "3.2.4", "ecosystem": "npm" },
|
|
40
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["memberLookup", "renderString", "new Template", "constructor"] },
|
|
41
|
+
"tags": ["npm", "ssti-rce", "disclosure"]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "src-expr-eval-tojsfunction-sandbox-escape",
|
|
45
|
+
"name": "expr-eval toJSFunction sandbox escape to RCE via global-scope leak",
|
|
46
|
+
"target": { "kind": "source-audit", "package": "expr-eval", "version": "2.0.2", "ecosystem": "npm" },
|
|
47
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["toJSFunction", "new Function"] },
|
|
48
|
+
"tags": ["npm", "sandbox-escape", "disclosure"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "src-mathjs-sandbox-escape-chain-import",
|
|
52
|
+
"name": "mathjs sandbox escape via Chain.import from expression context",
|
|
53
|
+
"target": { "kind": "source-audit", "package": "mathjs", "version": "15.1.1", "ecosystem": "npm" },
|
|
54
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["Chain.import", "Chain.fromJSON", "math.import", "math.evaluate"] },
|
|
55
|
+
"tags": ["npm", "sandbox-escape", "disclosure"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "src-jsonpath-plus-vm-sandbox-escape",
|
|
59
|
+
"name": "jsonpath-plus VM sandbox escape via eval:'native'",
|
|
60
|
+
"target": { "kind": "source-audit", "package": "jsonpath-plus", "version": "10.4.0", "ecosystem": "npm" },
|
|
61
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["vm.Script", "constructor.constructor", "process.binding", "eval"] },
|
|
62
|
+
"tags": ["npm", "rce", "disclosure"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "src-vm2-sandbox-escape-vm-builtin",
|
|
66
|
+
"name": "vm2 sandbox escape via vm builtin module in NodeVM",
|
|
67
|
+
"target": { "kind": "source-audit", "package": "vm2", "version": "3.10.5", "ecosystem": "npm" },
|
|
68
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["runInThisContext", "NodeVM", "runInNewContext"] },
|
|
69
|
+
"tags": ["npm", "rce", "disclosure"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "src-pug-compileclient-name-toctou-rce",
|
|
73
|
+
"name": "pug compileClient() name option TOCTOU RCE (CVE-2024-36361 bypass)",
|
|
74
|
+
"target": { "kind": "source-audit", "package": "pug", "version": "3.0.3", "ecosystem": "npm" },
|
|
75
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["compileClientWithDependenciesTracked", "options.name", "isIdentifier"] },
|
|
76
|
+
"tags": ["npm", "rce", "disclosure"]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "src-dd-trace-esbuild-banner-code-injection",
|
|
80
|
+
"name": "dd-trace datadog-esbuild banner code injection via unescaped git remote URL",
|
|
81
|
+
"target": { "kind": "source-audit", "package": "dd-trace", "version": "5.26.0", "ecosystem": "npm" },
|
|
82
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["datadog-esbuild", "remote.origin.url", "repositoryURL", "DD_GIT_REPOSITORY_URL"] },
|
|
83
|
+
"tags": ["npm", "code-injection", "disclosure"]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "src-justeattakeaway-eslint-plugin-rce",
|
|
87
|
+
"name": "@justeattakeaway/eslint-plugin-snacks-pie-migration RCE via execSync command injection",
|
|
88
|
+
"target": { "kind": "source-audit", "package": "@justeattakeaway/eslint-plugin-snacks-pie-migration", "version": "0.7.1", "ecosystem": "npm" },
|
|
89
|
+
"objective": { "type": "finding-match", "vulnClass": "command-injection", "sinkMarkers": ["git-utils", "execSync", "isFileNew", "git cat-file"] },
|
|
90
|
+
"tags": ["npm", "command-injection", "disclosure"]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "src-express-session-constructor-proto-pollution",
|
|
94
|
+
"name": "express-session Session constructor prototype pollution from store data",
|
|
95
|
+
"target": { "kind": "source-audit", "package": "express-session", "version": "1.19.0", "ecosystem": "npm" },
|
|
96
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["createSession", "new Session", "__proto__"] },
|
|
97
|
+
"tags": ["npm", "prototype-pollution", "disclosure"]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "src-joi-object-rename-proto-pollution",
|
|
101
|
+
"name": "joi object.rename Template destination sets __proto__",
|
|
102
|
+
"target": { "kind": "source-audit", "package": "joi", "version": "18.1.2", "ecosystem": "npm" },
|
|
103
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["rename", "__proto__", "Joi.expression"] },
|
|
104
|
+
"tags": ["npm", "prototype-pollution", "disclosure"]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "src-jsonwebtoken-proto-pollution-gadget",
|
|
108
|
+
"name": "jsonwebtoken verify() prototype-pollution gadget bypasses expiry/algorithm checks",
|
|
109
|
+
"target": { "kind": "source-audit", "package": "jsonwebtoken", "version": "9.0.3", "ecosystem": "npm" },
|
|
110
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["Object.assign", "ignoreExpiration", "ignoreNotBefore", "clockTimestamp"] },
|
|
111
|
+
"tags": ["npm", "prototype-pollution", "disclosure"]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "src-jsonwebtoken-audience-regex-redos",
|
|
115
|
+
"name": "jsonwebtoken verify() audience regex ReDoS",
|
|
116
|
+
"target": { "kind": "source-audit", "package": "jsonwebtoken", "version": "9.0.3", "ecosystem": "npm" },
|
|
117
|
+
"objective": { "type": "finding-match", "vulnClass": "regex-dos", "sinkMarkers": ["options.audience", "payload.aud", ".test("] },
|
|
118
|
+
"tags": ["npm", "redos", "disclosure"]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "src-jsonata-tomillis-redos",
|
|
122
|
+
"name": "jsonata ReDoS in $toMillis ISO-8601 validation regex",
|
|
123
|
+
"target": { "kind": "source-audit", "package": "jsonata", "version": "2.1.0", "ecosystem": "npm" },
|
|
124
|
+
"objective": { "type": "finding-match", "vulnClass": "regex-dos", "sinkMarkers": ["toMillis", "(-[01]", "(-[0-3]"] },
|
|
125
|
+
"tags": ["npm", "redos", "disclosure"]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "src-extract-zip-symlink-chain-traversal",
|
|
129
|
+
"name": "extract-zip symlink-chain write outside opts.dir",
|
|
130
|
+
"target": { "kind": "source-audit", "package": "extract-zip", "version": "2.0.1", "ecosystem": "npm" },
|
|
131
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["opts.dir", "symlink"] },
|
|
132
|
+
"tags": ["npm", "zip-slip", "disclosure"]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "src-unzipper-prefix-check-sibling-escape",
|
|
136
|
+
"name": "unzipper zip-slip sibling escape via raw string-prefix containment check",
|
|
137
|
+
"target": { "kind": "source-audit", "package": "unzipper", "version": "0.12.3", "ecosystem": "npm" },
|
|
138
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["extractPath.indexOf", "Open.directory", "extract.js"] },
|
|
139
|
+
"tags": ["npm", "zip-slip", "disclosure"]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "src-ollama-image-path-auto-read",
|
|
143
|
+
"name": "ollama local file disclosure via image path auto-read",
|
|
144
|
+
"target": { "kind": "source-audit", "package": "ollama", "version": "0.5.11", "ecosystem": "npm" },
|
|
145
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["encodeImage", "existsSync", "readFile", "resolve(image)"] },
|
|
146
|
+
"tags": ["npm", "file-read", "disclosure"]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "src-wrangler-deploy-symlink-following",
|
|
150
|
+
"name": "wrangler (@cloudflare/workers-sdk) deploy symlink following via stat() instead of lstat()",
|
|
151
|
+
"target": { "kind": "source-audit", "package": "wrangler", "version": "4.20.0", "ecosystem": "npm" },
|
|
152
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["statSync", "lstatSync", "stat(", "lstat("] },
|
|
153
|
+
"tags": ["npm", "symlink-following", "disclosure"]
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"id": "src-next-auth-forwarded-host",
|
|
157
|
+
"name": "next-auth unvalidated forwarded host in trusted-host modes",
|
|
158
|
+
"target": { "kind": "source-audit", "package": "next-auth", "version": "4.24.13", "ecosystem": "npm" },
|
|
159
|
+
"objective": { "type": "finding-match", "vulnClass": "security-misconfiguration", "sinkMarkers": ["detectOrigin", "createActionURL", "x-forwarded-host", "TRUST_HOST"] },
|
|
160
|
+
"tags": ["npm", "host-header-injection", "disclosure"]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "src-mysql2-url-option-override",
|
|
164
|
+
"name": "mysql2 URL option override + packet-parsing robustness issues",
|
|
165
|
+
"target": { "kind": "source-audit", "package": "mysql2", "version": "3.19.0", "ecosystem": "npm" },
|
|
166
|
+
"objective": { "type": "finding-match", "vulnClass": "missing-validation", "sinkMarkers": ["parseUrl", "readNullTerminatedString", "multipleStatements"] },
|
|
167
|
+
"tags": ["npm", "missing-validation", "disclosure"]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "src-jsonpath-plus-safe-mode-mutation",
|
|
171
|
+
"name": "jsonpath-plus data mutation via filter expressions in safe mode",
|
|
172
|
+
"target": { "kind": "source-audit", "package": "jsonpath-plus", "version": "10.4.0", "ecosystem": "npm" },
|
|
173
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["evalCallExpression", "splice", "reverse", "sort"] },
|
|
174
|
+
"tags": ["npm", "data-integrity", "disclosure"]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "src-adm-zip-zip64-corruption",
|
|
178
|
+
"name": "adm-zip broken readUInt64LE corrupts Zip64 parsing",
|
|
179
|
+
"target": { "kind": "source-audit", "package": "adm-zip", "version": "0.5.16", "ecosystem": "npm" },
|
|
180
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["readUInt64LE", "zipEntry", "readBigUInt64LE"] },
|
|
181
|
+
"tags": ["npm", "data-corruption", "disclosure"]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "src-adm-zip-zipbomb-dos",
|
|
185
|
+
"name": "adm-zip zip-bomb DoS via unchecked uncompressed size allocation",
|
|
186
|
+
"target": { "kind": "source-audit", "package": "adm-zip", "version": "0.5.16", "ecosystem": "npm" },
|
|
187
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["Buffer.alloc", "uncompressedSize", "getData"] },
|
|
188
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "src-js-yaml-stack-overflow-dos",
|
|
192
|
+
"name": "js-yaml stack-overflow DoS via deeply nested structures",
|
|
193
|
+
"target": { "kind": "source-audit", "package": "js-yaml", "version": "4.1.1", "ecosystem": "npm" },
|
|
194
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["composeNode"] },
|
|
195
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"id": "src-jsonata-untrusted-expression-dos",
|
|
199
|
+
"name": "jsonata CPU/memory exhaustion via untrusted expressions",
|
|
200
|
+
"target": { "kind": "source-audit", "package": "jsonata", "version": "2.1.0", "ecosystem": "npm" },
|
|
201
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["evaluate", "sequence", "[1..5000]"] },
|
|
202
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "src-mysql2-binlog-statusvars-dos",
|
|
206
|
+
"name": "mysql2 binlog QueryEvent status-vars parser DoS (RangeError)",
|
|
207
|
+
"target": { "kind": "source-audit", "package": "mysql2", "version": "3.19.0", "ecosystem": "npm" },
|
|
208
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["binlog_query_statusvars", "parseStatusVars", "RangeError"] },
|
|
209
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"id": "src-protobufjs-skiptype-stack-overflow",
|
|
213
|
+
"name": "protobufjs skipType unbounded recursion stack overflow DoS",
|
|
214
|
+
"target": { "kind": "source-audit", "package": "protobufjs", "version": "8.0.0", "ecosystem": "npm" },
|
|
215
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["skipType", "Reader.prototype.skipType"] },
|
|
216
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": "src-yaml-quadratic-map-dos",
|
|
220
|
+
"name": "yaml O(n^2) CPU exhaustion via large maps with unique keys",
|
|
221
|
+
"target": { "kind": "source-audit", "package": "yaml", "version": "2.8.2", "ecosystem": "npm" },
|
|
222
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["mapIncludes", "uniqueKeys", "items.some"] },
|
|
223
|
+
"tags": ["npm", "dos", "disclosure"]
|
|
224
|
+
},
|
|
225
|
+
|
|
226
|
+
{
|
|
227
|
+
"id": "kernel-bluetooth-cig-uaf",
|
|
228
|
+
"name": "Linux kernel UAF in hci_le_create_cis_sync() (Bluetooth CIG/CIS)",
|
|
229
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/bluetooth-cig-uaf", "ecosystem": "linux-kernel" },
|
|
230
|
+
"objective": { "type": "kasan-hit", "signature": "use-after-free" },
|
|
231
|
+
"tags": ["kernel", "uaf", "disclosure"]
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": "kernel-nfc-digital-sensf-overflow",
|
|
235
|
+
"name": "Linux kernel stack buffer overflow in NFC digital sensf_res memcpy",
|
|
236
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/nfc-digital-sensf-overflow", "ecosystem": "linux-kernel" },
|
|
237
|
+
"objective": { "type": "kasan-hit", "signature": "stack-out-of-bounds" },
|
|
238
|
+
"tags": ["kernel", "stack-overflow", "disclosure"]
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"id": "kernel-nfc-llcp-tlv-underflow",
|
|
242
|
+
"name": "Linux kernel NFC LLCP TLV parser integer underflow + OOB reads",
|
|
243
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/nfc-llcp-tlv-underflow", "ecosystem": "linux-kernel" },
|
|
244
|
+
"objective": { "type": "kasan-hit", "signature": "out-of-bounds" },
|
|
245
|
+
"tags": ["kernel", "oob", "disclosure"]
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"id": "kernel-skb-zerocopy-fragnesia",
|
|
249
|
+
"name": "Linux kernel SKBFL_SHARED_FRAG flag loss in skb_zerocopy() (Fragnesia variant)",
|
|
250
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/skb-zerocopy-fragnesia", "ecosystem": "linux-kernel" },
|
|
251
|
+
"objective": { "type": "kasan-hit" },
|
|
252
|
+
"tags": ["kernel", "memory-corruption", "disclosure"]
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"id": "kernel-mac802154-no-cow",
|
|
256
|
+
"name": "Linux kernel mac802154 llsec in-place AEAD decrypt on cloned skb without COW guard",
|
|
257
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/mac802154-no-cow", "ecosystem": "linux-kernel" },
|
|
258
|
+
"objective": { "type": "kasan-hit" },
|
|
259
|
+
"tags": ["kernel", "memory-corruption", "disclosure"]
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
{
|
|
263
|
+
"id": "neg-bydesign-webpack-cli-proto-pollution",
|
|
264
|
+
"name": "[FP control] webpack cli.processArguments proto-pollution — rejected by maintainer (developer-authored config, not attacker input)",
|
|
265
|
+
"target": { "kind": "source-audit", "package": "webpack", "version": "5.107.2", "ecosystem": "npm" },
|
|
266
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["getObjectAndProperty", "setValue", "processArguments", "__proto__"] },
|
|
267
|
+
"knownNegative": true,
|
|
268
|
+
"ci": true,
|
|
269
|
+
"tags": ["npm", "known-negative", "by-design", "disclosure-fp"]
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"id": "neg-unreachable-node-forge-proto-pollution",
|
|
273
|
+
"name": "[FP control] node-forge form.serialize proto-pollution — unreachable dead code (forge.form unexported)",
|
|
274
|
+
"target": { "kind": "source-audit", "package": "node-forge", "version": "1.3.1", "ecosystem": "npm" },
|
|
275
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["serialize", "_addField", "__proto__"] },
|
|
276
|
+
"knownNegative": true,
|
|
277
|
+
"tags": ["npm", "known-negative", "unreachable", "disclosure-fp"]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"id": "neg-superseded-formidable-traversal",
|
|
281
|
+
"name": "[FP control] formidable createDirsFromUploads traversal — superseded duplicate of GHSA-3pj2-wmw4-qpcx",
|
|
282
|
+
"target": { "kind": "source-audit", "package": "formidable", "version": "3.5.4", "ecosystem": "npm" },
|
|
283
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["_joinDirectoryName", "createDirsFromUploads", "uploadDir"] },
|
|
284
|
+
"knownNegative": true,
|
|
285
|
+
"tags": ["npm", "known-negative", "superseded", "disclosure-fp"]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"id": "neg-patched-lodash-proto-pollution",
|
|
289
|
+
"name": "[FP control] lodash @4.17.21 — proto-pollution (CVE-2019-10744) patched since 4.17.12",
|
|
290
|
+
"target": { "kind": "source-audit", "package": "lodash", "version": "4.17.21", "ecosystem": "npm" },
|
|
291
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["defaultsDeep", "mergeWith", "zipObjectDeep", "setWith", "baseSet"] },
|
|
292
|
+
"knownNegative": true,
|
|
293
|
+
"ci": true,
|
|
294
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "neg-patched-minimist-proto-pollution",
|
|
298
|
+
"name": "[FP control] minimist @1.2.8 — proto-pollution (CVE-2021-44906) patched since 1.2.6",
|
|
299
|
+
"target": { "kind": "source-audit", "package": "minimist", "version": "1.2.8", "ecosystem": "npm" },
|
|
300
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["setKey", "__proto__", "constructor"] },
|
|
301
|
+
"knownNegative": true,
|
|
302
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"id": "neg-patched-json5-proto-pollution",
|
|
306
|
+
"name": "[FP control] json5 @2.2.3 — proto-pollution (CVE-2022-46175) patched since 2.2.2",
|
|
307
|
+
"target": { "kind": "source-audit", "package": "json5", "version": "2.2.3", "ecosystem": "npm" },
|
|
308
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["internalize", "reviver", "__proto__"] },
|
|
309
|
+
"knownNegative": true,
|
|
310
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"id": "neg-patched-y18n-proto-pollution",
|
|
314
|
+
"name": "[FP control] y18n @5.0.8 — proto-pollution (CVE-2020-7774) patched since 5.0.5",
|
|
315
|
+
"target": { "kind": "source-audit", "package": "y18n", "version": "5.0.8", "ecosystem": "npm" },
|
|
316
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["__proto__", "setLocale", "update"] },
|
|
317
|
+
"knownNegative": true,
|
|
318
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"id": "neg-patched-async-proto-pollution",
|
|
322
|
+
"name": "[FP control] async @3.2.6 — proto-pollution (CVE-2021-43138) patched since 3.2.2",
|
|
323
|
+
"target": { "kind": "source-audit", "package": "async", "version": "3.2.6", "ecosystem": "npm" },
|
|
324
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["autoInject", "mapValuesLimit", "__proto__"] },
|
|
325
|
+
"knownNegative": true,
|
|
326
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"id": "neg-patched-qs-proto-pollution",
|
|
330
|
+
"name": "[FP control] qs @6.11.0 — proto-pollution (CVE-2022-24999) patched since 6.10.3/6.5.3",
|
|
331
|
+
"target": { "kind": "source-audit", "package": "qs", "version": "6.11.0", "ecosystem": "npm" },
|
|
332
|
+
"objective": { "type": "finding-match", "vulnClass": "prototype-pollution", "sinkMarkers": ["parseObject", "__proto__", "allowPrototypes"] },
|
|
333
|
+
"knownNegative": true,
|
|
334
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "neg-patched-handlebars-ssti",
|
|
338
|
+
"name": "[FP control] handlebars @4.7.8 — SSTI/RCE (CVE-2019-20920) patched since 4.7.7",
|
|
339
|
+
"target": { "kind": "source-audit", "package": "handlebars", "version": "4.7.8", "ecosystem": "npm" },
|
|
340
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["compile", "registerHelper", "lookupProperty"] },
|
|
341
|
+
"knownNegative": true,
|
|
342
|
+
"ci": true,
|
|
343
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"id": "neg-patched-ejs-rce",
|
|
347
|
+
"name": "[FP control] ejs @3.1.10 — RCE via options (CVE-2022-29078) patched since 3.1.7",
|
|
348
|
+
"target": { "kind": "source-audit", "package": "ejs", "version": "3.1.10", "ecosystem": "npm" },
|
|
349
|
+
"objective": { "type": "finding-match", "vulnClass": "code-injection", "sinkMarkers": ["outputFunctionName", "escapeFunction", "new Function"] },
|
|
350
|
+
"knownNegative": true,
|
|
351
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"id": "neg-patched-tar-traversal",
|
|
355
|
+
"name": "[FP control] tar @6.2.1 — path traversal / symlink (CVE-2021-37701) patched since 6.1.2",
|
|
356
|
+
"target": { "kind": "source-audit", "package": "tar", "version": "6.2.1", "ecosystem": "npm" },
|
|
357
|
+
"objective": { "type": "finding-match", "vulnClass": "path-traversal", "sinkMarkers": ["stripAbsolutePath", "preservePaths", "Unpack"] },
|
|
358
|
+
"knownNegative": true,
|
|
359
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"id": "neg-patched-semver-redos",
|
|
363
|
+
"name": "[FP control] semver @7.6.3 — ReDoS in range parsing (CVE-2022-25883) patched since 7.5.2",
|
|
364
|
+
"target": { "kind": "source-audit", "package": "semver", "version": "7.6.3", "ecosystem": "npm" },
|
|
365
|
+
"objective": { "type": "finding-match", "vulnClass": "regex-dos", "sinkMarkers": ["parseRange", "new Range", "safeRe"] },
|
|
366
|
+
"knownNegative": true,
|
|
367
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"id": "neg-patched-ansi-regex-redos",
|
|
371
|
+
"name": "[FP control] ansi-regex @5.0.1 — ReDoS (CVE-2021-3807) patched in 5.0.1",
|
|
372
|
+
"target": { "kind": "source-audit", "package": "ansi-regex", "version": "5.0.1", "ecosystem": "npm" },
|
|
373
|
+
"objective": { "type": "finding-match", "vulnClass": "regex-dos", "sinkMarkers": ["ansiRegex", "pattern"] },
|
|
374
|
+
"knownNegative": true,
|
|
375
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"id": "neg-patched-glob-parent-redos",
|
|
379
|
+
"name": "[FP control] glob-parent @5.1.2 — ReDoS (CVE-2020-28469) patched in 5.1.2",
|
|
380
|
+
"target": { "kind": "source-audit", "package": "glob-parent", "version": "5.1.2", "ecosystem": "npm" },
|
|
381
|
+
"objective": { "type": "finding-match", "vulnClass": "regex-dos", "sinkMarkers": ["globParent", "enclosure", "isglob"] },
|
|
382
|
+
"knownNegative": true,
|
|
383
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"id": "neg-patched-decode-uri-component-dos",
|
|
387
|
+
"name": "[FP control] decode-uri-component @0.2.2 — DoS (CVE-2022-38900) patched in 0.2.1",
|
|
388
|
+
"target": { "kind": "source-audit", "package": "decode-uri-component", "version": "0.2.2", "ecosystem": "npm" },
|
|
389
|
+
"objective": { "type": "finding-match", "vulnClass": "other", "sinkMarkers": ["decodeURIComponent", "tokenize", "singleMatcher"] },
|
|
390
|
+
"knownNegative": true,
|
|
391
|
+
"tags": ["npm", "known-negative", "patched-cve"]
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
{
|
|
395
|
+
"id": "kernel-neg-algif-skcipher-refuted",
|
|
396
|
+
"name": "[FP control] Linux kernel algif_skcipher splice page-cache corruption — refuted (no crash on 7.0.0-15)",
|
|
397
|
+
"target": { "kind": "kernel", "reproducerRef": "corpus://kernel/algif-skcipher-pagecache-corruption", "ecosystem": "linux-kernel" },
|
|
398
|
+
"objective": { "type": "kasan-hit" },
|
|
399
|
+
"knownNegative": true,
|
|
400
|
+
"tags": ["kernel", "known-negative", "refuted", "disclosure-fp"]
|
|
401
|
+
}
|
|
402
|
+
]
|
|
403
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __0secCreateRequire } from "node:module";
|
|
3
|
+
const require = __0secCreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
ScanCostLedger
|
|
6
|
+
} from "./chunk-242TMK6G.js";
|
|
7
|
+
import "./chunk-H2FFLZNK.js";
|
|
8
|
+
import "./chunk-6L26OBWI.js";
|
|
9
|
+
import "./chunk-YLMN3N25.js";
|
|
10
|
+
import "./chunk-IR537GON.js";
|
|
11
|
+
export {
|
|
12
|
+
ScanCostLedger
|
|
13
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"provenance": "0sec-authored appsec bug-class registry, 2026-07-21. Mirrors the SCHEMA of kernel-archetypes.json but is a SEPARATE, cross-language application-security pack (domain: appsec), NOT ported from 0verse (0verse's registry is Linux-kernel-only). Grounded in OWASP Top-10 / CWE and in the concrete misses these lenses were built to close: the Swiss engagement's gever OS-command-injection CRITICAL and the sibling-route authz / template-XSS / SSO-trust / resource-exhaustion classes the four generic finder lenses (memory-safety, input-validation, auth-logic, secrets-crypto) under-weighted. Unlike the kernel pack there is NO build/boot/sanitizer lane for these — every entry is route 'appsec-source-static': a grep/read hit is a hypothesis for the skeptic + multi-lens verify quorum, never an auto-confirmed finding. The load-bearing field for the finder surface is 'challenge_hint' (the cross-language, sink-shape-citing hunt angle), which the loader maps directly onto FinderLens.challengeHint; 'detection_signature' is the human/skeptic-facing grep evidence. 'engine_lens' is null for every entry (no pre-existing engine lens implements these — this registry IS their implementation).",
|
|
3
|
+
"archetypes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "os-command-injection",
|
|
6
|
+
"name": "OS command injection via attacker-influenced process/shell exec",
|
|
7
|
+
"cwe": "CWE-78",
|
|
8
|
+
"domain": "appsec",
|
|
9
|
+
"subsystem": "process / shell execution (any runtime)",
|
|
10
|
+
"pattern": "Attacker-controlled data (a request param, header, filename, upload name, DB value, config field) is concatenated or interpolated into a command line, a shell string, or a process argument that is then handed to an OS command/shell interpreter. The sink executes with the app's privileges; even when the base command is fixed, an unescaped argument, a shell metacharacter (; | & $() ` > <), or argument-injection (a value beginning with -) subverts it. The tell is DATA (not developer-authored code) reaching an exec sink without an allow-list, tokenized argv, or a proven-safe escaper.",
|
|
11
|
+
"detection_signature": "Language-agnostic sink hunt. Node: child_process exec/execSync/spawn/spawnSync/execFile with a shell:true option or a string-built command, template literals inside exec(`...${x}...`). .NET: System.Diagnostics.Process.Start / ProcessStartInfo where FileName is cmd.exe/powershell/bash or Arguments is string-concatenated, UseShellExecute=true. Java: Runtime.getRuntime().exec(String), ProcessBuilder(command) built from concatenation, especially exec(\"sh\", \"-c\", cmd). Python: subprocess.run/Popen/call with shell=True, os.system, os.popen, commands.getoutput. PHP: system/exec/shell_exec/passthru/proc_open/backticks. Ruby: system/`backticks`/%x/Open3 with interpolation. Perl: system/open with a pipe. Trace the taint from the entry point to the argv/shell string; a fixed argv array with no shell and no attacker-controlled flag is safe.",
|
|
12
|
+
"challenge_hint": "Hunt OS COMMAND INJECTION only, ACROSS ALL LANGUAGES: attacker-influenced data reaching a process/shell exec sink. Look for — Node child_process exec/execSync/spawn(..., {shell:true})/execFile and backtick-built commands; .NET Process.Start / ProcessStartInfo.FileName=cmd.exe|powershell with a concatenated Arguments (or UseShellExecute=true); Java Runtime.exec(String) / ProcessBuilder built by string concatenation (esp. sh -c); Python subprocess(..., shell=True) / os.system / os.popen; PHP system/exec/shell_exec/passthru/proc_open/backticks; Ruby system/%x/backticks; any string-built shell command. Cite the exact sink (file:line) and the concrete taint path from the entry point (route param, header, filename, upload, config, DB value) to the command string or argv. A fixed argv array with NO shell and NO attacker-controlled leading-dash flag is safe — do not flag it. This is the class that missed the gever CRITICAL.",
|
|
13
|
+
"grounding": [
|
|
14
|
+
"CWE-78: Improper Neutralization of Special Elements used in an OS Command",
|
|
15
|
+
"OWASP Top 10 A03:2021 Injection",
|
|
16
|
+
"0sec Swiss engagement: gever OS-command-injection CRITICAL (missed by the generic input-validation lens)"
|
|
17
|
+
],
|
|
18
|
+
"confirmable": "Source-static hypothesis. A grep/read hit needs the skeptic + multi-lens verify quorum to confirm the argument is genuinely attacker-reachable and not escaped/tokenized upstream; no build/exec lane proves it in this repo.",
|
|
19
|
+
"uid": "appsec/os-command-injection",
|
|
20
|
+
"engine_lens": null,
|
|
21
|
+
"route": "appsec-source-static"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "method-authz-differential",
|
|
25
|
+
"name": "Method-level authorization differential (sibling route/handler missing its siblings' authz + IDOR-by-id)",
|
|
26
|
+
"cwe": "CWE-862",
|
|
27
|
+
"domain": "appsec",
|
|
28
|
+
"subsystem": "web routing / controllers / service layer (any framework)",
|
|
29
|
+
"pattern": "Two or more handlers act on the SAME resource, but one is missing the authorization guard its siblings carry: a controller action without the [Authorize]/policy/role attribute its neighbors have; a service-layer method that mutates or reads an object WITHOUT the ownership/tenant/scope check its Update/Delete siblings enforce; a route that trusts a caller-supplied id and fetches by id alone (IDOR) instead of scoping to the authenticated principal. The vulnerability is the DIFFERENCE between siblings, not the absence of auth everywhere — the guard exists and is proven necessary on one path and simply omitted on another.",
|
|
30
|
+
"detection_signature": "Compare sibling handlers on one resource. .NET: an action lacking [Authorize]/[Authorize(Policy=...)]/[Authorize(Roles=...)] present on peer actions in the same controller, or a controller relying on a global filter that a specific action opts out of with [AllowAnonymous]. Spring: a @GetMapping/@PostMapping without the @PreAuthorize/@Secured its siblings have, or a SecurityConfig antMatcher that omits one path. Express/Koa/Fastify: a route registered without the requireAuth/authorize middleware its siblings chain. Rails: a controller action skipped in before_action :authorize, or skip_before_action. Service layer (any language): an Update/Delete method that checks resource.ownerId == currentUser before mutating, next to a sibling (e.g. GetById, Export, a bulk op) that fetches/mutates by id with NO such check. Also flag repository calls keyed only by a request-supplied id with no tenant/owner predicate.",
|
|
31
|
+
"challenge_hint": "Hunt METHOD-LEVEL AUTHORIZATION DIFFERENTIALS and IDOR only. Find sibling routes/handlers/methods on the SAME resource where ONE lacks the guard its siblings carry: a controller action missing the [Authorize]/@PreAuthorize/policy/role attribute or requireAuth middleware its peers have; a service method that mutates/reads by id WITHOUT the ownership/tenant/scope check its Update/Delete siblings enforce; a repository/query keyed only on a caller-supplied id with no owner/tenant predicate (IDOR-by-id). The signal is the DIFFERENCE between siblings — prove the guard is present and necessary on one path and genuinely absent or mis-scoped on the reachable one, not merely that an auth keyword appears somewhere in the file. Cite both the guarded sibling and the unguarded reachable handler (file:line each).",
|
|
32
|
+
"grounding": [
|
|
33
|
+
"CWE-862: Missing Authorization",
|
|
34
|
+
"CWE-639: Authorization Bypass Through User-Controlled Key (IDOR)",
|
|
35
|
+
"OWASP Top 10 A01:2021 Broken Access Control"
|
|
36
|
+
],
|
|
37
|
+
"confirmable": "Source-static hypothesis. The skeptic must confirm the sibling truly shares the resource, the guard is genuinely absent (not enforced by a global filter/middleware or an earlier check), and the unguarded path is reachable by a lower-privileged principal.",
|
|
38
|
+
"uid": "appsec/method-authz-differential",
|
|
39
|
+
"engine_lens": null,
|
|
40
|
+
"route": "appsec-source-static"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "template-xss-ssti",
|
|
44
|
+
"name": "Template / HTML-render XSS and server-side template injection (SSTI)",
|
|
45
|
+
"cwe": "CWE-79",
|
|
46
|
+
"domain": "appsec",
|
|
47
|
+
"subsystem": "view / template rendering (client and server frameworks)",
|
|
48
|
+
"pattern": "User- or controller-supplied input reaches an HTML or template render context WITHOUT context-correct escaping — either interpolated into markup that the browser parses as HTML/JS (XSS), or concatenated into the TEMPLATE SOURCE itself so the engine evaluates attacker text as template code (SSTI, which can reach RCE). This is DATA crossing into a code/markup context, distinct from a template engine legitimately compiling a developer-authored template (that is by-design and NOT a finding).",
|
|
49
|
+
"detection_signature": "Client: Angular bypassSecurityTrustHtml/bypassSecurityTrustScript/bypassSecurityTrustResourceUrl and [innerHTML]=userValue; React dangerouslySetInnerHTML={{__html: userValue}}; Vue v-html=userValue; raw DOM innerHTML/outerHTML/insertAdjacentHTML/document.write with tainted data. Server-side templates: Handlebars triple-mustache {{{x}}} / Handlebars.SafeString(userInput); Velocity/Freemarker/Thymeleaf where user input is spliced into the template STRING (not the model) — e.g. new Template(userStr) or th:utext with tainted data; JSP <%= %> without <c:out>; Jinja2/Django render_template_string(userStr) / Template(userStr); ERB/Liquid built from user input; EJS/Pug/Mustache raw-output helpers fed tainted data; string concatenation building the template passed to a compile()/render() call. Trace user input to the render/interpolation sink and check for a context-correct escaper on the path.",
|
|
50
|
+
"challenge_hint": "Hunt TEMPLATE/HTML XSS and SERVER-SIDE TEMPLATE INJECTION (SSTI) only. Find user/controller input reaching an HTML or template render without context-correct escaping: Angular bypassSecurityTrustHtml/[innerHTML]; React dangerouslySetInnerHTML; Vue v-html; raw innerHTML/document.write; Handlebars {{{triple}}}/SafeString; Velocity/Freemarker/Thymeleaf(th:utext)/JSP(<%= %>)/Jinja2 render_template_string / Template(userStr) where DATA is spliced into the template SOURCE (SSTI → possible RCE); EJS/Pug/Mustache raw helpers fed tainted data. Trace the taint from entry point to the render sink and cite the missing/incorrect escaper (file:line). IMPORTANT: a template engine compiling a DEVELOPER-authored template is by-design — the finding is untrusted DATA reaching the markup/template-code context. Do NOT let the intended-use gate talk you out of hunting this class; hunt it and report the precondition explicitly.",
|
|
51
|
+
"grounding": [
|
|
52
|
+
"CWE-79: Improper Neutralization of Input During Web Page Generation (XSS)",
|
|
53
|
+
"CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine (SSTI)",
|
|
54
|
+
"OWASP Top 10 A03:2021 Injection"
|
|
55
|
+
],
|
|
56
|
+
"confirmable": "Source-static hypothesis. The skeptic must confirm the sink renders into a browser/template-code context, the escaper is absent or context-wrong, and the input is genuinely untrusted DATA rather than a developer-authored template (the intended-use gate distinguishes these).",
|
|
57
|
+
"uid": "appsec/template-xss-ssti",
|
|
58
|
+
"engine_lens": null,
|
|
59
|
+
"route": "appsec-source-static"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "sso-trust",
|
|
63
|
+
"name": "SSO / identity-federation trust flaw (SAML / OIDC / JWT assertion validation)",
|
|
64
|
+
"cwe": "CWE-347",
|
|
65
|
+
"domain": "appsec",
|
|
66
|
+
"subsystem": "authentication / identity federation (SAML, OIDC, OAuth2, JWT)",
|
|
67
|
+
"pattern": "A relying party accepts a federated identity assertion without fully verifying its authenticity, integrity, or provenance: an unverified or forged SAML assertion/response signature, XML signature wrapping (XSW) where the signed element and the consumed element differ, the IdP↔RP allowlist (issuer / audience / entityID / redirect_uri) not enforced SERVER-SIDE, RelayState/redirect_uri reflected or validated with a loose prefix/substring match, or a JWT accepted with alg:none, an unverified signature, or algorithm-confusion (RS256 verified as HS256 with the public key as the HMAC secret). The trust boundary is the assertion — any gap lets an attacker mint or replay an identity.",
|
|
68
|
+
"detection_signature": "SAML: assertion consumed before/without signature validation, validateSignature disabled or wrapped in try/catch that continues, response parsed with an XML lib vulnerable to XSW, Assertion vs Response signature scope not pinned, audience/issuer/NotOnOrAfter/InResponseTo unchecked. OIDC/OAuth2: id_token accepted without verifying iss/aud/exp/nonce, redirect_uri matched by startsWith/contains instead of exact registered value, state/PKCE absent, IdP discovery/JWKS fetched over an attacker-influenceable URL. JWT: jwt.decode without verify, algorithms allowing 'none', a verify call that trusts the token's own alg header, or an HMAC verify keyed with a public key. Look for the MISSING or bypassable check on the assertion path, not just the presence of a SAML/OIDC library.",
|
|
69
|
+
"challenge_hint": "Hunt SSO / IDENTITY-FEDERATION TRUST flaws only (SAML, OIDC, OAuth2, JWT). Find where a relying party trusts a federated assertion without full server-side verification: unverified/forged SAML signature or signature-validation that continues on failure; XML signature wrapping (signed element ≠ consumed element); issuer/audience/entityID or redirect_uri allowlist NOT enforced server-side (or matched by startsWith/substring); RelayState/redirect_uri reflection; missing state/nonce/PKCE; JWT with alg:none, unverified signature, or RS256↔HS256 algorithm-confusion (public key used as HMAC secret). Prove the specific check on the assertion path is absent or bypassable and cite it (file:line) — the mere presence of a SAML/OIDC/JWT library is not the finding.",
|
|
70
|
+
"grounding": [
|
|
71
|
+
"CWE-347: Improper Verification of Cryptographic Signature",
|
|
72
|
+
"CWE-287: Improper Authentication",
|
|
73
|
+
"CWE-290: Authentication Bypass by Spoofing",
|
|
74
|
+
"OWASP Top 10 A07:2021 Identification and Authentication Failures"
|
|
75
|
+
],
|
|
76
|
+
"confirmable": "Source-static hypothesis. The skeptic must confirm the assertion is consumed on a path where the specific verification (signature, issuer/audience, redirect_uri exact-match, JWT alg pinning) is genuinely missing or bypassable and reachable by an unauthenticated attacker.",
|
|
77
|
+
"uid": "appsec/sso-trust",
|
|
78
|
+
"engine_lens": null,
|
|
79
|
+
"route": "appsec-source-static"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "resource-exhaustion-dos",
|
|
83
|
+
"name": "Resource-exhaustion / algorithmic DoS from attacker-controlled loop, sleep, or allocation",
|
|
84
|
+
"cwe": "CWE-400",
|
|
85
|
+
"domain": "appsec",
|
|
86
|
+
"subsystem": "request handling / parsing / scheduling (any runtime)",
|
|
87
|
+
"pattern": "An attacker-controlled value drives an unbounded loop, sleep/delay, allocation, decompression, fan-out, or backtracking, with no cap, timeout, or ratio check — letting a single cheap request consume disproportionate CPU, memory, threads, or time. Includes a header/param fed into a sleep (Retry-After → Thread.sleep), a decompression ratio / zip-bomb (inflate without a size/ratio limit), catastrophic-backtracking regex (ReDoS) on user input, an unbounded fan-out (N sub-requests from a user-supplied N), and mass-assignment / unbounded collection sizing driven by request data.",
|
|
88
|
+
"detection_signature": "A loop bound, sleep duration, allocation size, or recursion depth read from request data without a clamp: Thread.sleep/setTimeout/time.sleep/Task.Delay whose argument is a parsed header/param (e.g. Retry-After); GZIP/Zip/Inflater/gunzip/zlib reading into an unbounded buffer with no maxSize/ratio guard; new byte[n]/Array(n)/malloc(n)/list * n where n is attacker-supplied; regexes with nested quantifiers ((a+)+, (.*)*, (\\d+)+) matched against user input; a for/while whose iteration count is a request field; JSON/XML/YAML parsed with no depth/size limit; a paginated/batch endpoint taking a user-supplied count/limit with no server cap; ORM/mass-assignment binding an entire request body to a model. Trace the attacker-controlled magnitude to the unbounded consumer.",
|
|
89
|
+
"challenge_hint": "Hunt RESOURCE-EXHAUSTION / ALGORITHMIC DoS only: an attacker-controlled value driving an unbounded loop, sleep, allocation, decompression, fan-out, or regex backtracking with no cap/timeout/ratio. Look for — a header/param fed into Thread.sleep/setTimeout/time.sleep/Task.Delay (e.g. Retry-After → sleep); decompression without a size/ratio limit (zip-bomb, Inflater/gunzip/zlib into an unbounded buffer); ReDoS (nested quantifiers on user input); new byte[n]/Array(n)/malloc(n) with attacker-supplied n; a loop whose count is a request field; JSON/XML/YAML parsed with no depth/size limit; an endpoint honoring a user-supplied count/limit with no server cap; mass-assignment binding a whole request body. Cite the attacker-controlled magnitude and the unbounded consumer (file:line) and show there is no clamp on the path.",
|
|
90
|
+
"grounding": [
|
|
91
|
+
"CWE-400: Uncontrolled Resource Consumption",
|
|
92
|
+
"CWE-1333: Inefficient Regular Expression Complexity (ReDoS)",
|
|
93
|
+
"CWE-409: Improper Handling of Highly Compressed Data (Data Amplification / zip-bomb)",
|
|
94
|
+
"OWASP Top 10 A04:2021 Insecure Design / A05:2021 Security Misconfiguration"
|
|
95
|
+
],
|
|
96
|
+
"confirmable": "Source-static hypothesis. The skeptic must confirm the magnitude is genuinely attacker-controlled, the consumer is genuinely unbounded on the reachable path, and the impact is disproportionate (a single request → outsized CPU/memory/time), not a trivially bounded operation.",
|
|
97
|
+
"uid": "appsec/resource-exhaustion-dos",
|
|
98
|
+
"engine_lens": null,
|
|
99
|
+
"route": "appsec-source-static"
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|