0sec-cli 0.15.0 → 0.17.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.
Files changed (209) hide show
  1. package/0sec.js +322 -0
  2. package/README.md +63 -52
  3. package/attacks/data-exfiltration/pii-leakage.yaml +27 -0
  4. package/attacks/encoding-bypass/base64-encoding.yaml +24 -0
  5. package/attacks/jailbreak/dan-roleplay.yaml +27 -0
  6. package/attacks/jailbreak/hypothetical-scenario.yaml +25 -0
  7. package/attacks/jailbreak/multilingual-bypass.yaml +22 -0
  8. package/attacks/output-manipulation/harmful-content.yaml +25 -0
  9. package/attacks/prompt-injection/context-manipulation.yaml +32 -0
  10. package/attacks/prompt-injection/direct-injection.yaml +28 -0
  11. package/attacks/prompt-injection/indirect-injection.yaml +33 -0
  12. package/attacks/system-prompt-extraction/direct-ask.yaml +30 -0
  13. package/attacks/system-prompt-extraction/markdown-exfil.yaml +26 -0
  14. package/attacks/tool-misuse/ssrf-via-tools.yaml +27 -0
  15. package/chunks/adapt-loop-ECQG7454.js +18 -0
  16. package/chunks/adgraph-JLGA6RYI.js +54 -0
  17. package/chunks/agent/skills/frameworks/entra-id.yaml +63 -0
  18. package/chunks/agent/skills/frameworks/graphql-introspection.yaml +116 -0
  19. package/chunks/agent/skills/frameworks/nextjs.yaml +82 -0
  20. package/chunks/agent/skills/frameworks/python-web.yaml +85 -0
  21. package/chunks/agent/skills/frameworks/supabase.yaml +83 -0
  22. package/chunks/agent/skills/frameworks/wordpress-deep.yaml +122 -0
  23. package/chunks/agent/skills/techniques/ad-attack-paths.yaml +57 -0
  24. package/chunks/agent/skills/techniques/advisory-disclosure.yaml +59 -0
  25. package/chunks/agent/skills/techniques/assumption-mining.yaml +53 -0
  26. package/chunks/agent/skills/techniques/blind-exploitation.yaml +143 -0
  27. package/chunks/agent/skills/techniques/crypto-misuse.yaml +88 -0
  28. package/chunks/agent/skills/techniques/cve-poc-adaptation.yaml +82 -0
  29. package/chunks/agent/skills/techniques/entra-attack-paths.yaml +55 -0
  30. package/chunks/agent/skills/techniques/http-conformance-diff.yaml +48 -0
  31. package/chunks/agent/skills/techniques/jwt-attacks.yaml +137 -0
  32. package/chunks/agent/skills/techniques/kernel-weaponization.yaml +53 -0
  33. package/chunks/agent/skills/techniques/llm-excessive-agency.yaml +55 -0
  34. package/chunks/agent/skills/techniques/llm-insecure-output-handling.yaml +56 -0
  35. package/chunks/agent/skills/techniques/llm-prompt-injection.yaml +54 -0
  36. package/chunks/agent/skills/techniques/llm-prompt-layer-write.yaml +68 -0
  37. package/chunks/agent/skills/techniques/llm-rag-poisoning.yaml +57 -0
  38. package/chunks/agent/skills/techniques/llm-safety-eval.yaml +51 -0
  39. package/chunks/agent/skills/techniques/npm-ecosystem.yaml +51 -0
  40. package/chunks/agent/skills/techniques/poc-verification.yaml +55 -0
  41. package/chunks/agent/skills/techniques/race-condition.yaml +122 -0
  42. package/chunks/agent/skills/techniques/scoped-fix.yaml +49 -0
  43. package/chunks/agent/skills/techniques/seedless-depth-review.yaml +59 -0
  44. package/chunks/agent/skills/techniques/spec-differential.yaml +48 -0
  45. package/chunks/agent/skills/techniques/variant-hunting.yaml +55 -0
  46. package/chunks/agent/skills/vulnerabilities/cardano-eutxo-validators.yaml +72 -0
  47. package/chunks/agent/skills/vulnerabilities/command-injection.yaml +99 -0
  48. package/chunks/agent/skills/vulnerabilities/deserialization-chains.yaml +106 -0
  49. package/chunks/agent/skills/vulnerabilities/native-memory-safety.yaml +93 -0
  50. package/chunks/agent/skills/vulnerabilities/path-traversal.yaml +78 -0
  51. package/chunks/agent/skills/vulnerabilities/prototype-pollution.yaml +132 -0
  52. package/chunks/agent/skills/vulnerabilities/request-smuggling.yaml +129 -0
  53. package/chunks/agent/skills/vulnerabilities/sqli-advanced.yaml +102 -0
  54. package/chunks/agent/skills/vulnerabilities/ssrf-bypass.yaml +84 -0
  55. package/chunks/agent/skills/vulnerabilities/ssti-exploitation.yaml +112 -0
  56. package/chunks/agent/skills/vulnerabilities/structural-sqli.yaml +91 -0
  57. package/chunks/appsec-catalog-CBWHGTEL.js +24 -0
  58. package/chunks/artifact-scraper-GJEZMOHF.js +34 -0
  59. package/chunks/assumption-mining-BVMMUZHB.js +79 -0
  60. package/chunks/chunk-2CJ776PV.js +2430 -0
  61. package/chunks/chunk-2RMLOJVB.js +47 -0
  62. package/chunks/chunk-2SANI5RH.js +4728 -0
  63. package/chunks/chunk-3MOLBTLS.js +953 -0
  64. package/chunks/chunk-3QFDYBZQ.js +5108 -0
  65. package/chunks/chunk-47TQJWDH.js +3729 -0
  66. package/chunks/chunk-4Y4KQJXE.js +600 -0
  67. package/chunks/chunk-53G27VPS.js +136 -0
  68. package/chunks/chunk-57ZENEX2.js +169 -0
  69. package/chunks/chunk-5G3ZXFBW.js +182 -0
  70. package/chunks/chunk-6LKRLK2R.js +542 -0
  71. package/chunks/chunk-7DQEV5QI.js +287 -0
  72. package/chunks/chunk-A6CLR72I.js +235 -0
  73. package/chunks/chunk-BKZFDZ23.js +361 -0
  74. package/chunks/chunk-CLHCDHP4.js +471 -0
  75. package/chunks/chunk-D6S3IIPG.js +518 -0
  76. package/chunks/chunk-DN25OQQA.js +1070 -0
  77. package/chunks/chunk-DW5UWPFY.js +275 -0
  78. package/chunks/chunk-F3WBKITT.js +687 -0
  79. package/chunks/chunk-H2FFLZNK.js +3 -0
  80. package/chunks/chunk-H44E2CRN.js +193 -0
  81. package/chunks/chunk-HDWV7PGI.js +596 -0
  82. package/chunks/chunk-HE7LCA7G.js +381 -0
  83. package/chunks/chunk-HT6P7RY3.js +2597 -0
  84. package/chunks/chunk-IOL7D5YV.js +515 -0
  85. package/chunks/chunk-IORC6MQX.js +72828 -0
  86. package/chunks/chunk-IR537GON.js +49 -0
  87. package/chunks/chunk-K26SZ37E.js +5735 -0
  88. package/chunks/chunk-KKGE5RQE.js +1094 -0
  89. package/chunks/chunk-KLTNTE2Z.js +121 -0
  90. package/chunks/chunk-KTQDLNSR.js +1732 -0
  91. package/chunks/chunk-LOHTE223.js +2572 -0
  92. package/chunks/chunk-LP3HHYQU.js +245 -0
  93. package/chunks/chunk-MMLDQR4H.js +852 -0
  94. package/chunks/chunk-MYVT64FN.js +16 -0
  95. package/chunks/chunk-O462Y7P2.js +33019 -0
  96. package/chunks/chunk-OEFNRYI2.js +150 -0
  97. package/chunks/chunk-P6WKNFWX.js +1968 -0
  98. package/chunks/chunk-QI233I24.js +333 -0
  99. package/chunks/chunk-QJQKHO7G.js +917 -0
  100. package/chunks/chunk-QKICO43A.js +808 -0
  101. package/chunks/chunk-QOKTUOU2.js +102 -0
  102. package/chunks/chunk-RDZYQQLW.js +596 -0
  103. package/chunks/chunk-RJWOYEOG.js +271 -0
  104. package/chunks/chunk-RRMJC3ZE.js +105 -0
  105. package/chunks/chunk-RWONANDA.js +973 -0
  106. package/chunks/chunk-SAFFWQW4.js +5921 -0
  107. package/chunks/chunk-SF4KZ4O3.js +502 -0
  108. package/chunks/chunk-SNKTC4BP.js +1422 -0
  109. package/chunks/chunk-SOG2U7B3.js +662 -0
  110. package/chunks/chunk-SZJCPG2I.js +110 -0
  111. package/chunks/chunk-UJ4IK5PO.js +2010 -0
  112. package/chunks/chunk-UM3ZNQIM.js +9329 -0
  113. package/chunks/chunk-VGRDNSHA.js +3249 -0
  114. package/chunks/chunk-VQG4FT5D.js +685 -0
  115. package/chunks/chunk-WKNNZVJS.js +2798 -0
  116. package/chunks/chunk-WU6AFRAZ.js +1167 -0
  117. package/chunks/chunk-WVTBZEQO.js +1531 -0
  118. package/chunks/chunk-YLMN3N25.js +4054 -0
  119. package/chunks/commands-U3AMV5ZU.js +16795 -0
  120. package/chunks/corpus-v1.json +403 -0
  121. package/chunks/cost-ledger-ZCKMBJEN.js +13 -0
  122. package/chunks/data/appsec-archetypes.json +102 -0
  123. package/chunks/data/chromium-archetypes.json +204 -0
  124. package/chunks/data/freebsd-archetypes.json +171 -0
  125. package/chunks/data/kernel-archetypes.json +611 -0
  126. package/chunks/db-26NGQFKO.js +16 -0
  127. package/chunks/disclose-A6AEIEDA.js +132 -0
  128. package/chunks/dist-FDKALV4R.js +2772 -0
  129. package/chunks/dist-GL66KMUX.js +74 -0
  130. package/chunks/dist-JR67XKYO.js +159 -0
  131. package/chunks/eval-runner-DDLE5RQ3.js +27 -0
  132. package/chunks/example-manifest.json +95 -0
  133. package/chunks/exploit-agent-XP23ISN7.js +98 -0
  134. package/chunks/exploit-autoclimb-E6T7RRSC.js +81 -0
  135. package/chunks/exploit-climb-2FAUP6XU.js +358 -0
  136. package/chunks/fix-IG7LYXH3.js +12 -0
  137. package/chunks/github-issues-MJ6OYOOU.js +157 -0
  138. package/chunks/harness-HWOYFKFY.js +22 -0
  139. package/chunks/http-conformance-DU66MZIU.js +11 -0
  140. package/chunks/http-sender-GWH2IYEA.js +10 -0
  141. package/chunks/hunt-scan-XPELSPQQ.js +38 -0
  142. package/chunks/identity-6ZAIIWOR.js +191 -0
  143. package/chunks/kernel-primitive-TENE3R7T.js +44 -0
  144. package/chunks/kernel-vm-runner-4F6QSNFY.js +62 -0
  145. package/chunks/memsafety-scan-J7SECV5W.js +16 -0
  146. package/chunks/native-loop-NTONUDP7.js +54 -0
  147. package/chunks/npm-detectors-KB5Y5ZFX.js +69 -0
  148. package/chunks/npm-dynamic-discovery-AHROOZDB.js +13 -0
  149. package/chunks/orchestrate-ZUWAUWBC.js +62 -0
  150. package/chunks/pipeline-FCARFZU3.js +14 -0
  151. package/chunks/pre-recon-cve-66EB6G4M.js +351 -0
  152. package/chunks/prepare-MYY743TK.js +13 -0
  153. package/chunks/process-3Q7QJIOZ.js +13 -0
  154. package/chunks/replay-runner-RRR4E2A7.js +39 -0
  155. package/chunks/run-ESNN4V5W.js +32632 -0
  156. package/chunks/runtime-62ZQAH7H.js +43 -0
  157. package/chunks/runtime-J7PLXZNM.js +12 -0
  158. package/chunks/scan-stream-FHI2FYZE.js +96 -0
  159. package/chunks/scope-BI7BF4ZY.js +18 -0
  160. package/chunks/session-store-BCFQYDCE.js +28 -0
  161. package/chunks/source-files-PWRQR6LY.js +12 -0
  162. package/chunks/specdrift-WCLH6TTQ.js +19 -0
  163. package/chunks/variant-candidates-6KM6F6MD.js +13 -0
  164. package/chunks/web-recon-prepass-DPVCBRZA.js +1148 -0
  165. package/dashboard/assets/0sec-icon-66SreztZ.gif +0 -0
  166. package/dashboard/assets/bot-yILPnRgD.js +1 -0
  167. package/dashboard/assets/chevron-down-BeDJ-Vka.js +1 -0
  168. package/dashboard/assets/circle-alert-BEnMBMT-.js +1 -0
  169. package/dashboard/assets/client-DRYsuOGl.js +9 -0
  170. package/dashboard/assets/copy-Bi5vzoF9.js +1 -0
  171. package/dashboard/assets/desktop-CXTQonNm.js +32 -0
  172. package/dashboard/assets/desktop-NOekk4QS.css +1 -0
  173. package/dashboard/assets/dist-CmX-h7a4.js +1 -0
  174. package/dashboard/assets/dist-DAwYQmf_.js +45 -0
  175. package/dashboard/assets/findings-page-CACW9nw2.js +5 -0
  176. package/dashboard/assets/format-PoISqsES.js +1 -0
  177. package/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  178. package/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  179. package/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  180. package/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  181. package/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  182. package/dashboard/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  183. package/dashboard/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  184. package/dashboard/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  185. package/dashboard/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  186. package/dashboard/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  187. package/dashboard/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  188. package/dashboard/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  189. package/dashboard/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  190. package/dashboard/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  191. package/dashboard/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  192. package/dashboard/assets/jsx-runtime-C7oxC63R.js +1 -0
  193. package/dashboard/assets/live-page-DrgQqQK5.js +1 -0
  194. package/dashboard/assets/meta-tile-CcskIV_o.js +1 -0
  195. package/dashboard/assets/operations-BKE8T-vY.css +2 -0
  196. package/dashboard/assets/operations-D8nUP5_m.js +4 -0
  197. package/dashboard/assets/operations-app-CQQhG54n.js +2 -0
  198. package/dashboard/assets/overview-page-DTGS8dPo.js +1 -0
  199. package/dashboard/assets/page-header-MFVvEtZW.js +1 -0
  200. package/dashboard/assets/play-Dwo-9xt6.js +1 -0
  201. package/dashboard/assets/scans-page-ChVtq8Us.js +1 -0
  202. package/dashboard/assets/search-CiooTLck.js +1 -0
  203. package/dashboard/assets/siren-CCBwTSuk.js +1 -0
  204. package/dashboard/assets/table-BYS-nIVA.js +1 -0
  205. package/dashboard/assets/tabs-DivxbhQy.js +1 -0
  206. package/dashboard/desktop.html +21 -0
  207. package/dashboard/index.html +15 -0
  208. package/package.json +30 -18
  209. package/bin/0sec.cjs +0 -361
@@ -0,0 +1,611 @@
1
+ {
2
+ "provenance": "0verse (bench:/root/0verse/src/zeroverse/data/archetypes.json), kernel-domain subset, ported 2026-07-05",
3
+ "archetypes": [
4
+ {
5
+ "id": "NF-01",
6
+ "name": "nf_tables set-element deferred-free UAF (GC / async destroy / commit race)",
7
+ "cwe": "CWE-416",
8
+ "subsystem": "net/netfilter (nf_tables)",
9
+ "pattern": "A set element / set backend (pipapo, rbtree, hash) is unlinked in one phase and freed by a deferred path (GC worker, call_rcu, transaction commit/abort) while another path still holds or re-walks the reference. Split unlink-vs-reclaim phases, GC-on-insert, or duplicate-element-pending-GC create a window where the freed element is reused.",
10
+ "detection_signature": "In a stripped nf_tables-related .ko the imported-symbol relocations survive insmod resolution: look for call_rcu / kfree_rcu / queue_delayed_work / nft_* set-ops callbacks alongside kfree of an object that is also reachable from an rcu/list walk. Decompiled shape: object unlinked from a list, then freed in a *different* function/workqueue callback than the one that still iterates it. Maps to 0verse lens L8 (deferred-free-uaf) + L12 (list-unlink). HARD in pure binary: requires cross-callback lifetime reasoning; emit as hypothesis, not a finding.",
11
+ "grounding": [
12
+ "CVE-2024-26808",
13
+ "CVE-2023-3390",
14
+ "CVE-2024-26925",
15
+ "nft_set_pipapo split-gc / nft_set_rbtree gc-on-insert fixes"
16
+ ],
17
+ "confirmable": "NO on bare binary (no live oracle for a deferred-free race). Confirmation belongs to the bench kernel-verify lane: build/boot the module under KASAN and replay the GC/commit sequence.",
18
+ "domain": "kernel",
19
+ "uid": "kernel/NF-01",
20
+ "engine_lens": "seed:linux-ko:deferred-free-uaf",
21
+ "route": "kernel-verify"
22
+ },
23
+ {
24
+ "id": "NF-02",
25
+ "name": "nf_tables object/expr destroy-path UAF & error-path double-free",
26
+ "cwe": "CWE-416 / CWE-415",
27
+ "subsystem": "net/netfilter (nf_tables)",
28
+ "pattern": "Stateful object or expression (nft_tunnel, nft_ct timeout, nft_object, anonymous set bound in same transaction) is destroyed/freed on an error or abort path while another reference (binding, chain, transaction log) still points to it -> UAF, or it is freed twice across error + cleanup.",
29
+ "detection_signature": "Relocations to nf_tables core (nft_obj_*, nf_tables_*destroy, module_put) survive. Decompiled shape: an init/clone function with an error label that kfree/destroys an object that the caller also frees on failure; or a _destroy callback freeing an object that a sibling _deactivate already released. Maps to L5 (refcount-asymmetry) + L6 (error-path-doublefree). MEDIUM in binary when both free sites are in the same module and one error edge is clearly shared.",
30
+ "grounding": [
31
+ "CVE-2023-32233",
32
+ "CVE-2024-1086",
33
+ "nft_tunnel UAF-on-destroy",
34
+ "nft_ct timeout-object UAF"
35
+ ],
36
+ "confirmable": "NO on bare binary; double-free on a shared error edge is the most statically-plausible sub-case but still needs the kernel-verify lane to prove reachability.",
37
+ "domain": "kernel",
38
+ "uid": "kernel/NF-02",
39
+ "engine_lens": "seed:linux-ko:errpath-double-free",
40
+ "route": "kernel-verify"
41
+ },
42
+ {
43
+ "id": "NF-03",
44
+ "name": "Netlink attribute parsing OOB / missing NLA length & range validation",
45
+ "cwe": "CWE-787 / CWE-125",
46
+ "subsystem": "net/netfilter, net/* (netlink config plane)",
47
+ "pattern": "Attacker-supplied netlink attribute length/index/range is trusted without policy bounds: nla_parse without a min/max policy, a user range with start>end, or an option/blob length that overruns a fixed table -> heap OOB read or write at config time.",
48
+ "detection_signature": "STRONG binary signal: relocations to nla_parse / nla_parse_nested / __nla_parse / nla_get_u32 / nla_memcpy / nla_put are preserved. Decompiled shape: value loaded via nla_get_*() then used directly as memcpy length / array index / loop bound with no preceding compare against a constant cap. Maps to L1 (user-len-copy) + L3 (selector-index). HIGH detectability even stripped, because the nla_* import names cannot be stripped (module loader resolves by name).",
49
+ "grounding": [
50
+ "CVE-2024-53141 (ipset missing range check)",
51
+ "CVE-2024-26642",
52
+ "geneve_opt length integer overflow",
53
+ "nft_set_pipapo lookup-table alloc overflow"
54
+ ],
55
+ "confirmable": "NO PoV on bare binary, but the bounds-missing shape is one of the most confirmable-by-inspection kernel patterns; verify in the kernel-verify lane with a crafted netlink message.",
56
+ "domain": "kernel",
57
+ "uid": "kernel/NF-03",
58
+ "engine_lens": "seed:linux-ko:netlink-oob",
59
+ "route": "kernel-static"
60
+ },
61
+ {
62
+ "id": "NF-04",
63
+ "name": "nf_tables register store/load type confusion & OOB register index",
64
+ "cwe": "CWE-843 / CWE-787",
65
+ "subsystem": "net/netfilter (nf_tables VM)",
66
+ "pattern": "nft expressions read/write a virtual register file (nft_regs). A missing nft_validate_register_store/load check, wrong register width, or unchecked dreg/sreg index lets an expression write past the register array or reinterpret a register's type -> OOB into adjacent kernel state during rule eval.",
67
+ "detection_signature": "Domain-specific lens L11 (register-machine index OOB). Relocations to nft_validate_register_* survive; ABSENCE of a validate call before a register write, or a register index not masked to NFT_REG_SIZE, is the tell. MEDIUM-HARD: needs recognizing the nft register ABI in the decompile; easier with nft symbol hints.",
68
+ "grounding": [
69
+ "CVE-2023-4015",
70
+ "CVE-2023-4147",
71
+ "CVE-2023-5717"
72
+ ],
73
+ "confirmable": "NO on bare binary; kernel-verify lane with a rule that triggers the bad register access.",
74
+ "domain": "kernel",
75
+ "uid": "kernel/NF-04",
76
+ "engine_lens": null,
77
+ "route": "kernel-verify"
78
+ },
79
+ {
80
+ "id": "NF-05",
81
+ "name": "conntrack / ctnetlink dump & refcount-underflow UAF, namespace-vs-GC race",
82
+ "cwe": "CWE-416 / CWE-911",
83
+ "subsystem": "net/netfilter (conntrack, ipset)",
84
+ "pattern": "Dump or destroy of a conntrack/expectation/ipset object races a GC worker or netns teardown; a refcount is underflowed (put without get, or freed while a dump cursor holds it) -> UAF on a long-lived networking object.",
85
+ "detection_signature": "Relocations to refcount_dec_and_test / nf_ct_put / atomic_dec preserved. Shape: a dump callback that nf_ct_get()s but releases on an early-return error path twice, or a put not paired with a get. Maps to L5 (refcount-asymmetry) + L8. HARD statically (concurrency).",
86
+ "grounding": [
87
+ "ctnetlink_dump_exp_ct UAF",
88
+ "netfilter get_info() UAF",
89
+ "ipset list:set namespace-cleanup vs GC race"
90
+ ],
91
+ "confirmable": "NO; kernel-verify lane under netns churn + KASAN.",
92
+ "domain": "kernel",
93
+ "uid": "kernel/NF-05",
94
+ "engine_lens": "seed:linux-ko:refcount-uaf",
95
+ "route": "kernel-verify"
96
+ },
97
+ {
98
+ "id": "SCH-01",
99
+ "name": "qdisc class refcount/UAF on graft/change/destroy error path",
100
+ "cwe": "CWE-416",
101
+ "subsystem": "net/sched (qdisc)",
102
+ "pattern": "A qdisc class (qfq, hfsc, drr, htb, cbs) is grafted/changed/deleted; an error or reset path frees or unlinks a class while the parent qdisc, an active filter, or a child qdisc still references it (e.g. child qdisc not reset before parent free). Classic refcount-on-error-path -> UAF.",
103
+ "detection_signature": "Relocations to qdisc_put / qdisc_destroy / qdisc_reset / tcf_block_put survive. Shape: a *_change/*_graft function whose error label calls qdisc_destroy on an object still linked into a class hash, or a *_destroy that frees children in wrong order. Maps to L5 + L12. MEDIUM: order-of-free bugs are partly visible in the decompile.",
104
+ "grounding": [
105
+ "CVE-2023-3611 (qfq)",
106
+ "CVE-2023-31436 (qfq)",
107
+ "CVE-2025-21700 (sch_cbs child qdisc reset)",
108
+ "CVE-2024-36972"
109
+ ],
110
+ "confirmable": "NO on bare binary; kernel-verify lane with tc class manipulation + KASAN.",
111
+ "domain": "kernel",
112
+ "uid": "kernel/SCH-01",
113
+ "engine_lens": "seed:linux-ko:refcount-uaf",
114
+ "route": "kernel-verify"
115
+ },
116
+ {
117
+ "id": "SCH-02",
118
+ "name": "tc classifier (cls_*) filter UAF on delete/replace",
119
+ "cwe": "CWE-416",
120
+ "subsystem": "net/sched (cls_u32, cls_route, cls_fw, cls_tcindex, cls_flower)",
121
+ "pattern": "Filter delete/replace frees a filter node or hashtable while a packet-path or another filter still references it; RCU grace handling or refcount on the filter is wrong -> UAF in classify path.",
122
+ "detection_signature": "Relocations to tcf_exts_*, call_rcu, kfree_rcu, tcf_unbind_filter preserved. Shape: filter freed in a delete callback while still on an rcu-protected list reachable from classify. Maps to L8 + L5. HARD (RCU lifetime).",
123
+ "grounding": [
124
+ "CVE-2023-4206/4207/4208 (cls_route/fw/u32)",
125
+ "CVE-2023-3776 / CVE-2023-3777",
126
+ "CVE-2024-1085"
127
+ ],
128
+ "confirmable": "NO; kernel-verify lane.",
129
+ "domain": "kernel",
130
+ "uid": "kernel/SCH-02",
131
+ "engine_lens": "seed:linux-ko:deferred-free-uaf",
132
+ "route": "kernel-verify"
133
+ },
134
+ {
135
+ "id": "SCH-03",
136
+ "name": "qdisc enqueue recursion / list corruption / stack overflow",
137
+ "cwe": "CWE-674 / CWE-787",
138
+ "subsystem": "net/sched",
139
+ "pattern": "Mis-validated qdisc topology lets enqueue/dequeue recurse unboundedly or corrupt the gso/backlog list (e.g. act_mirred blockcast recursion bypass -> stack overflow; netem/peek re-entry).",
140
+ "detection_signature": "Shape: an enqueue path that re-invokes another qdisc's enqueue without a depth guard, or list_add/list_del on a packet list without lock. Maps to L12. HARD-MEDIUM.",
141
+ "grounding": [
142
+ "act_mirred blockcast recursion -> stack overflow",
143
+ "CVE-2025-21701/21702 (qdisc backlog)",
144
+ "netem"
145
+ ],
146
+ "confirmable": "NO; kernel-verify lane.",
147
+ "domain": "kernel",
148
+ "uid": "kernel/SCH-03",
149
+ "engine_lens": null,
150
+ "route": "kernel-verify"
151
+ },
152
+ {
153
+ "id": "SCH-04",
154
+ "name": "qdisc/class dump uninitialized-field info leak (data-race or padding)",
155
+ "cwe": "CWE-200 / CWE-908",
156
+ "subsystem": "net/sched (dump_class_stats, dump_stats)",
157
+ "pattern": "*_dump_stats / *_dump_class_stats copies a stats struct to userspace via nla_put while fields are read without locking (data-race) or struct padding is uninitialized -> kernel pointer/heap-content leak.",
158
+ "detection_signature": "STRONG binary signal: relocations to nla_put / nla_put_64bit / memset preserved. Shape: a struct filled field-by-field then nla_put'd WITHOUT a preceding memset(0) of the whole struct, or read of shared counters without READ_ONCE. Maps to L7 (uninit-copy-to-user). MEDIUM detectability (missing memset before nla_put is visible).",
159
+ "grounding": [
160
+ "sch_cake/htb/hfsc/sfq/fq_codel/pie dump-stats data-race annotations (mass fix wave)"
161
+ ],
162
+ "confirmable": "NO PoV, but missing-memset-before-copy is statically inspectable; kernel-verify lane confirms leak content.",
163
+ "domain": "kernel",
164
+ "uid": "kernel/SCH-04",
165
+ "engine_lens": "seed:linux-ko:uninit-infoleak",
166
+ "route": "kernel-static"
167
+ },
168
+ {
169
+ "id": "IOU-01",
170
+ "name": "io_uring registered buffer/file premature-free UAF",
171
+ "cwe": "CWE-416",
172
+ "subsystem": "io_uring",
173
+ "pattern": "A registered buffer, fixed file, or provided-buffer ring (pbuf_ring) is freed/unregistered while an in-flight request or mmap still references it; missing refcount or wrong unregister ordering -> page/object UAF.",
174
+ "detection_signature": "Relocations to io_* core, percpu_ref_*, fput, folio_put preserved. HARD: io_uring is in-tree core (not a discrete .ko), so this archetype is mostly relevant to source/dynamic; in a vendor kernel image the io_uring code is a large static blob. Maps to L5 + L8.",
175
+ "grounding": [
176
+ "CVE-2024-0582 (registered buffer leak -> page UAF -> Dirty Pipe-style write)",
177
+ "CVE-2023-2598",
178
+ "CVE-2022-2602"
179
+ ],
180
+ "confirmable": "NO; kernel-verify lane.",
181
+ "domain": "kernel",
182
+ "uid": "kernel/IOU-01",
183
+ "engine_lens": null,
184
+ "route": "not-binary-detectable"
185
+ },
186
+ {
187
+ "id": "IOU-02",
188
+ "name": "io_uring async/task_work request reuse race",
189
+ "cwe": "CWE-416 / CWE-362",
190
+ "subsystem": "io_uring",
191
+ "pattern": "A request object is completed/freed and recycled while a concurrent task_work, poll, or cancel path still operates on it (req->task, req->file, linked SQE) -> UAF / type confusion across operations.",
192
+ "detection_signature": "HARD statically (concurrency, in-tree). Shape: req freed on one completion path while another path dereferences it. Maps to L9 (race) + L5.",
193
+ "grounding": [
194
+ "CVE-2024-41009",
195
+ "CVE-2023-21400",
196
+ "CVE-2026-23274 / CVE-2026-23351 (io_uring memory-safety, kernelCTF)"
197
+ ],
198
+ "confirmable": "NO; kernel-verify lane with stress + KASAN.",
199
+ "domain": "kernel",
200
+ "uid": "kernel/IOU-02",
201
+ "engine_lens": null,
202
+ "route": "not-binary-detectable"
203
+ },
204
+ {
205
+ "id": "BPF-01",
206
+ "name": "eBPF verifier register-bounds / pruning miscalculation -> OOB R/W",
207
+ "cwe": "CWE-125 / CWE-787 / CWE-682",
208
+ "subsystem": "bpf (verifier)",
209
+ "pattern": "The verifier mis-tracks a register's value/bounds (ALU op, sign-extension, state pruning, or scalar/pointer confusion) so a program that PASSES verification performs an OOB load/store at runtime.",
210
+ "detection_signature": "VERY HARD in binary: the bug is in verifier *logic*, semantic, in-tree. Not a stripped-.ko pattern at all. Maps to L11 conceptually but realistically needs source + a verifier differential/fuzzer. Flag as out-of-scope for bare-binary detection.",
211
+ "grounding": [
212
+ "CVE-2023-2163 (incorrect pruning)",
213
+ "CVE-2022-23222",
214
+ "CVE-2021-3490"
215
+ ],
216
+ "confirmable": "NO; needs source + dynamic verifier testing.",
217
+ "domain": "kernel",
218
+ "uid": "kernel/BPF-01",
219
+ "engine_lens": null,
220
+ "route": "not-binary-detectable"
221
+ },
222
+ {
223
+ "id": "BPF-02",
224
+ "name": "bpf map / ringbuf / helper refcount & value-copy bug",
225
+ "cwe": "CWE-416 / CWE-190",
226
+ "subsystem": "bpf (maps, helpers)",
227
+ "pattern": "A map element, ringbuf record, or helper-returned pointer is freed or sized wrong (off-by-one, refcount on map value across program exit) -> UAF or OOB on the map value object.",
228
+ "detection_signature": "HARD-MEDIUM, in-tree. Shape visible only if a discrete helper does kfree/refcount on a map value. Maps to L5.",
229
+ "grounding": [
230
+ "CVE-2024-41010",
231
+ "bpf ringbuf reservation bugs"
232
+ ],
233
+ "confirmable": "NO; kernel-verify lane.",
234
+ "domain": "kernel",
235
+ "uid": "kernel/BPF-02",
236
+ "engine_lens": null,
237
+ "route": "not-binary-detectable"
238
+ },
239
+ {
240
+ "id": "SOCK-01",
241
+ "name": "socket connect/release lifetime race UAF (sk vs signal/close)",
242
+ "cwe": "CWE-416 / CWE-362",
243
+ "subsystem": "net (af_vsock, af_unix, af_* core)",
244
+ "pattern": "A socket struct (or sk_buff queued on it) is freed by close/release/signal-interrupted-connect while another syscall path still uses it; transport assignment or GC ordering is racy.",
245
+ "detection_signature": "Relocations to sock_put / __sk_destruct / skb_free / kfree_skb / lock_sock survive. HARD (concurrency). Shape: sk dereferenced after a lock_sock-released window, or transport freed on signal path. Maps to L9 + L5.",
246
+ "grounding": [
247
+ "CVE-2024-50264 (af_vsock connect-vs-signal UAF)",
248
+ "af_unix gc UAF family",
249
+ "CVE-2025-21756 (vsock)"
250
+ ],
251
+ "confirmable": "NO; kernel-verify lane. (bench has kernel-hack-drill-style harnesses for exactly this class.)",
252
+ "domain": "kernel",
253
+ "uid": "kernel/SOCK-01",
254
+ "engine_lens": "seed:linux-ko:deferred-free-uaf",
255
+ "route": "kernel-verify"
256
+ },
257
+ {
258
+ "id": "SOCK-02",
259
+ "name": "sockmap / sk_psock / kcm recvmsg-sendmsg sk_buff sharing UAF",
260
+ "cwe": "CWE-416",
261
+ "subsystem": "net (sockmap, kcm, sk_msg, tls)",
262
+ "pattern": "An skb/sk_msg is shared between a psock backlog and the receive path; partial recv, MSG_PEEK, redirect, or unattach frees or re-queues the buffer while still referenced -> UAF.",
263
+ "detection_signature": "Relocations to sk_psock_*, skb_clone, kfree_skb, sk_msg_* survive. HARD (concurrency + queue lifetime). Shape: skb freed in one queue path while linked in another. Maps to L8 + L12.",
264
+ "grounding": [
265
+ "kcm_unattach() race (baseline on bench /root/linux-6.1)",
266
+ "sk_msg SOCKMAP UDP recvmsg UAF (n-day)",
267
+ "kcm_write_msgs UAF"
268
+ ],
269
+ "confirmable": "NO; kernel-verify lane. bench has the kcm baseline + skmsg-lpe harness already.",
270
+ "domain": "kernel",
271
+ "uid": "kernel/SOCK-02",
272
+ "engine_lens": "seed:linux-ko:deferred-free-uaf",
273
+ "route": "kernel-verify"
274
+ },
275
+ {
276
+ "id": "SOCK-03",
277
+ "name": "setsockopt/getsockopt optlen OOB / sockptr copy confusion",
278
+ "cwe": "CWE-125 / CWE-787",
279
+ "subsystem": "net (per-protocol setsockopt/getsockopt)",
280
+ "pattern": "optlen from userspace is trusted: copy_from_sockptr of attacker length into a fixed buffer, or getsockopt writing more than the user buffer, or a signed/unsigned optlen confusion -> stack/heap OOB.",
281
+ "detection_signature": "STRONG: relocations to copy_from_sockptr / copy_to_sockptr / copy_from_user / put_user survive. Shape: copy sized by a user-provided optlen with no clamp to sizeof(local). Maps to L1. HIGH detectability.",
282
+ "grounding": [
283
+ "CVE-2024-26642 (nft)",
284
+ "various per-protocol setsockopt OOB",
285
+ "CVE-2023-... do_ip_vs_get_ctl integer overflow"
286
+ ],
287
+ "confirmable": "NO PoV, but bounded-copy-missing is statically inspectable; kernel-verify lane confirms.",
288
+ "domain": "kernel",
289
+ "uid": "kernel/SOCK-03",
290
+ "engine_lens": "seed:linux-ko:copy-from-user",
291
+ "route": "kernel-static"
292
+ },
293
+ {
294
+ "id": "SOCK-04",
295
+ "name": "minor-protocol list/queue UAF & race (CAN bcm, n_gsm, tipc, nfc, bluetooth)",
296
+ "cwe": "CWE-416 / CWE-362",
297
+ "subsystem": "net (drivers/net, net/tipc, net/nfc, net/bluetooth, net/can)",
298
+ "pattern": "Less-audited protocols mismanage a per-socket list/timer/fragment-reassembly buffer on teardown or concurrent op -> UAF / double-free / OOB. These are reachable by unprivileged users and historically under-fuzzed.",
299
+ "detection_signature": "Relocations to del_timer / hrtimer_cancel / list_del / kfree_skb / call_rcu survive. Shape: timer or list entry freed but not removed, or reassembly buffer reused. Maps to L5/L8/L12. MEDIUM-HARD.",
300
+ "grounding": [
301
+ "tipc / nfc-llcp / nfc-digital / bluetooth fixes (0sec-disclosed, merged)",
302
+ "CAN bcm UAF family",
303
+ "n_gsm UAF"
304
+ ],
305
+ "confirmable": "NO; kernel-verify lane.",
306
+ "domain": "kernel",
307
+ "uid": "kernel/SOCK-04",
308
+ "engine_lens": "seed:linux-ko:refcount-uaf",
309
+ "route": "kernel-verify"
310
+ },
311
+ {
312
+ "id": "FS-01",
313
+ "name": "On-disk / image metadata parsing OOB (untrusted filesystem mount)",
314
+ "cwe": "CWE-125 / CWE-787 / CWE-190",
315
+ "subsystem": "fs (ext4, ntfs3, hfs/hfsplus, udf, f2fs, squashfs)",
316
+ "pattern": "A filesystem driver trusts on-disk length/offset/count fields when parsing superblock/inode/dirent metadata; a crafted image overruns a buffer or integer-overflows an allocation. Reachable via USB-stick/loopback mount or (in some distros) unprivileged automount.",
317
+ "detection_signature": "STRONG for the fs .ko: relocations to sb_bread / kmalloc / memcpy / le16_to_cpu / le32_to_cpu survive. Shape: a length read from buffer_head data via le*_to_cpu used as memcpy size / loop bound / kmalloc size without sanity bound. Maps to L1 + L2. HIGH detectability in a fs module.",
318
+ "grounding": [
319
+ "ntfs3 OOB family",
320
+ "hfs/hfsplus OOB (CVE-2025-... mount)",
321
+ "udf / f2fs image OOB",
322
+ "ext4 metadata OOB"
323
+ ],
324
+ "confirmable": "PARTIAL: a corpus of crafted images can be replayed in the kernel-verify lane (mount under KASAN) -- one of the more PoV-able kernel classes. Bare-binary stays hypothesis.",
325
+ "domain": "kernel",
326
+ "uid": "kernel/FS-01",
327
+ "engine_lens": "seed:linux-ko:copy-from-user",
328
+ "route": "kernel-static"
329
+ },
330
+ {
331
+ "id": "FS-02",
332
+ "name": "overlayfs / FUSE copy-up credential & permission confusion",
333
+ "cwe": "CWE-281 / CWE-862",
334
+ "subsystem": "fs (overlayfs, fuse)",
335
+ "pattern": "Copy-up or revalidation runs with the wrong cred (mounter vs caller), or a check is performed on the lower and use on the upper (TOCTOU), letting an unprivileged user gain access/setuid semantics they shouldn't.",
336
+ "detection_signature": "Relocations to override_creds / revert_creds / prepare_creds / inode_permission survive. Shape: an operation bracketed by override_creds(mounter_cred) that performs a user-influenced path op. Maps to L4 (missing/wrong cap-gate) + L9. MEDIUM.",
337
+ "grounding": [
338
+ "overlayfs copy-up cred bugs (CVE-2023-0386 family)",
339
+ "FUSE writeback / notify_inval races"
340
+ ],
341
+ "confirmable": "NO PoV on bare binary; kernel-verify lane with a layered mount.",
342
+ "domain": "kernel",
343
+ "uid": "kernel/FS-02",
344
+ "engine_lens": null,
345
+ "route": "not-binary-detectable"
346
+ },
347
+ {
348
+ "id": "FS-03",
349
+ "name": "VFS/ioctl path TOCTOU & symlink/mount-point race",
350
+ "cwe": "CWE-367",
351
+ "subsystem": "fs (vfs, per-fs ioctl)",
352
+ "pattern": "A filesystem checks a path/inode property then acts on it after a window in which the attacker swaps a symlink/mount/file (double-fetch of a user path, or re-resolved dentry).",
353
+ "detection_signature": "HARD: races are not visible as a single decompiled shape. Look for a user-pointer read twice (double-fetch) -- copy_from_user of the same uaddr in a check and a use. Maps to L9. LOW-MEDIUM detectability (double-fetch is the only statically visible sub-case).",
354
+ "grounding": [
355
+ "various fs double-fetch CVEs",
356
+ "fscrypt / fsverity setup races"
357
+ ],
358
+ "confirmable": "NO; kernel-verify lane with a racing thread.",
359
+ "domain": "kernel",
360
+ "uid": "kernel/FS-03",
361
+ "engine_lens": "seed:linux-ko:double-fetch",
362
+ "route": "kernel-verify"
363
+ },
364
+ {
365
+ "id": "MM-01",
366
+ "name": "pipe_buffer / page-cache uninitialized-flag write (Dirty Pipe family)",
367
+ "cwe": "CWE-665 / CWE-787",
368
+ "subsystem": "mm / fs (pipe, splice, page cache)",
369
+ "pattern": "A pipe_buffer's flags (PIPE_BUF_FLAG_CAN_MERGE) or a page-cache page state is left from a prior use, letting a splice/write merge into a read-only or shared page -> write to data the caller shouldn't write.",
370
+ "detection_signature": "HARD in binary (in-tree mm, subtle state init). Shape: a struct/flag field reused without reset before a merge/write decision. Maps to L7-adjacent (uninit-state). LOW detectability.",
371
+ "grounding": [
372
+ "CVE-2022-0847 (Dirty Pipe)",
373
+ "splice / page-cache write families"
374
+ ],
375
+ "confirmable": "NO; but the *exploitation* of an unrelated page-UAF INTO this primitive is a known recipe.",
376
+ "domain": "kernel",
377
+ "uid": "kernel/MM-01",
378
+ "engine_lens": null,
379
+ "route": "not-binary-detectable"
380
+ },
381
+ {
382
+ "id": "MM-02",
383
+ "name": "COW / page-table / hugepage race write (Dirty COW / Dirty Pagetable)",
384
+ "cwe": "CWE-362 / CWE-787",
385
+ "subsystem": "mm (COW, THP, page tables)",
386
+ "pattern": "A race in copy-on-write fault handling or page-table teardown lets a write land in a shared/read-only page or lets a freed page be reused as a page-table -> arbitrary physical write.",
387
+ "detection_signature": "VERY HARD (core mm, concurrency). Out-of-scope for bare-binary; listed for completeness as an exploitation TARGET primitive.",
388
+ "grounding": [
389
+ "CVE-2016-5195 (Dirty COW)",
390
+ "Huge Dirty COW",
391
+ "Dirty Pagetable technique"
392
+ ],
393
+ "confirmable": "NO.",
394
+ "domain": "kernel",
395
+ "uid": "kernel/MM-02",
396
+ "engine_lens": null,
397
+ "route": "not-binary-detectable"
398
+ },
399
+ {
400
+ "id": "MM-03",
401
+ "name": "uninitialized kernel allocation copied to user (heap/stack infoleak)",
402
+ "cwe": "CWE-908 / CWE-200",
403
+ "subsystem": "mm / drivers / net (any copy_to_user path)",
404
+ "pattern": "kmalloc (not __GFP_ZERO) or an on-stack struct with padding is partially filled then copied to userspace -> leak of prior heap contents / kernel pointers.",
405
+ "detection_signature": "STRONG generic signal: relocations to copy_to_user / put_user / nla_put paired with kmalloc (no kzalloc) and NO memset of the buffer. Shape: alloc -> set some fields -> copy_to_user(size==full struct). Maps to L7. HIGH detectability across ALL modules; the cheapest, most common find.",
406
+ "grounding": [
407
+ "countless driver/net infoleaks",
408
+ "struct padding leaks",
409
+ "compat ioctl leaks"
410
+ ],
411
+ "confirmable": "PARTIAL: the missing-zero shape is statically strong; kernel-verify lane confirms which bytes leak.",
412
+ "domain": "kernel",
413
+ "uid": "kernel/MM-03",
414
+ "engine_lens": "seed:linux-ko:uninit-infoleak",
415
+ "route": "kernel-static"
416
+ },
417
+ {
418
+ "id": "DRV-01",
419
+ "name": "ioctl dispatch: unchecked user selector index into handler/array",
420
+ "cwe": "CWE-129 / CWE-787",
421
+ "subsystem": "drivers/* (char, misc, GPU/DRM, media, platform)",
422
+ "pattern": "An ioctl cmd or a user-supplied index selects a handler from a function-pointer table or reads/writes an array element without bounding the index against the table size -> OOB call or OOB array access.",
423
+ "detection_signature": "STRONG and the SINGLE most binary-detectable kernel class: in a stripped .ko, an .unlocked_ioctl/.ioctl fop is a switch or a `table[arg]` indirect call. Relocations to copy_from_user (to read the arg struct) survive. Shape: value from user used as index/offset with no `cmp idx, CONST; ja` guard before an indexed load/indirect-call. Maps to L3 (ioctl-selector-index). HIGH detectability even fully stripped -- the fops struct and the indexed indirect call are visible.",
424
+ "grounding": [
425
+ "GPU/DRM ioctl index bugs (Mali/Adreno/NVIDIA)",
426
+ "media/v4l2 ioctl OOB",
427
+ "misc-driver command-table OOB"
428
+ ],
429
+ "confirmable": "PARTIAL: reachability is clear from the fops table; a PoV needs the device node + kernel-verify lane.",
430
+ "domain": "kernel",
431
+ "uid": "kernel/DRV-01",
432
+ "engine_lens": "seed:linux-ko:selector-index",
433
+ "route": "kernel-static"
434
+ },
435
+ {
436
+ "id": "DRV-02",
437
+ "name": "ioctl/write copy_from_user with attacker-controlled length into fixed buffer",
438
+ "cwe": "CWE-120 / CWE-121 / CWE-787",
439
+ "subsystem": "drivers/* (and any read/write/ioctl fop)",
440
+ "pattern": "copy_from_user(dst, uptr, len) where len comes from the user (ioctl arg field, write() count, header length) and dst is a fixed-size stack or heap buffer with no clamp -> overflow.",
441
+ "detection_signature": "STRONG: relocations to copy_from_user / _copy_from_user / memdup_user / strncpy_from_user survive insmod. Shape: the 3rd arg to copy_from_user traces back to a user-loaded value, and dst is a fixed stack slot (sub rsp,N) or a fixed kmalloc(CONST). Absence of a `cmp len, CONST` clamp is the tell. Maps to L1 (user-len-copy). HIGH detectability stripped.",
442
+ "grounding": [
443
+ "driver write()/ioctl stack overflows (very common)",
444
+ "vendor blob copy_from_user overflows",
445
+ "CVE families across char drivers"
446
+ ],
447
+ "confirmable": "PARTIAL: shape is statically strong; PoV via device node in kernel-verify lane.",
448
+ "domain": "kernel",
449
+ "uid": "kernel/DRV-02",
450
+ "engine_lens": "seed:linux-ko:copy-from-user",
451
+ "route": "kernel-static"
452
+ },
453
+ {
454
+ "id": "DRV-03",
455
+ "name": "allocation-size integer overflow (count * size) from user input",
456
+ "cwe": "CWE-190 -> CWE-787",
457
+ "subsystem": "drivers/* , net, fs",
458
+ "pattern": "kmalloc/kvmalloc/vmalloc/kcalloc size computed as a*b or a+b from user-controlled count and element size; the multiply overflows to a small allocation, then a loop writes `count` elements -> heap overflow. Includes missing use of array_size()/struct_size()/check_mul_overflow.",
459
+ "detection_signature": "STRONG: relocations to kmalloc / kvmalloc / vmalloc / kmalloc_array preserved. Shape: an `imul`/`shl`/`add` of two non-constant (user-traced) operands feeding the size arg of an allocator, WITHOUT a preceding overflow check (no call to __builtin_mul_overflow inline / no compare). Maps to L2 (alloc-size-arith). HIGH detectability -- the arithmetic-before-alloc pattern is visible in the decompile.",
460
+ "grounding": [
461
+ "geneve_opt length overflow",
462
+ "do_ip_vs_get_ctl overflow",
463
+ "nft_set_pipapo lookup-table alloc overflow",
464
+ "ntfs/hfs image count overflows"
465
+ ],
466
+ "confirmable": "PARTIAL: static shape strong; kernel-verify lane confirms the undersize+overflow.",
467
+ "domain": "kernel",
468
+ "uid": "kernel/DRV-03",
469
+ "engine_lens": "seed:linux-ko:kmalloc-overflow",
470
+ "route": "kernel-static"
471
+ },
472
+ {
473
+ "id": "DRV-04",
474
+ "name": "missing capable()/ns_capable() gate on a privileged operation",
475
+ "cwe": "CWE-862 / CWE-280",
476
+ "subsystem": "drivers/* , net, fs, platform/sysfs",
477
+ "pattern": "A privileged ioctl/sysfs-store/debugfs/write handler (firmware load, register poke, DMA setup, mode switch) lacks a capable(CAP_SYS_ADMIN)/ns_capable/perm check, so an unprivileged user reaches a powerful primitive directly.",
478
+ "detection_signature": "STRONG and high-value: in the .ko, the PRESENCE of a powerful sink (writel/iowrite, dma_alloc, request_firmware, copy_*_user to phys) on a path that has NO relocation to capable / ns_capable / capable_wrt_inode is the signal. Maps to L4 (missing-cap-gate). HIGH detectability: 0verse can diff `paths-to-sink` against `paths-through-capable`. Absence-of-a-call is exactly what survives stripping (the capable import would be there if used).",
479
+ "grounding": [
480
+ "numerous vendor driver missing-permission CVEs",
481
+ "debugfs/sysfs world-writable register pokes",
482
+ "GPU/perf-counter ioctls"
483
+ ],
484
+ "confirmable": "PARTIAL: the missing-check is statically strong; exploit value depends on the sink.",
485
+ "domain": "kernel",
486
+ "uid": "kernel/DRV-04",
487
+ "engine_lens": "seed:linux-ko:missing-capable",
488
+ "route": "kernel-static"
489
+ },
490
+ {
491
+ "id": "DRV-05",
492
+ "name": "shared-object refcount underflow across fd/mmap (Binder, DRM, dma-buf)",
493
+ "cwe": "CWE-416 / CWE-911",
494
+ "subsystem": "drivers/* (android binder, DRM/GEM, dma-buf, ION)",
495
+ "pattern": "An object shared between processes via fd/handle/mmap has a refcount that can be under-incremented or double-decremented (handle table races, mmap close vs ioctl) -> UAF on a long-lived, sprayable driver object.",
496
+ "detection_signature": "Relocations to kref_get/kref_put / refcount_inc/refcount_dec_and_test / dma_buf_put / drm_gem_object_put survive. Shape: a put without a matching get on some path, or a handle freed while mmapped. Maps to L5 (refcount-asymmetry). MEDIUM (some imbalance visible; races need dynamic).",
497
+ "grounding": [
498
+ "Android Binder refcount UAFs (repeated ITW exploitation)",
499
+ "DRM/GEM handle UAFs",
500
+ "dma-buf/ION lifetime bugs"
501
+ ],
502
+ "confirmable": "NO; kernel-verify lane (or device emulation).",
503
+ "domain": "kernel",
504
+ "uid": "kernel/DRV-05",
505
+ "engine_lens": "seed:linux-ko:refcount-uaf",
506
+ "route": "kernel-verify"
507
+ },
508
+ {
509
+ "id": "DRV-06",
510
+ "name": "double-free / use-after-free on driver probe/error/cleanup path",
511
+ "cwe": "CWE-415 / CWE-416",
512
+ "subsystem": "drivers/* , net, fs",
513
+ "pattern": "An init/probe/reset routine frees a resource on an error label that the caller (or a later cleanup) also frees, or frees-then-uses; tangled goto-error ladders are the classic source.",
514
+ "detection_signature": "MEDIUM: relocations to kfree / kvfree / free_irq / dma_free preserved. Shape: the same pointer passed to kfree on two reachable paths, or kfree followed by a deref of the same register. Maps to L6 (error-path-doublefree). MEDIUM detectability -- intra-function double-free is one of the few UAFs statically visible.",
515
+ "grounding": [
516
+ "probe-error double-free CVE families",
517
+ "module init/exit double-free"
518
+ ],
519
+ "confirmable": "PARTIAL: intra-function double-free is statically inspectable; cross-function needs the lane.",
520
+ "domain": "kernel",
521
+ "uid": "kernel/DRV-06",
522
+ "engine_lens": "seed:linux-ko:errpath-double-free",
523
+ "route": "kernel-verify"
524
+ },
525
+ {
526
+ "id": "DRV-07",
527
+ "name": "TOCTOU double-fetch of user pointer in ioctl",
528
+ "cwe": "CWE-367",
529
+ "subsystem": "drivers/* (ioctl with nested user pointers)",
530
+ "pattern": "An ioctl reads a length/count from the user struct, validates it, then copies again from the SAME user address (or a sub-pointer) which the attacker changes in between -> validated-then-larger copy -> overflow.",
531
+ "detection_signature": "MEDIUM-STRONG (rare among races): two copy_from_user calls reading the same uaddr, with a bound-check on the first value but the copy sized by a re-fetched value. Relocations to copy_from_user/get_user survive; the DOUBLE read of one uaddr is the static tell. Maps to L9 + L1. The most statically-detectable race sub-class.",
532
+ "grounding": [
533
+ "compat_ioctl double-fetch CVEs",
534
+ "driver header-length re-read bugs"
535
+ ],
536
+ "confirmable": "NO PoV without a racing thread; kernel-verify lane.",
537
+ "domain": "kernel",
538
+ "uid": "kernel/DRV-07",
539
+ "engine_lens": "seed:linux-ko:double-fetch",
540
+ "route": "kernel-static"
541
+ },
542
+ {
543
+ "id": "DRV-08",
544
+ "name": "DMA / mmap region with insufficient bounds -> arbitrary phys/IO access",
545
+ "cwe": "CWE-787 / CWE-822",
546
+ "subsystem": "drivers/* (dma, iommu-less mmap, /dev/mem-like nodes)",
547
+ "pattern": "A driver maps device/DMA memory to userspace (mmap fop) or programs a DMA descriptor using a user-supplied offset/size without bounding it to the allocated region -> user gets read/write to arbitrary physical or adjacent kernel memory.",
548
+ "detection_signature": "Relocations to remap_pfn_range / dma_alloc_coherent / io_remap_pfn_range / vm_iomap_memory survive. Shape: an mmap fop where vma->vm_pgoff (user-controlled) feeds the pfn without a range clamp, or a DMA addr/len from user. Maps to L1/L3. MEDIUM-HIGH (mmap fop + remap_pfn_range with unclamped pgoff is a clear shape).",
549
+ "grounding": [
550
+ "GPU/camera/video DMA mmap CVEs",
551
+ "vendor driver remap_pfn_range pgoff bugs"
552
+ ],
553
+ "confirmable": "NO PoV on bare binary; kernel-verify lane with the device.",
554
+ "domain": "kernel",
555
+ "uid": "kernel/DRV-08",
556
+ "engine_lens": "seed:linux-ko:mmap-pgoff",
557
+ "route": "kernel-static"
558
+ },
559
+ {
560
+ "id": "MISC-01",
561
+ "name": "keyring / key refcount UAF (request_key_auth, keyctl)",
562
+ "cwe": "CWE-416",
563
+ "subsystem": "security/keys",
564
+ "pattern": "A key or key_ref refcount is mishandled on an error/assoc path (request_key_auth UAF, key GC vs use) -> UAF on a key object reachable from an unprivileged keyctl call.",
565
+ "detection_signature": "Relocations to key_put / key_ref_put / refcount_dec survive. Shape: put-without-get or use-after-put on a key. Maps to L5 + L8. MEDIUM-HARD.",
566
+ "grounding": [
567
+ "request_key_auth UAF (contested, unpatched 6.12.93 per 0sec notes)",
568
+ "keyctl refcount CVEs"
569
+ ],
570
+ "confirmable": "NO; kernel-verify lane (bench has the keyctl harness).",
571
+ "domain": "kernel",
572
+ "uid": "kernel/MISC-01",
573
+ "engine_lens": "seed:linux-ko:refcount-uaf",
574
+ "route": "kernel-verify"
575
+ },
576
+ {
577
+ "id": "MISC-02",
578
+ "name": "SysV IPC / msg_msg OOB or UAF (bug-bearing OR reclaim object)",
579
+ "cwe": "CWE-787 / CWE-416",
580
+ "subsystem": "ipc (msg, shm, sem)",
581
+ "pattern": "An IPC object (msg_msg segment list, shm) is mis-sized or freed early. Note dual role: msg_msg is BOTH a recurring bug location AND the universal heap-spray/reclaim object used to exploit other UAFs.",
582
+ "detection_signature": "Relocations to kmalloc/kfree in ipc paths; msg_msg segment loop with a user-controlled msgsz feeding alloc. Maps to L2/L5. MEDIUM. (For 0verse, the higher value is recognizing msg_msg as the EXPLOIT PRIMITIVE that confirms many other UAFs in the verify lane.)",
583
+ "grounding": [
584
+ "msg_msg OOB CVEs",
585
+ "msg_msg as exploitation primitive across most UAF writeups"
586
+ ],
587
+ "confirmable": "NO; kernel-verify lane.",
588
+ "domain": "kernel",
589
+ "uid": "kernel/MISC-02",
590
+ "engine_lens": null,
591
+ "route": "kernel-verify"
592
+ },
593
+ {
594
+ "id": "MISC-03",
595
+ "name": "perf/ptrace/cred & namespace privilege confusion",
596
+ "cwe": "CWE-269 / CWE-863",
597
+ "subsystem": "kernel (cred, ptrace, user namespaces, perf)",
598
+ "pattern": "A privilege/capability check is performed against the wrong cred or namespace (init_user_ns vs current_user_ns), or a cred transition is mis-ordered, granting capabilities the caller shouldn't have. User-namespace reachability is what makes many of the above archetypes unprivileged.",
599
+ "detection_signature": "Relocations to ns_capable / capable / current_cred / make_kuid survive. Shape: capable() used where ns_capable(target_ns) is required, or a check against init_user_ns for a namespaced resource. Maps to L4. MEDIUM (requires knowing the right ns).",
600
+ "grounding": [
601
+ "user-namespace capability confusion CVEs",
602
+ "perf_event_open privilege bugs"
603
+ ],
604
+ "confirmable": "NO PoV on bare binary; semantic.",
605
+ "domain": "kernel",
606
+ "uid": "kernel/MISC-03",
607
+ "engine_lens": null,
608
+ "route": "not-binary-detectable"
609
+ }
610
+ ]
611
+ }
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __0secCreateRequire } from "node:module";
3
+ const require = __0secCreateRequire(import.meta.url);
4
+ import {
5
+ registerDbCommand,
6
+ seedVerificationWorkbench
7
+ } from "./chunk-RDZYQQLW.js";
8
+ import "./chunk-SF4KZ4O3.js";
9
+ import "./chunk-HT6P7RY3.js";
10
+ import "./chunk-KKGE5RQE.js";
11
+ import "./chunk-YLMN3N25.js";
12
+ import "./chunk-IR537GON.js";
13
+ export {
14
+ registerDbCommand,
15
+ seedVerificationWorkbench
16
+ };