@nahisaho/musubix-security 2.0.1 → 2.1.1

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 (363) hide show
  1. package/dist/analysis/enhanced-taint-analyzer.d.ts +120 -0
  2. package/dist/analysis/enhanced-taint-analyzer.d.ts.map +1 -0
  3. package/dist/analysis/enhanced-taint-analyzer.js +450 -0
  4. package/dist/analysis/enhanced-taint-analyzer.js.map +1 -0
  5. package/dist/analysis/index.d.ts +1 -0
  6. package/dist/analysis/index.d.ts.map +1 -1
  7. package/dist/analysis/index.js +1 -0
  8. package/dist/analysis/index.js.map +1 -1
  9. package/dist/analysis/interprocedural/call-graph-builder.d.ts +192 -0
  10. package/dist/analysis/interprocedural/call-graph-builder.d.ts.map +1 -0
  11. package/dist/analysis/interprocedural/call-graph-builder.js +510 -0
  12. package/dist/analysis/interprocedural/call-graph-builder.js.map +1 -0
  13. package/dist/analysis/interprocedural/dfg-adapter.d.ts +166 -0
  14. package/dist/analysis/interprocedural/dfg-adapter.d.ts.map +1 -0
  15. package/dist/analysis/interprocedural/dfg-adapter.js +455 -0
  16. package/dist/analysis/interprocedural/dfg-adapter.js.map +1 -0
  17. package/dist/analysis/interprocedural/index.d.ts +9 -0
  18. package/dist/analysis/interprocedural/index.d.ts.map +1 -0
  19. package/dist/analysis/interprocedural/index.js +9 -0
  20. package/dist/analysis/interprocedural/index.js.map +1 -0
  21. package/dist/analysis/interprocedural/taint-propagator.d.ts +250 -0
  22. package/dist/analysis/interprocedural/taint-propagator.d.ts.map +1 -0
  23. package/dist/analysis/interprocedural/taint-propagator.js +435 -0
  24. package/dist/analysis/interprocedural/taint-propagator.js.map +1 -0
  25. package/dist/analysis/sanitizers/command-sanitizers.d.ts +12 -0
  26. package/dist/analysis/sanitizers/command-sanitizers.d.ts.map +1 -0
  27. package/dist/analysis/sanitizers/command-sanitizers.js +123 -0
  28. package/dist/analysis/sanitizers/command-sanitizers.js.map +1 -0
  29. package/dist/analysis/sanitizers/html-sanitizers.d.ts +12 -0
  30. package/dist/analysis/sanitizers/html-sanitizers.d.ts.map +1 -0
  31. package/dist/analysis/sanitizers/html-sanitizers.js +213 -0
  32. package/dist/analysis/sanitizers/html-sanitizers.js.map +1 -0
  33. package/dist/analysis/sanitizers/index.d.ts +35 -0
  34. package/dist/analysis/sanitizers/index.d.ts.map +1 -0
  35. package/dist/analysis/sanitizers/index.js +59 -0
  36. package/dist/analysis/sanitizers/index.js.map +1 -0
  37. package/dist/analysis/sanitizers/path-sanitizers.d.ts +12 -0
  38. package/dist/analysis/sanitizers/path-sanitizers.d.ts.map +1 -0
  39. package/dist/analysis/sanitizers/path-sanitizers.js +163 -0
  40. package/dist/analysis/sanitizers/path-sanitizers.js.map +1 -0
  41. package/dist/analysis/sanitizers/sql-sanitizers.d.ts +12 -0
  42. package/dist/analysis/sanitizers/sql-sanitizers.d.ts.map +1 -0
  43. package/dist/analysis/sanitizers/sql-sanitizers.js +216 -0
  44. package/dist/analysis/sanitizers/sql-sanitizers.js.map +1 -0
  45. package/dist/analysis/sanitizers/types.d.ts +78 -0
  46. package/dist/analysis/sanitizers/types.d.ts.map +1 -0
  47. package/dist/analysis/sanitizers/types.js +7 -0
  48. package/dist/analysis/sanitizers/types.js.map +1 -0
  49. package/dist/analysis/sanitizers/validation-sanitizers.d.ts +12 -0
  50. package/dist/analysis/sanitizers/validation-sanitizers.d.ts.map +1 -0
  51. package/dist/analysis/sanitizers/validation-sanitizers.js +268 -0
  52. package/dist/analysis/sanitizers/validation-sanitizers.js.map +1 -0
  53. package/dist/analysis/sinks/code-eval.d.ts +12 -0
  54. package/dist/analysis/sinks/code-eval.d.ts.map +1 -0
  55. package/dist/analysis/sinks/code-eval.js +231 -0
  56. package/dist/analysis/sinks/code-eval.js.map +1 -0
  57. package/dist/analysis/sinks/command-exec.d.ts +12 -0
  58. package/dist/analysis/sinks/command-exec.d.ts.map +1 -0
  59. package/dist/analysis/sinks/command-exec.js +187 -0
  60. package/dist/analysis/sinks/command-exec.js.map +1 -0
  61. package/dist/analysis/sinks/file-operations.d.ts +12 -0
  62. package/dist/analysis/sinks/file-operations.d.ts.map +1 -0
  63. package/dist/analysis/sinks/file-operations.js +239 -0
  64. package/dist/analysis/sinks/file-operations.js.map +1 -0
  65. package/dist/analysis/sinks/html-output.d.ts +12 -0
  66. package/dist/analysis/sinks/html-output.d.ts.map +1 -0
  67. package/dist/analysis/sinks/html-output.js +256 -0
  68. package/dist/analysis/sinks/html-output.js.map +1 -0
  69. package/dist/analysis/sinks/index.d.ts +30 -0
  70. package/dist/analysis/sinks/index.d.ts.map +1 -0
  71. package/dist/analysis/sinks/index.js +46 -0
  72. package/dist/analysis/sinks/index.js.map +1 -0
  73. package/dist/analysis/sinks/sql-query.d.ts +12 -0
  74. package/dist/analysis/sinks/sql-query.d.ts.map +1 -0
  75. package/dist/analysis/sinks/sql-query.js +209 -0
  76. package/dist/analysis/sinks/sql-query.js.map +1 -0
  77. package/dist/analysis/sinks/types.d.ts +97 -0
  78. package/dist/analysis/sinks/types.d.ts.map +1 -0
  79. package/dist/analysis/sinks/types.js +7 -0
  80. package/dist/analysis/sinks/types.js.map +1 -0
  81. package/dist/analysis/sources/database.d.ts +12 -0
  82. package/dist/analysis/sources/database.d.ts.map +1 -0
  83. package/dist/analysis/sources/database.js +211 -0
  84. package/dist/analysis/sources/database.js.map +1 -0
  85. package/dist/analysis/sources/environment.d.ts +12 -0
  86. package/dist/analysis/sources/environment.d.ts.map +1 -0
  87. package/dist/analysis/sources/environment.js +158 -0
  88. package/dist/analysis/sources/environment.js.map +1 -0
  89. package/dist/analysis/sources/file-system.d.ts +12 -0
  90. package/dist/analysis/sources/file-system.d.ts.map +1 -0
  91. package/dist/analysis/sources/file-system.js +180 -0
  92. package/dist/analysis/sources/file-system.js.map +1 -0
  93. package/dist/analysis/sources/http-request.d.ts +12 -0
  94. package/dist/analysis/sources/http-request.d.ts.map +1 -0
  95. package/dist/analysis/sources/http-request.js +179 -0
  96. package/dist/analysis/sources/http-request.js.map +1 -0
  97. package/dist/analysis/sources/index.d.ts +26 -0
  98. package/dist/analysis/sources/index.d.ts.map +1 -0
  99. package/dist/analysis/sources/index.js +40 -0
  100. package/dist/analysis/sources/index.js.map +1 -0
  101. package/dist/analysis/sources/types.d.ts +93 -0
  102. package/dist/analysis/sources/types.d.ts.map +1 -0
  103. package/dist/analysis/sources/types.js +7 -0
  104. package/dist/analysis/sources/types.js.map +1 -0
  105. package/dist/analysis/sources/user-input.d.ts +12 -0
  106. package/dist/analysis/sources/user-input.d.ts.map +1 -0
  107. package/dist/analysis/sources/user-input.js +261 -0
  108. package/dist/analysis/sources/user-input.js.map +1 -0
  109. package/dist/cve/cpe-matcher.d.ts +183 -0
  110. package/dist/cve/cpe-matcher.d.ts.map +1 -0
  111. package/dist/cve/cpe-matcher.js +396 -0
  112. package/dist/cve/cpe-matcher.js.map +1 -0
  113. package/dist/cve/cve-cache.d.ts +225 -0
  114. package/dist/cve/cve-cache.d.ts.map +1 -0
  115. package/dist/cve/cve-cache.js +452 -0
  116. package/dist/cve/cve-cache.js.map +1 -0
  117. package/dist/cve/cve-cache.test.d.ts +6 -0
  118. package/dist/cve/cve-cache.test.d.ts.map +1 -0
  119. package/dist/cve/cve-cache.test.js +363 -0
  120. package/dist/cve/cve-cache.test.js.map +1 -0
  121. package/dist/cve/dependency-parser.d.ts +204 -0
  122. package/dist/cve/dependency-parser.d.ts.map +1 -0
  123. package/dist/cve/dependency-parser.js +338 -0
  124. package/dist/cve/dependency-parser.js.map +1 -0
  125. package/dist/cve/index.d.ts +20 -0
  126. package/dist/cve/index.d.ts.map +1 -0
  127. package/dist/cve/index.js +13 -0
  128. package/dist/cve/index.js.map +1 -0
  129. package/dist/cve/nvd-client.d.ts +137 -0
  130. package/dist/cve/nvd-client.d.ts.map +1 -0
  131. package/dist/cve/nvd-client.js +333 -0
  132. package/dist/cve/nvd-client.js.map +1 -0
  133. package/dist/cve/rate-limiter.d.ts +194 -0
  134. package/dist/cve/rate-limiter.d.ts.map +1 -0
  135. package/dist/cve/rate-limiter.js +276 -0
  136. package/dist/cve/rate-limiter.js.map +1 -0
  137. package/dist/cve/report-generator.d.ts +145 -0
  138. package/dist/cve/report-generator.d.ts.map +1 -0
  139. package/dist/cve/report-generator.js +377 -0
  140. package/dist/cve/report-generator.js.map +1 -0
  141. package/dist/cve/report-generator.test.d.ts +6 -0
  142. package/dist/cve/report-generator.test.d.ts.map +1 -0
  143. package/dist/cve/report-generator.test.js +275 -0
  144. package/dist/cve/report-generator.test.js.map +1 -0
  145. package/dist/cve/vulnerability-scanner.d.ts +198 -0
  146. package/dist/cve/vulnerability-scanner.d.ts.map +1 -0
  147. package/dist/cve/vulnerability-scanner.js +311 -0
  148. package/dist/cve/vulnerability-scanner.js.map +1 -0
  149. package/dist/cve/vulnerability-scanner.test.d.ts +6 -0
  150. package/dist/cve/vulnerability-scanner.test.d.ts.map +1 -0
  151. package/dist/cve/vulnerability-scanner.test.js +329 -0
  152. package/dist/cve/vulnerability-scanner.test.js.map +1 -0
  153. package/dist/index.d.ts +1 -0
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +4 -0
  156. package/dist/index.js.map +1 -1
  157. package/dist/rules/config/config-parser.d.ts +119 -0
  158. package/dist/rules/config/config-parser.d.ts.map +1 -0
  159. package/dist/rules/config/config-parser.js +376 -0
  160. package/dist/rules/config/config-parser.js.map +1 -0
  161. package/dist/rules/config/index.d.ts +8 -0
  162. package/dist/rules/config/index.d.ts.map +1 -0
  163. package/dist/rules/config/index.js +8 -0
  164. package/dist/rules/config/index.js.map +1 -0
  165. package/dist/rules/config/profiles.d.ts +85 -0
  166. package/dist/rules/config/profiles.d.ts.map +1 -0
  167. package/dist/rules/config/profiles.js +226 -0
  168. package/dist/rules/config/profiles.js.map +1 -0
  169. package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts +9 -0
  170. package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts.map +1 -0
  171. package/dist/rules/cwe/cwe-119-buffer-overflow.js +54 -0
  172. package/dist/rules/cwe/cwe-119-buffer-overflow.js.map +1 -0
  173. package/dist/rules/cwe/cwe-125-oob-read.d.ts +20 -0
  174. package/dist/rules/cwe/cwe-125-oob-read.d.ts.map +1 -0
  175. package/dist/rules/cwe/cwe-125-oob-read.js +247 -0
  176. package/dist/rules/cwe/cwe-125-oob-read.js.map +1 -0
  177. package/dist/rules/cwe/cwe-190-integer-overflow.d.ts +9 -0
  178. package/dist/rules/cwe/cwe-190-integer-overflow.d.ts.map +1 -0
  179. package/dist/rules/cwe/cwe-190-integer-overflow.js +55 -0
  180. package/dist/rules/cwe/cwe-190-integer-overflow.js.map +1 -0
  181. package/dist/rules/cwe/cwe-20-input-validation.d.ts +21 -0
  182. package/dist/rules/cwe/cwe-20-input-validation.d.ts.map +1 -0
  183. package/dist/rules/cwe/cwe-20-input-validation.js +342 -0
  184. package/dist/rules/cwe/cwe-20-input-validation.js.map +1 -0
  185. package/dist/rules/cwe/cwe-22-path-traversal.d.ts +20 -0
  186. package/dist/rules/cwe/cwe-22-path-traversal.d.ts.map +1 -0
  187. package/dist/rules/cwe/cwe-22-path-traversal.js +306 -0
  188. package/dist/rules/cwe/cwe-22-path-traversal.js.map +1 -0
  189. package/dist/rules/cwe/cwe-269-improper-privilege.d.ts +9 -0
  190. package/dist/rules/cwe/cwe-269-improper-privilege.d.ts.map +1 -0
  191. package/dist/rules/cwe/cwe-269-improper-privilege.js +58 -0
  192. package/dist/rules/cwe/cwe-269-improper-privilege.js.map +1 -0
  193. package/dist/rules/cwe/cwe-276-default-permissions.d.ts +9 -0
  194. package/dist/rules/cwe/cwe-276-default-permissions.d.ts.map +1 -0
  195. package/dist/rules/cwe/cwe-276-default-permissions.js +54 -0
  196. package/dist/rules/cwe/cwe-276-default-permissions.js.map +1 -0
  197. package/dist/rules/cwe/cwe-287-improper-auth.d.ts +9 -0
  198. package/dist/rules/cwe/cwe-287-improper-auth.d.ts.map +1 -0
  199. package/dist/rules/cwe/cwe-287-improper-auth.js +57 -0
  200. package/dist/rules/cwe/cwe-287-improper-auth.js.map +1 -0
  201. package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts +9 -0
  202. package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts.map +1 -0
  203. package/dist/rules/cwe/cwe-306-missing-auth-critical.js +53 -0
  204. package/dist/rules/cwe/cwe-306-missing-auth-critical.js.map +1 -0
  205. package/dist/rules/cwe/cwe-352-csrf.d.ts +9 -0
  206. package/dist/rules/cwe/cwe-352-csrf.d.ts.map +1 -0
  207. package/dist/rules/cwe/cwe-352-csrf.js +51 -0
  208. package/dist/rules/cwe/cwe-352-csrf.js.map +1 -0
  209. package/dist/rules/cwe/cwe-362-race-condition.d.ts +9 -0
  210. package/dist/rules/cwe/cwe-362-race-condition.d.ts.map +1 -0
  211. package/dist/rules/cwe/cwe-362-race-condition.js +55 -0
  212. package/dist/rules/cwe/cwe-362-race-condition.js.map +1 -0
  213. package/dist/rules/cwe/cwe-416-use-after-free.d.ts +23 -0
  214. package/dist/rules/cwe/cwe-416-use-after-free.d.ts.map +1 -0
  215. package/dist/rules/cwe/cwe-416-use-after-free.js +402 -0
  216. package/dist/rules/cwe/cwe-416-use-after-free.js.map +1 -0
  217. package/dist/rules/cwe/cwe-434-file-upload.d.ts +9 -0
  218. package/dist/rules/cwe/cwe-434-file-upload.d.ts.map +1 -0
  219. package/dist/rules/cwe/cwe-434-file-upload.js +55 -0
  220. package/dist/rules/cwe/cwe-434-file-upload.js.map +1 -0
  221. package/dist/rules/cwe/cwe-476-null-deref.d.ts +9 -0
  222. package/dist/rules/cwe/cwe-476-null-deref.d.ts.map +1 -0
  223. package/dist/rules/cwe/cwe-476-null-deref.js +55 -0
  224. package/dist/rules/cwe/cwe-476-null-deref.js.map +1 -0
  225. package/dist/rules/cwe/cwe-502-deserialization.d.ts +9 -0
  226. package/dist/rules/cwe/cwe-502-deserialization.d.ts.map +1 -0
  227. package/dist/rules/cwe/cwe-502-deserialization.js +57 -0
  228. package/dist/rules/cwe/cwe-502-deserialization.js.map +1 -0
  229. package/dist/rules/cwe/cwe-77-command-injection.d.ts +9 -0
  230. package/dist/rules/cwe/cwe-77-command-injection.d.ts.map +1 -0
  231. package/dist/rules/cwe/cwe-77-command-injection.js +55 -0
  232. package/dist/rules/cwe/cwe-77-command-injection.js.map +1 -0
  233. package/dist/rules/cwe/cwe-78-command-injection.d.ts +20 -0
  234. package/dist/rules/cwe/cwe-78-command-injection.d.ts.map +1 -0
  235. package/dist/rules/cwe/cwe-78-command-injection.js +259 -0
  236. package/dist/rules/cwe/cwe-78-command-injection.js.map +1 -0
  237. package/dist/rules/cwe/cwe-787-oob-write.d.ts +21 -0
  238. package/dist/rules/cwe/cwe-787-oob-write.d.ts.map +1 -0
  239. package/dist/rules/cwe/cwe-787-oob-write.js +321 -0
  240. package/dist/rules/cwe/cwe-787-oob-write.js.map +1 -0
  241. package/dist/rules/cwe/cwe-79-xss.d.ts +22 -0
  242. package/dist/rules/cwe/cwe-79-xss.d.ts.map +1 -0
  243. package/dist/rules/cwe/cwe-79-xss.js +386 -0
  244. package/dist/rules/cwe/cwe-79-xss.js.map +1 -0
  245. package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts +9 -0
  246. package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts.map +1 -0
  247. package/dist/rules/cwe/cwe-798-hardcoded-credentials.js +58 -0
  248. package/dist/rules/cwe/cwe-798-hardcoded-credentials.js.map +1 -0
  249. package/dist/rules/cwe/cwe-862-missing-auth.d.ts +9 -0
  250. package/dist/rules/cwe/cwe-862-missing-auth.d.ts.map +1 -0
  251. package/dist/rules/cwe/cwe-862-missing-auth.js +55 -0
  252. package/dist/rules/cwe/cwe-862-missing-auth.js.map +1 -0
  253. package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts +9 -0
  254. package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts.map +1 -0
  255. package/dist/rules/cwe/cwe-863-incorrect-auth.js +58 -0
  256. package/dist/rules/cwe/cwe-863-incorrect-auth.js.map +1 -0
  257. package/dist/rules/cwe/cwe-89-sql-injection.d.ts +21 -0
  258. package/dist/rules/cwe/cwe-89-sql-injection.d.ts.map +1 -0
  259. package/dist/rules/cwe/cwe-89-sql-injection.js +456 -0
  260. package/dist/rules/cwe/cwe-89-sql-injection.js.map +1 -0
  261. package/dist/rules/cwe/cwe-918-ssrf.d.ts +9 -0
  262. package/dist/rules/cwe/cwe-918-ssrf.d.ts.map +1 -0
  263. package/dist/rules/cwe/cwe-918-ssrf.js +59 -0
  264. package/dist/rules/cwe/cwe-918-ssrf.js.map +1 -0
  265. package/dist/rules/cwe/cwe-94-code-injection.d.ts +9 -0
  266. package/dist/rules/cwe/cwe-94-code-injection.d.ts.map +1 -0
  267. package/dist/rules/cwe/cwe-94-code-injection.js +59 -0
  268. package/dist/rules/cwe/cwe-94-code-injection.js.map +1 -0
  269. package/dist/rules/cwe/index.d.ts +43 -0
  270. package/dist/rules/cwe/index.d.ts.map +1 -0
  271. package/dist/rules/cwe/index.js +99 -0
  272. package/dist/rules/cwe/index.js.map +1 -0
  273. package/dist/rules/engine/index.d.ts +10 -0
  274. package/dist/rules/engine/index.d.ts.map +1 -0
  275. package/dist/rules/engine/index.js +9 -0
  276. package/dist/rules/engine/index.js.map +1 -0
  277. package/dist/rules/engine/rule-context.d.ts +99 -0
  278. package/dist/rules/engine/rule-context.d.ts.map +1 -0
  279. package/dist/rules/engine/rule-context.js +175 -0
  280. package/dist/rules/engine/rule-context.js.map +1 -0
  281. package/dist/rules/engine/rule-engine.d.ts +132 -0
  282. package/dist/rules/engine/rule-engine.d.ts.map +1 -0
  283. package/dist/rules/engine/rule-engine.js +379 -0
  284. package/dist/rules/engine/rule-engine.js.map +1 -0
  285. package/dist/rules/engine/rule-registry.d.ts +133 -0
  286. package/dist/rules/engine/rule-registry.d.ts.map +1 -0
  287. package/dist/rules/engine/rule-registry.js +281 -0
  288. package/dist/rules/engine/rule-registry.js.map +1 -0
  289. package/dist/rules/index.d.ts +14 -0
  290. package/dist/rules/index.d.ts.map +1 -0
  291. package/dist/rules/index.js +16 -0
  292. package/dist/rules/index.js.map +1 -0
  293. package/dist/rules/owasp/a01-broken-access-control.d.ts +19 -0
  294. package/dist/rules/owasp/a01-broken-access-control.d.ts.map +1 -0
  295. package/dist/rules/owasp/a01-broken-access-control.js +295 -0
  296. package/dist/rules/owasp/a01-broken-access-control.js.map +1 -0
  297. package/dist/rules/owasp/a02-cryptographic-failures.d.ts +19 -0
  298. package/dist/rules/owasp/a02-cryptographic-failures.d.ts.map +1 -0
  299. package/dist/rules/owasp/a02-cryptographic-failures.js +327 -0
  300. package/dist/rules/owasp/a02-cryptographic-failures.js.map +1 -0
  301. package/dist/rules/owasp/a03-injection.d.ts +21 -0
  302. package/dist/rules/owasp/a03-injection.d.ts.map +1 -0
  303. package/dist/rules/owasp/a03-injection.js +342 -0
  304. package/dist/rules/owasp/a03-injection.js.map +1 -0
  305. package/dist/rules/owasp/a04-insecure-design.d.ts +19 -0
  306. package/dist/rules/owasp/a04-insecure-design.d.ts.map +1 -0
  307. package/dist/rules/owasp/a04-insecure-design.js +403 -0
  308. package/dist/rules/owasp/a04-insecure-design.js.map +1 -0
  309. package/dist/rules/owasp/a05-security-misconfiguration.d.ts +19 -0
  310. package/dist/rules/owasp/a05-security-misconfiguration.d.ts.map +1 -0
  311. package/dist/rules/owasp/a05-security-misconfiguration.js +371 -0
  312. package/dist/rules/owasp/a05-security-misconfiguration.js.map +1 -0
  313. package/dist/rules/owasp/a06-vulnerable-components.d.ts +18 -0
  314. package/dist/rules/owasp/a06-vulnerable-components.d.ts.map +1 -0
  315. package/dist/rules/owasp/a06-vulnerable-components.js +243 -0
  316. package/dist/rules/owasp/a06-vulnerable-components.js.map +1 -0
  317. package/dist/rules/owasp/a07-auth-failures.d.ts +19 -0
  318. package/dist/rules/owasp/a07-auth-failures.d.ts.map +1 -0
  319. package/dist/rules/owasp/a07-auth-failures.js +300 -0
  320. package/dist/rules/owasp/a07-auth-failures.js.map +1 -0
  321. package/dist/rules/owasp/a08-integrity-failures.d.ts +18 -0
  322. package/dist/rules/owasp/a08-integrity-failures.d.ts.map +1 -0
  323. package/dist/rules/owasp/a08-integrity-failures.js +306 -0
  324. package/dist/rules/owasp/a08-integrity-failures.js.map +1 -0
  325. package/dist/rules/owasp/a09-logging-failures.d.ts +18 -0
  326. package/dist/rules/owasp/a09-logging-failures.d.ts.map +1 -0
  327. package/dist/rules/owasp/a09-logging-failures.js +339 -0
  328. package/dist/rules/owasp/a09-logging-failures.js.map +1 -0
  329. package/dist/rules/owasp/a10-ssrf.d.ts +18 -0
  330. package/dist/rules/owasp/a10-ssrf.d.ts.map +1 -0
  331. package/dist/rules/owasp/a10-ssrf.js +349 -0
  332. package/dist/rules/owasp/a10-ssrf.js.map +1 -0
  333. package/dist/rules/owasp/index.d.ts +20 -0
  334. package/dist/rules/owasp/index.d.ts.map +1 -0
  335. package/dist/rules/owasp/index.js +53 -0
  336. package/dist/rules/owasp/index.js.map +1 -0
  337. package/dist/rules/types.d.ts +277 -0
  338. package/dist/rules/types.d.ts.map +1 -0
  339. package/dist/rules/types.js +34 -0
  340. package/dist/rules/types.js.map +1 -0
  341. package/dist/tests/integration/epic-integration.test.d.ts +7 -0
  342. package/dist/tests/integration/epic-integration.test.d.ts.map +1 -0
  343. package/dist/tests/integration/epic-integration.test.js +390 -0
  344. package/dist/tests/integration/epic-integration.test.js.map +1 -0
  345. package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts +2 -0
  346. package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts.map +1 -0
  347. package/dist/tests/rules/cwe/cwe-top25-1-13.test.js +154 -0
  348. package/dist/tests/rules/cwe/cwe-top25-1-13.test.js.map +1 -0
  349. package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts +2 -0
  350. package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts.map +1 -0
  351. package/dist/tests/rules/cwe/cwe-top25-14-25.test.js +121 -0
  352. package/dist/tests/rules/cwe/cwe-top25-14-25.test.js.map +1 -0
  353. package/dist/types/cve.d.ts +278 -0
  354. package/dist/types/cve.d.ts.map +1 -0
  355. package/dist/types/cve.js +7 -0
  356. package/dist/types/cve.js.map +1 -0
  357. package/dist/types/index.d.ts +2 -0
  358. package/dist/types/index.d.ts.map +1 -1
  359. package/dist/types/rule.d.ts +245 -0
  360. package/dist/types/rule.d.ts.map +1 -0
  361. package/dist/types/rule.js +7 -0
  362. package/dist/types/rule.js.map +1 -0
  363. package/package.json +1 -1
@@ -0,0 +1,386 @@
1
+ /**
2
+ * @fileoverview CWE-79: Improper Neutralization of Input During Web Page Generation (XSS)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-79-xss
4
+ * @trace TSK-RULE-005
5
+ *
6
+ * Detects:
7
+ * - Reflected XSS (user input in response)
8
+ * - Stored XSS (database content in output)
9
+ * - DOM-based XSS (client-side manipulation)
10
+ * - innerHTML/outerHTML usage
11
+ * - document.write usage
12
+ * - Unsafe template rendering
13
+ *
14
+ * CWE-79 is #2 in CWE Top 25 2023.
15
+ */
16
+ /**
17
+ * CWE-79 - Cross-site Scripting (XSS)
18
+ */
19
+ export const cwe79XSS = {
20
+ id: 'cwe-79-xss',
21
+ name: 'CWE-79: Cross-site Scripting (XSS)',
22
+ description: 'Detects XSS vulnerabilities including reflected, stored, and DOM-based XSS',
23
+ defaultSeverity: 'high',
24
+ category: 'injection',
25
+ tags: ['cwe', 'xss', 'injection', 'web', 'security'],
26
+ owasp: ['A03:2021'],
27
+ cwe: ['79'],
28
+ references: [
29
+ {
30
+ title: 'CWE-79: Cross-site Scripting',
31
+ url: 'https://cwe.mitre.org/data/definitions/79.html',
32
+ },
33
+ {
34
+ title: 'OWASP XSS Prevention Cheat Sheet',
35
+ url: 'https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html',
36
+ },
37
+ ],
38
+ async analyze(context) {
39
+ const findings = [];
40
+ const sourceCode = context.sourceCode;
41
+ checkDOMXSS(context, sourceCode, findings);
42
+ checkReflectedXSS(context, sourceCode, findings);
43
+ checkUnsafeTemplating(context, sourceCode, findings);
44
+ checkReactVulnerabilities(context, sourceCode, findings);
45
+ return findings;
46
+ },
47
+ };
48
+ /**
49
+ * Check for DOM-based XSS vulnerabilities
50
+ */
51
+ function checkDOMXSS(context, sourceCode, findings) {
52
+ const lines = sourceCode.split('\n');
53
+ const domPatterns = [
54
+ {
55
+ pattern: /\.innerHTML\s*=\s*(?!['"`]<)/gi,
56
+ type: 'innerHTML assignment',
57
+ message: 'innerHTML assignment with dynamic content can lead to DOM XSS',
58
+ severity: 'high',
59
+ },
60
+ {
61
+ pattern: /\.outerHTML\s*=\s*(?!['"`]<)/gi,
62
+ type: 'outerHTML assignment',
63
+ message: 'outerHTML assignment with dynamic content can lead to DOM XSS',
64
+ severity: 'high',
65
+ },
66
+ {
67
+ pattern: /document\.write\s*\(/gi,
68
+ type: 'document.write usage',
69
+ message: 'document.write can execute scripts and is vulnerable to XSS',
70
+ severity: 'high',
71
+ },
72
+ {
73
+ pattern: /document\.writeln\s*\(/gi,
74
+ type: 'document.writeln usage',
75
+ message: 'document.writeln can execute scripts and is vulnerable to XSS',
76
+ severity: 'high',
77
+ },
78
+ {
79
+ pattern: /\.insertAdjacentHTML\s*\(/gi,
80
+ type: 'insertAdjacentHTML usage',
81
+ message: 'insertAdjacentHTML with unsanitized input can lead to XSS',
82
+ severity: 'medium',
83
+ },
84
+ {
85
+ pattern: /\.outerText\s*=|\.innerText\s*=/gi,
86
+ type: 'Text content assignment',
87
+ message: 'innerText/outerText are safer but still review for proper encoding',
88
+ severity: 'info',
89
+ },
90
+ {
91
+ pattern: /eval\s*\(\s*(?:location\.|document\.|window\.)/gi,
92
+ type: 'eval with DOM properties',
93
+ message: 'eval() with DOM properties is highly vulnerable to XSS',
94
+ severity: 'critical',
95
+ },
96
+ {
97
+ pattern: /new\s+Function\s*\(\s*(?:location\.|document\.|window\.)/gi,
98
+ type: 'Function constructor with DOM',
99
+ message: 'Function constructor with DOM properties can execute arbitrary code',
100
+ severity: 'critical',
101
+ },
102
+ {
103
+ pattern: /setTimeout\s*\(\s*(?:location\.|document\.\w+\.value)/gi,
104
+ type: 'setTimeout with DOM input',
105
+ message: 'setTimeout with DOM input can execute injected code',
106
+ severity: 'high',
107
+ },
108
+ {
109
+ pattern: /setInterval\s*\(\s*(?:location\.|document\.\w+\.value)/gi,
110
+ type: 'setInterval with DOM input',
111
+ message: 'setInterval with DOM input can execute injected code',
112
+ severity: 'high',
113
+ },
114
+ ];
115
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
116
+ const line = lines[lineNum];
117
+ for (const { pattern, type, message, severity } of domPatterns) {
118
+ pattern.lastIndex = 0;
119
+ if (pattern.test(line)) {
120
+ findings.push({
121
+ id: `cwe-79-dom-${findings.length + 1}`,
122
+ ruleId: 'cwe-79-xss',
123
+ severity,
124
+ message: `DOM XSS - ${type}: ${message}`,
125
+ location: {
126
+ file: context.filePath,
127
+ startLine: lineNum + 1,
128
+ endLine: lineNum + 1,
129
+ startColumn: 0,
130
+ endColumn: line.length,
131
+ },
132
+ cwe: ['79'],
133
+ owasp: ['A03:2021'],
134
+ suggestion: {
135
+ description: 'Use safe DOM manipulation methods',
136
+ example: `// Instead of innerHTML, use textContent for text:
137
+ element.textContent = userInput;
138
+
139
+ // Or use DOM methods for elements:
140
+ const safeElement = document.createElement('div');
141
+ safeElement.textContent = userInput;
142
+ parent.appendChild(safeElement);
143
+
144
+ // For HTML, use DOMPurify:
145
+ import DOMPurify from 'dompurify';
146
+ element.innerHTML = DOMPurify.sanitize(userInput);`,
147
+ },
148
+ });
149
+ }
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Check for reflected XSS patterns (server-side)
155
+ */
156
+ function checkReflectedXSS(context, sourceCode, findings) {
157
+ const lines = sourceCode.split('\n');
158
+ const reflectedPatterns = [
159
+ {
160
+ pattern: /res\.send\s*\(\s*(?:req\.|params\.|query\.)/gi,
161
+ type: 'Direct response with user input',
162
+ message: 'Sending user input directly in response without encoding',
163
+ severity: 'high',
164
+ },
165
+ {
166
+ pattern: /res\.write\s*\(\s*(?:req\.|params\.|query\.)/gi,
167
+ type: 'Writing user input to response',
168
+ message: 'Writing user input directly to response stream without encoding',
169
+ severity: 'high',
170
+ },
171
+ {
172
+ pattern: /res\.send\s*\(\s*`[^`]*\$\{(?:req\.|params\.|query\.)/gi,
173
+ type: 'Template literal with user input',
174
+ message: 'User input in template literal response can cause XSS',
175
+ severity: 'high',
176
+ },
177
+ {
178
+ pattern: /res\.(?:json|send)\s*\(\s*\{[^}]*:\s*(?:req\.|params\.|query\.)/gi,
179
+ type: 'User input in JSON response',
180
+ message: 'Ensure JSON response Content-Type is properly set',
181
+ severity: 'medium',
182
+ },
183
+ {
184
+ pattern: /render\s*\(\s*['"`]\w+['"`]\s*,\s*\{[^}]*:\s*(?:req\.|params\.|query\.)/gi,
185
+ type: 'User input passed to template',
186
+ message: 'User input passed to template without sanitization',
187
+ severity: 'medium',
188
+ },
189
+ {
190
+ pattern: /\.html\s*\(\s*(?:req\.|params\.|query\.)/gi,
191
+ type: 'User input in HTML response',
192
+ message: 'User input in .html() response is vulnerable to XSS',
193
+ severity: 'high',
194
+ },
195
+ ];
196
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
197
+ const line = lines[lineNum];
198
+ for (const { pattern, type, message, severity } of reflectedPatterns) {
199
+ pattern.lastIndex = 0;
200
+ if (pattern.test(line)) {
201
+ findings.push({
202
+ id: `cwe-79-reflected-${findings.length + 1}`,
203
+ ruleId: 'cwe-79-xss',
204
+ severity,
205
+ message: `Reflected XSS - ${type}: ${message}`,
206
+ location: {
207
+ file: context.filePath,
208
+ startLine: lineNum + 1,
209
+ endLine: lineNum + 1,
210
+ startColumn: 0,
211
+ endColumn: line.length,
212
+ },
213
+ cwe: ['79'],
214
+ owasp: ['A03:2021'],
215
+ suggestion: {
216
+ description: 'Encode output before sending to client',
217
+ example: `// Use a templating engine with auto-escaping (EJS, Handlebars)
218
+ // Or encode manually:
219
+ import { encode } from 'html-entities';
220
+ res.send(encode(userInput));
221
+
222
+ // For JSON responses, ensure Content-Type:
223
+ res.type('application/json').json({ data: userInput });`,
224
+ },
225
+ });
226
+ }
227
+ }
228
+ }
229
+ }
230
+ /**
231
+ * Check for unsafe templating patterns
232
+ */
233
+ function checkUnsafeTemplating(context, sourceCode, findings) {
234
+ const lines = sourceCode.split('\n');
235
+ const templatePatterns = [
236
+ {
237
+ pattern: /\{\{\{\s*\w+\s*\}\}\}/gi,
238
+ type: 'Triple mustache (unescaped)',
239
+ message: 'Triple mustache in Handlebars outputs unescaped HTML',
240
+ severity: 'high',
241
+ },
242
+ {
243
+ pattern: /<%[-=]\s*(?:req\.|params\.|query\.|body\.)/gi,
244
+ type: 'EJS with user input',
245
+ message: 'EJS unescaped output (<%-) with user input is vulnerable',
246
+ severity: 'high',
247
+ },
248
+ {
249
+ pattern: /\|\s*safe\s*\}\}/gi,
250
+ type: 'Jinja/Nunjucks safe filter',
251
+ message: 'safe filter disables auto-escaping, verify input is trusted',
252
+ severity: 'medium',
253
+ },
254
+ {
255
+ pattern: /v-html\s*=\s*["']/gi,
256
+ type: 'Vue v-html directive',
257
+ message: 'v-html renders raw HTML and can cause XSS if content is untrusted',
258
+ severity: 'high',
259
+ },
260
+ {
261
+ pattern: /\[innerHTML\]\s*=\s*["']/gi,
262
+ type: 'Angular innerHTML binding',
263
+ message: 'Angular innerHTML binding with untrusted content is vulnerable',
264
+ severity: 'high',
265
+ },
266
+ {
267
+ pattern: /bypassSecurityTrust(?:Html|Script|Style|Url|ResourceUrl)\s*\(/gi,
268
+ type: 'Angular security bypass',
269
+ message: 'Bypassing Angular sanitization is dangerous with untrusted content',
270
+ severity: 'critical',
271
+ },
272
+ ];
273
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
274
+ const line = lines[lineNum];
275
+ for (const { pattern, type, message, severity } of templatePatterns) {
276
+ pattern.lastIndex = 0;
277
+ if (pattern.test(line)) {
278
+ findings.push({
279
+ id: `cwe-79-template-${findings.length + 1}`,
280
+ ruleId: 'cwe-79-xss',
281
+ severity,
282
+ message: `Template XSS - ${type}: ${message}`,
283
+ location: {
284
+ file: context.filePath,
285
+ startLine: lineNum + 1,
286
+ endLine: lineNum + 1,
287
+ startColumn: 0,
288
+ endColumn: line.length,
289
+ },
290
+ cwe: ['79'],
291
+ owasp: ['A03:2021'],
292
+ suggestion: {
293
+ description: 'Use escaped output in templates',
294
+ example: `// Handlebars: Use double mustache for escaped output
295
+ {{ safeVariable }}
296
+
297
+ // EJS: Use <%= for escaped output
298
+ <%= userInput %>
299
+
300
+ // Vue: Use v-text or {{ }} for text content
301
+ <span>{{ userInput }}</span>
302
+
303
+ // Angular: Trust only after sanitization
304
+ this.sanitizer.sanitize(SecurityContext.HTML, content)`,
305
+ },
306
+ });
307
+ }
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Check for React-specific XSS vulnerabilities
313
+ */
314
+ function checkReactVulnerabilities(context, sourceCode, findings) {
315
+ const lines = sourceCode.split('\n');
316
+ const reactPatterns = [
317
+ {
318
+ pattern: /dangerouslySetInnerHTML\s*=\s*\{\s*\{/gi,
319
+ type: 'dangerouslySetInnerHTML usage',
320
+ message: 'dangerouslySetInnerHTML can cause XSS if content is not sanitized',
321
+ severity: 'high',
322
+ },
323
+ {
324
+ pattern: /dangerouslySetInnerHTML\s*=\s*\{\s*\{\s*__html\s*:\s*(?:props\.|state\.|data\.)/gi,
325
+ type: 'dangerouslySetInnerHTML with props/state',
326
+ message: 'Using props or state in dangerouslySetInnerHTML without sanitization',
327
+ severity: 'critical',
328
+ },
329
+ {
330
+ pattern: /href\s*=\s*\{\s*`javascript:/gi,
331
+ type: 'JavaScript URL in href',
332
+ message: 'JavaScript URLs in href attributes can execute scripts',
333
+ severity: 'critical',
334
+ },
335
+ {
336
+ pattern: /href\s*=\s*\{\s*(?:props\.|state\.|data\.)/gi,
337
+ type: 'Dynamic href from props/state',
338
+ message: 'Dynamic href values should be validated against javascript: protocol',
339
+ severity: 'medium',
340
+ },
341
+ {
342
+ pattern: /createRef\(\).*\.current\.innerHTML\s*=/gi,
343
+ type: 'Ref innerHTML assignment',
344
+ message: 'Setting innerHTML via ref bypasses React protection',
345
+ severity: 'high',
346
+ },
347
+ ];
348
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
349
+ const line = lines[lineNum];
350
+ for (const { pattern, type, message, severity } of reactPatterns) {
351
+ pattern.lastIndex = 0;
352
+ if (pattern.test(line)) {
353
+ findings.push({
354
+ id: `cwe-79-react-${findings.length + 1}`,
355
+ ruleId: 'cwe-79-xss',
356
+ severity,
357
+ message: `React XSS - ${type}: ${message}`,
358
+ location: {
359
+ file: context.filePath,
360
+ startLine: lineNum + 1,
361
+ endLine: lineNum + 1,
362
+ startColumn: 0,
363
+ endColumn: line.length,
364
+ },
365
+ cwe: ['79'],
366
+ owasp: ['A03:2021'],
367
+ suggestion: {
368
+ description: 'Use React safe patterns',
369
+ example: `// Sanitize before using dangerouslySetInnerHTML
370
+ import DOMPurify from 'dompurify';
371
+ <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(content) }} />
372
+
373
+ // Validate URLs before using in href
374
+ const safeUrl = url.startsWith('javascript:') ? '#' : url;
375
+ <a href={safeUrl}>Link</a>
376
+
377
+ // Prefer textContent for text
378
+ <span>{userInput}</span>`,
379
+ },
380
+ });
381
+ }
382
+ }
383
+ }
384
+ }
385
+ export default cwe79XSS;
386
+ //# sourceMappingURL=cwe-79-xss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-79-xss.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-79-xss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview CWE-798: Use of Hard-coded Credentials
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-798-hardcoded-credentials
4
+ * @trace TSK-RULE-006
5
+ */
6
+ import type { SecurityRule } from '../types.js';
7
+ export declare const cwe798HardcodedCredentials: SecurityRule;
8
+ export default cwe798HardcodedCredentials;
9
+ //# sourceMappingURL=cwe-798-hardcoded-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-798-hardcoded-credentials.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-798-hardcoded-credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,0BAA0B,EAAE,YAqDxC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @fileoverview CWE-798: Use of Hard-coded Credentials
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-798-hardcoded-credentials
4
+ * @trace TSK-RULE-006
5
+ */
6
+ export const cwe798HardcodedCredentials = {
7
+ id: 'cwe-798-hardcoded-credentials',
8
+ name: 'CWE-798: Hard-coded Credentials',
9
+ description: 'Detects hard-coded passwords, API keys, and secrets',
10
+ defaultSeverity: 'critical',
11
+ category: 'secrets',
12
+ tags: ['cwe', 'credentials', 'secrets', 'security'],
13
+ cwe: ['798'],
14
+ owasp: ['A07:2021'],
15
+ references: [
16
+ { title: 'CWE-798', url: 'https://cwe.mitre.org/data/definitions/798.html' },
17
+ ],
18
+ async analyze(context) {
19
+ const findings = [];
20
+ const lines = context.sourceCode.split('\n');
21
+ const patterns = [
22
+ { pattern: /password\s*[:=]\s*['"`][^'"`]{4,}['"`]/gi, type: 'Hardcoded password', severity: 'critical' },
23
+ { pattern: /api[_-]?key\s*[:=]\s*['"`][^'"`]{8,}['"`]/gi, type: 'Hardcoded API key', severity: 'critical' },
24
+ { pattern: /secret\s*[:=]\s*['"`][^'"`]{8,}['"`]/gi, type: 'Hardcoded secret', severity: 'critical' },
25
+ { pattern: /token\s*[:=]\s*['"`][A-Za-z0-9_-]{20,}['"`]/gi, type: 'Hardcoded token', severity: 'critical' },
26
+ { pattern: /private[_-]?key\s*[:=]\s*['"`]/gi, type: 'Hardcoded private key', severity: 'critical' },
27
+ { pattern: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/gi, type: 'Embedded private key', severity: 'critical' },
28
+ { pattern: /aws[_-]?(?:access|secret)[_-]?key\s*[:=]/gi, type: 'AWS credentials', severity: 'critical' },
29
+ ];
30
+ for (let i = 0; i < lines.length; i++) {
31
+ for (const { pattern, type, severity } of patterns) {
32
+ pattern.lastIndex = 0;
33
+ if (pattern.test(lines[i])) {
34
+ findings.push({
35
+ id: `cwe-798-${findings.length + 1}`,
36
+ ruleId: 'cwe-798-hardcoded-credentials',
37
+ severity,
38
+ message: `Hardcoded Credentials - ${type}: Use environment variables`,
39
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
40
+ cwe: ['798'],
41
+ owasp: ['A07:2021'],
42
+ suggestion: {
43
+ description: 'Use environment variables or secrets manager',
44
+ example: `// Use environment variables
45
+ const apiKey = process.env.API_KEY;
46
+
47
+ // Or use a secrets manager
48
+ const secret = await secretsManager.getSecret('my-secret');`,
49
+ },
50
+ });
51
+ }
52
+ }
53
+ }
54
+ return findings;
55
+ },
56
+ };
57
+ export default cwe798HardcodedCredentials;
58
+ //# sourceMappingURL=cwe-798-hardcoded-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-798-hardcoded-credentials.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-798-hardcoded-credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,0BAA0B,GAAiB;IACtD,EAAE,EAAE,+BAA+B;IACnC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EAAE,qDAAqD;IAClE,eAAe,EAAE,UAAU;IAC3B,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC;IACnD,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,CAAC,UAAU,CAAC;IACnB,UAAU,EAAE;QACV,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,iDAAiD,EAAE;KAC7E;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG;YACf,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAClH,EAAE,OAAO,EAAE,6CAA6C,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACpH,EAAE,OAAO,EAAE,wCAAwC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAC9G,EAAE,OAAO,EAAE,+CAA+C,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACpH,EAAE,OAAO,EAAE,kCAAkC,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAC7G,EAAE,OAAO,EAAE,8CAA8C,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACxH,EAAE,OAAO,EAAE,4CAA4C,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAmB,EAAE;SAClH,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACnD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,MAAM,EAAE,+BAA+B;wBACvC,QAAQ;wBACR,OAAO,EAAE,2BAA2B,IAAI,6BAA6B;wBACrE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;wBACtE,GAAG,EAAE,CAAC,KAAK,CAAC;wBACZ,KAAK,EAAE,CAAC,UAAU,CAAC;wBACnB,UAAU,EAAE;4BACV,WAAW,EAAE,8CAA8C;4BAC3D,OAAO,EAAE;;;;4DAIqC;yBAC/C;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview CWE-862: Missing Authorization
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-862-missing-auth
4
+ * @trace TSK-RULE-005
5
+ */
6
+ import type { SecurityRule } from '../types.js';
7
+ export declare const cwe862MissingAuth: SecurityRule;
8
+ export default cwe862MissingAuth;
9
+ //# sourceMappingURL=cwe-862-missing-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-862-missing-auth.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-862-missing-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,iBAAiB,EAAE,YAkD/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @fileoverview CWE-862: Missing Authorization
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-862-missing-auth
4
+ * @trace TSK-RULE-005
5
+ */
6
+ export const cwe862MissingAuth = {
7
+ id: 'cwe-862-missing-auth',
8
+ name: 'CWE-862: Missing Authorization',
9
+ description: 'Detects missing authorization checks',
10
+ defaultSeverity: 'high',
11
+ category: 'access-control',
12
+ tags: ['cwe', 'authorization', 'access-control', 'security'],
13
+ owasp: ['A01:2021'],
14
+ cwe: ['862'],
15
+ references: [
16
+ { title: 'CWE-862', url: 'https://cwe.mitre.org/data/definitions/862.html' },
17
+ ],
18
+ async analyze(context) {
19
+ const findings = [];
20
+ const lines = context.sourceCode.split('\n');
21
+ const patterns = [
22
+ { pattern: /app\.(?:get|post|put|delete)\s*\(\s*['"`]\/admin/gi, type: 'Admin route', severity: 'high' },
23
+ { pattern: /\.findByIdAndUpdate\s*\(\s*req\.params/gi, type: 'Direct ID update', severity: 'high' },
24
+ { pattern: /\.findByIdAndDelete\s*\(\s*req\.params/gi, type: 'Direct ID delete', severity: 'high' },
25
+ { pattern: /\.destroy\s*\(\s*\{\s*where\s*:\s*\{\s*id\s*:\s*req\.params/gi, type: 'Direct destroy', severity: 'high' },
26
+ { pattern: /req\.user\.id\s*!==?\s*req\.params\.id/gi, type: 'Ownership check found', severity: 'info' },
27
+ ];
28
+ for (let i = 0; i < lines.length; i++) {
29
+ for (const { pattern, type, severity } of patterns) {
30
+ pattern.lastIndex = 0;
31
+ if (pattern.test(lines[i])) {
32
+ findings.push({
33
+ id: `cwe-862-${findings.length + 1}`,
34
+ ruleId: 'cwe-862-missing-auth',
35
+ severity,
36
+ message: `Authorization - ${type}: Verify user has permission`,
37
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
38
+ cwe: ['862'],
39
+ owasp: ['A01:2021'],
40
+ suggestion: {
41
+ description: 'Add authorization middleware',
42
+ example: `// Check ownership before update
43
+ if (resource.userId !== req.user.id) {
44
+ return res.status(403).json({ error: 'Forbidden' });
45
+ }`,
46
+ },
47
+ });
48
+ }
49
+ }
50
+ }
51
+ return findings;
52
+ },
53
+ };
54
+ export default cwe862MissingAuth;
55
+ //# sourceMappingURL=cwe-862-missing-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-862-missing-auth.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-862-missing-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,sCAAsC;IACnD,eAAe,EAAE,MAAM;IACvB,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,CAAC;IAC5D,KAAK,EAAE,CAAC,UAAU,CAAC;IACnB,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,UAAU,EAAE;QACV,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,iDAAiD,EAAE;KAC7E;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG;YACf,EAAE,OAAO,EAAE,oDAAoD,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAe,EAAE;YACjH,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC5G,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC5G,EAAE,OAAO,EAAE,+DAA+D,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC/H,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAe,EAAE;SAClH,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACnD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,MAAM,EAAE,sBAAsB;wBAC9B,QAAQ;wBACR,OAAO,EAAE,mBAAmB,IAAI,8BAA8B;wBAC9D,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;wBACtE,GAAG,EAAE,CAAC,KAAK,CAAC;wBACZ,KAAK,EAAE,CAAC,UAAU,CAAC;wBACnB,UAAU,EAAE;4BACV,WAAW,EAAE,8BAA8B;4BAC3C,OAAO,EAAE;;;EAGrB;yBACW;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview CWE-863: Incorrect Authorization
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-863-incorrect-auth
4
+ * @trace TSK-RULE-006
5
+ */
6
+ import type { SecurityRule } from '../types.js';
7
+ export declare const cwe863IncorrectAuth: SecurityRule;
8
+ export default cwe863IncorrectAuth;
9
+ //# sourceMappingURL=cwe-863-incorrect-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-863-incorrect-auth.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-863-incorrect-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,mBAAmB,EAAE,YAqDjC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @fileoverview CWE-863: Incorrect Authorization
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-863-incorrect-auth
4
+ * @trace TSK-RULE-006
5
+ */
6
+ export const cwe863IncorrectAuth = {
7
+ id: 'cwe-863-incorrect-auth',
8
+ name: 'CWE-863: Incorrect Authorization',
9
+ description: 'Detects incorrect authorization implementation patterns',
10
+ defaultSeverity: 'high',
11
+ category: 'authorization',
12
+ tags: ['cwe', 'authorization', 'access-control', 'security'],
13
+ cwe: ['863'],
14
+ owasp: ['A01:2021'],
15
+ references: [
16
+ { title: 'CWE-863', url: 'https://cwe.mitre.org/data/definitions/863.html' },
17
+ ],
18
+ async analyze(context) {
19
+ const findings = [];
20
+ const lines = context.sourceCode.split('\n');
21
+ const patterns = [
22
+ { pattern: /if\s*\(\s*user\.id\s*===?\s*req\.params/gi, type: 'Client-side ID comparison', severity: 'high' },
23
+ { pattern: /req\.user\.role\s*===?\s*['"`]admin['"`]\s*\|\|/gi, type: 'OR-based permission check', severity: 'medium' },
24
+ { pattern: /\.findById\s*\(\s*req\.params/gi, type: 'Direct ID access without ownership', severity: 'high' },
25
+ { pattern: /canAccess\s*=\s*true/gi, type: 'Hardcoded access grant', severity: 'high' },
26
+ { pattern: /authorization.*skip|bypass.*auth/gi, type: 'Authorization bypass', severity: 'critical' },
27
+ { pattern: /user\.permissions\.includes\s*\(\s*req\./gi, type: 'Permission from user input', severity: 'critical' },
28
+ ];
29
+ for (let i = 0; i < lines.length; i++) {
30
+ for (const { pattern, type, severity } of patterns) {
31
+ pattern.lastIndex = 0;
32
+ if (pattern.test(lines[i])) {
33
+ findings.push({
34
+ id: `cwe-863-${findings.length + 1}`,
35
+ ruleId: 'cwe-863-incorrect-auth',
36
+ severity,
37
+ message: `Incorrect Authorization - ${type}: Implement proper access control`,
38
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
39
+ cwe: ['863'],
40
+ owasp: ['A01:2021'],
41
+ suggestion: {
42
+ description: 'Use centralized authorization with ownership checks',
43
+ example: `// Proper authorization
44
+ const resource = await Resource.findById(id);
45
+ if (!resource) throw new NotFoundError();
46
+ if (resource.ownerId !== user.id && !user.isAdmin) {
47
+ throw new ForbiddenError();
48
+ }`,
49
+ },
50
+ });
51
+ }
52
+ }
53
+ }
54
+ return findings;
55
+ },
56
+ };
57
+ export default cwe863IncorrectAuth;
58
+ //# sourceMappingURL=cwe-863-incorrect-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-863-incorrect-auth.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-863-incorrect-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,EAAE,EAAE,wBAAwB;IAC5B,IAAI,EAAE,kCAAkC;IACxC,WAAW,EAAE,yDAAyD;IACtE,eAAe,EAAE,MAAM;IACvB,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,CAAC;IAC5D,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,CAAC,UAAU,CAAC;IACnB,UAAU,EAAE;QACV,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,iDAAiD,EAAE;KAC7E;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG;YACf,EAAE,OAAO,EAAE,2CAA2C,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAe,EAAE;YACtH,EAAE,OAAO,EAAE,mDAAmD,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,QAAiB,EAAE;YAChI,EAAE,OAAO,EAAE,iCAAiC,EAAE,IAAI,EAAE,oCAAoC,EAAE,QAAQ,EAAE,MAAe,EAAE;YACrH,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAe,EAAE;YAChG,EAAE,OAAO,EAAE,oCAAoC,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAC9G,EAAE,OAAO,EAAE,4CAA4C,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,UAAmB,EAAE;SAC7H,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACnD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,MAAM,EAAE,wBAAwB;wBAChC,QAAQ;wBACR,OAAO,EAAE,6BAA6B,IAAI,mCAAmC;wBAC7E,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;wBACtE,GAAG,EAAE,CAAC,KAAK,CAAC;wBACZ,KAAK,EAAE,CAAC,UAAU,CAAC;wBACnB,UAAU,EAAE;4BACV,WAAW,EAAE,qDAAqD;4BAClE,OAAO,EAAE;;;;;EAKrB;yBACW;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview CWE-89: Improper Neutralization of Special Elements used in an SQL Command (SQL Injection)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-89-sql-injection
4
+ * @trace TSK-RULE-005
5
+ *
6
+ * Detects:
7
+ * - String concatenation in SQL queries
8
+ * - Template literals with user input in SQL
9
+ * - Raw/unsafe query methods
10
+ * - ORM bypass patterns
11
+ * - Stored procedure injection
12
+ *
13
+ * CWE-89 is #3 in CWE Top 25 2023.
14
+ */
15
+ import type { SecurityRule } from '../types.js';
16
+ /**
17
+ * CWE-89 - SQL Injection
18
+ */
19
+ export declare const cwe89SQLInjection: SecurityRule;
20
+ export default cwe89SQLInjection;
21
+ //# sourceMappingURL=cwe-89-sql-injection.d.ts.map