@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 @@
1
+ {"version":3,"file":"cwe-476-null-deref.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-476-null-deref.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,eAAe,EAAE,YAkD7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @fileoverview CWE-476: NULL Pointer Dereference
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-476-null-deref
4
+ * @trace TSK-RULE-005
5
+ */
6
+ export const cwe476NullDeref = {
7
+ id: 'cwe-476-null-deref',
8
+ name: 'CWE-476: NULL Pointer Dereference',
9
+ description: 'Detects potential null/undefined dereference patterns',
10
+ defaultSeverity: 'medium',
11
+ category: 'error-handling',
12
+ tags: ['cwe', 'null', 'undefined', 'security'],
13
+ cwe: ['476'],
14
+ references: [
15
+ { title: 'CWE-476', url: 'https://cwe.mitre.org/data/definitions/476.html' },
16
+ ],
17
+ async analyze(context) {
18
+ const findings = [];
19
+ const lines = context.sourceCode.split('\n');
20
+ const patterns = [
21
+ { pattern: /\w+\.(?:find|findOne)\s*\([^)]+\)\s*\.\w+/gi, type: 'Chained call after find', severity: 'medium' },
22
+ { pattern: /JSON\.parse\s*\([^)]+\)\.\w+/gi, type: 'Property access after parse', severity: 'medium' },
23
+ { pattern: /await\s+\w+\s*;[^}]*\w+\.\w+/gi, type: 'Access after await without check', severity: 'low' },
24
+ { pattern: /\w+\[\d+\]\.\w+/gi, type: 'Property access on array element', severity: 'low' },
25
+ { pattern: /\.match\s*\([^)]+\)\[\d+\]/gi, type: 'Index access on match result', severity: 'medium' },
26
+ ];
27
+ for (let i = 0; i < lines.length; i++) {
28
+ for (const { pattern, type, severity } of patterns) {
29
+ pattern.lastIndex = 0;
30
+ if (pattern.test(lines[i])) {
31
+ findings.push({
32
+ id: `cwe-476-${findings.length + 1}`,
33
+ ruleId: 'cwe-476-null-deref',
34
+ severity,
35
+ message: `Null Dereference - ${type}: Check for null/undefined`,
36
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
37
+ cwe: ['476'],
38
+ suggestion: {
39
+ description: 'Use optional chaining or null checks',
40
+ example: `// Use optional chaining
41
+ const value = obj?.property?.nested;
42
+
43
+ // Or explicit check
44
+ const result = await db.findOne(query);
45
+ if (!result) throw new Error('Not found');`,
46
+ },
47
+ });
48
+ }
49
+ }
50
+ }
51
+ return findings;
52
+ },
53
+ };
54
+ export default cwe476NullDeref;
55
+ //# sourceMappingURL=cwe-476-null-deref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-476-null-deref.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-476-null-deref.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,mCAAmC;IACzC,WAAW,EAAE,uDAAuD;IACpE,eAAe,EAAE,QAAQ;IACzB,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC;IAC9C,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,6CAA6C,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAiB,EAAE;YACxH,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,QAAiB,EAAE;YAC/G,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,KAAc,EAAE;YACjH,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,KAAc,EAAE;YACpG,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,QAAiB,EAAE;SAC/G,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,oBAAoB;wBAC5B,QAAQ;wBACR,OAAO,EAAE,sBAAsB,IAAI,4BAA4B;wBAC/D,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,UAAU,EAAE;4BACV,WAAW,EAAE,sCAAsC;4BACnD,OAAO,EAAE;;;;;2CAKoB;yBAC9B;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview CWE-502: Deserialization of Untrusted Data
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-502-deserialization
4
+ * @trace TSK-RULE-006
5
+ */
6
+ import type { SecurityRule } from '../types.js';
7
+ export declare const cwe502Deserialization: SecurityRule;
8
+ export default cwe502Deserialization;
9
+ //# sourceMappingURL=cwe-502-deserialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-502-deserialization.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-502-deserialization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,qBAAqB,EAAE,YAoDnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview CWE-502: Deserialization of Untrusted Data
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-502-deserialization
4
+ * @trace TSK-RULE-006
5
+ */
6
+ export const cwe502Deserialization = {
7
+ id: 'cwe-502-deserialization',
8
+ name: 'CWE-502: Deserialization of Untrusted Data',
9
+ description: 'Detects unsafe deserialization patterns',
10
+ defaultSeverity: 'critical',
11
+ category: 'injection',
12
+ tags: ['cwe', 'deserialization', 'rce', 'security'],
13
+ cwe: ['502'],
14
+ owasp: ['A08:2021'],
15
+ references: [
16
+ { title: 'CWE-502', url: 'https://cwe.mitre.org/data/definitions/502.html' },
17
+ ],
18
+ async analyze(context) {
19
+ const findings = [];
20
+ const lines = context.sourceCode.split('\n');
21
+ const patterns = [
22
+ { pattern: /JSON\.parse\s*\(\s*req\./gi, type: 'JSON.parse on request data', severity: 'high' },
23
+ { pattern: /eval\s*\(\s*JSON/gi, type: 'eval on JSON data', severity: 'critical' },
24
+ { pattern: /node-serialize|serialize-javascript/gi, type: 'Unsafe serialization library', severity: 'critical' },
25
+ { pattern: /yaml\.load\s*\(/gi, type: 'Unsafe YAML load', severity: 'critical' },
26
+ { pattern: /pickle|marshal/gi, type: 'Unsafe serialization format', severity: 'high' },
27
+ { pattern: /unserialize\s*\(/gi, type: 'PHP-style unserialize', severity: 'critical' },
28
+ { pattern: /ObjectInputStream/gi, type: 'Java ObjectInputStream pattern', severity: 'high' },
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-502-${findings.length + 1}`,
36
+ ruleId: 'cwe-502-deserialization',
37
+ severity,
38
+ message: `Deserialization - ${type}: Validate before deserializing`,
39
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
40
+ cwe: ['502'],
41
+ owasp: ['A08:2021'],
42
+ suggestion: {
43
+ description: 'Use safe deserialization with schema validation',
44
+ example: `// Use schema validation
45
+ import { z } from 'zod';
46
+ const schema = z.object({ name: z.string() });
47
+ const data = schema.parse(JSON.parse(input));`,
48
+ },
49
+ });
50
+ }
51
+ }
52
+ }
53
+ return findings;
54
+ },
55
+ };
56
+ export default cwe502Deserialization;
57
+ //# sourceMappingURL=cwe-502-deserialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-502-deserialization.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-502-deserialization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,4CAA4C;IAClD,WAAW,EAAE,yCAAyC;IACtD,eAAe,EAAE,UAAU;IAC3B,QAAQ,EAAE,WAAW;IACrB,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,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,4BAA4B,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,MAAe,EAAE;YACxG,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAC3F,EAAE,OAAO,EAAE,uCAAuC,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACzH,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACzF,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC/F,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAC/F,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,MAAe,EAAE;SACtG,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,yBAAyB;wBACjC,QAAQ;wBACR,OAAO,EAAE,qBAAqB,IAAI,iCAAiC;wBACnE,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,iDAAiD;4BAC9D,OAAO,EAAE;;;8CAGuB;yBACjC;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview CWE-77: Improper Neutralization of Special Elements (Command Injection)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-77-command-injection
4
+ * @trace TSK-RULE-006
5
+ */
6
+ import type { SecurityRule } from '../types.js';
7
+ export declare const cwe77CommandInjection: SecurityRule;
8
+ export default cwe77CommandInjection;
9
+ //# sourceMappingURL=cwe-77-command-injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-77-command-injection.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-77-command-injection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,qBAAqB,EAAE,YAkDnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @fileoverview CWE-77: Improper Neutralization of Special Elements (Command Injection)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-77-command-injection
4
+ * @trace TSK-RULE-006
5
+ */
6
+ export const cwe77CommandInjection = {
7
+ id: 'cwe-77-command-injection',
8
+ name: 'CWE-77: Command Injection',
9
+ description: 'Detects command injection via special element neutralization issues',
10
+ defaultSeverity: 'critical',
11
+ category: 'injection',
12
+ tags: ['cwe', 'command', 'injection', 'security'],
13
+ cwe: ['77'],
14
+ owasp: ['A03:2021'],
15
+ references: [
16
+ { title: 'CWE-77', url: 'https://cwe.mitre.org/data/definitions/77.html' },
17
+ ],
18
+ async analyze(context) {
19
+ const findings = [];
20
+ const lines = context.sourceCode.split('\n');
21
+ const patterns = [
22
+ { pattern: /child_process.*exec\s*\(/gi, type: 'child_process.exec', severity: 'critical' },
23
+ { pattern: /execSync\s*\(\s*`/gi, type: 'execSync with template', severity: 'critical' },
24
+ { pattern: /spawn\s*\([^,]+\+/gi, type: 'spawn with concatenation', severity: 'high' },
25
+ { pattern: /system\s*\(\s*\$/gi, type: 'system() with variable', severity: 'critical' },
26
+ { pattern: /popen\s*\(/gi, type: 'popen function', severity: 'high' },
27
+ { pattern: /\$\{.*\}.*\|\s*sh/gi, type: 'Shell pipe with variable', 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-77-${findings.length + 1}`,
35
+ ruleId: 'cwe-77-command-injection',
36
+ severity,
37
+ message: `Command Injection - ${type}: Sanitize command arguments`,
38
+ location: { file: context.filePath, startLine: i + 1, endLine: i + 1 },
39
+ cwe: ['77'],
40
+ owasp: ['A03:2021'],
41
+ suggestion: {
42
+ description: 'Use spawn with array arguments instead of exec',
43
+ example: `// Safe: use spawn with array
44
+ const { spawn } = require('child_process');
45
+ spawn('command', [arg1, arg2], { shell: false });`,
46
+ },
47
+ });
48
+ }
49
+ }
50
+ }
51
+ return findings;
52
+ },
53
+ };
54
+ export default cwe77CommandInjection;
55
+ //# sourceMappingURL=cwe-77-command-injection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-77-command-injection.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-77-command-injection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,EAAE,EAAE,0BAA0B;IAC9B,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,qEAAqE;IAClF,eAAe,EAAE,UAAU;IAC3B,QAAQ,EAAE,WAAW;IACrB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;IACjD,GAAG,EAAE,CAAC,IAAI,CAAC;IACX,KAAK,EAAE,CAAC,UAAU,CAAC;IACnB,UAAU,EAAE;QACV,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,gDAAgD,EAAE;KAC3E;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,4BAA4B,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACpG,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YACjG,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC/F,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,UAAmB,EAAE;YAChG,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAe,EAAE;YAC9E,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,UAAmB,EAAE;SACpG,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,UAAU,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnC,MAAM,EAAE,0BAA0B;wBAClC,QAAQ;wBACR,OAAO,EAAE,uBAAuB,IAAI,8BAA8B;wBAClE,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,IAAI,CAAC;wBACX,KAAK,EAAE,CAAC,UAAU,CAAC;wBACnB,UAAU,EAAE;4BACV,WAAW,EAAE,gDAAgD;4BAC7D,OAAO,EAAE;;kDAE2B;yBACrC;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileoverview CWE-78: Improper Neutralization of Special Elements used in an OS Command (OS Command Injection)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-78-command-injection
4
+ * @trace TSK-RULE-005
5
+ *
6
+ * Detects:
7
+ * - exec/execSync with user input
8
+ * - spawn/spawnSync with shell:true
9
+ * - Template literals in commands
10
+ * - Child process with unsanitized arguments
11
+ *
12
+ * CWE-78 is #5 in CWE Top 25 2023.
13
+ */
14
+ import type { SecurityRule } from '../types.js';
15
+ /**
16
+ * CWE-78 - OS Command Injection
17
+ */
18
+ export declare const cwe78CommandInjection: SecurityRule;
19
+ export default cwe78CommandInjection;
20
+ //# sourceMappingURL=cwe-78-command-injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-78-command-injection.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-78-command-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YA+BnC,CAAC;AA+OF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * @fileoverview CWE-78: Improper Neutralization of Special Elements used in an OS Command (OS Command Injection)
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-78-command-injection
4
+ * @trace TSK-RULE-005
5
+ *
6
+ * Detects:
7
+ * - exec/execSync with user input
8
+ * - spawn/spawnSync with shell:true
9
+ * - Template literals in commands
10
+ * - Child process with unsanitized arguments
11
+ *
12
+ * CWE-78 is #5 in CWE Top 25 2023.
13
+ */
14
+ /**
15
+ * CWE-78 - OS Command Injection
16
+ */
17
+ export const cwe78CommandInjection = {
18
+ id: 'cwe-78-command-injection',
19
+ name: 'CWE-78: OS Command Injection',
20
+ description: 'Detects OS command injection vulnerabilities from unsafe command execution',
21
+ defaultSeverity: 'critical',
22
+ category: 'injection',
23
+ tags: ['cwe', 'command', 'injection', 'shell', 'security'],
24
+ owasp: ['A03:2021'],
25
+ cwe: ['78'],
26
+ references: [
27
+ {
28
+ title: 'CWE-78: OS Command Injection',
29
+ url: 'https://cwe.mitre.org/data/definitions/78.html',
30
+ },
31
+ {
32
+ title: 'OWASP Command Injection',
33
+ url: 'https://owasp.org/www-community/attacks/Command_Injection',
34
+ },
35
+ ],
36
+ async analyze(context) {
37
+ const findings = [];
38
+ const sourceCode = context.sourceCode;
39
+ checkExecUsage(context, sourceCode, findings);
40
+ checkSpawnUsage(context, sourceCode, findings);
41
+ checkShellExecution(context, sourceCode, findings);
42
+ return findings;
43
+ },
44
+ };
45
+ /**
46
+ * Check for exec/execSync with user input
47
+ */
48
+ function checkExecUsage(context, sourceCode, findings) {
49
+ const lines = sourceCode.split('\n');
50
+ const execPatterns = [
51
+ {
52
+ pattern: /exec\s*\(\s*['"`].*\+\s*(?:req\.|params\.|query\.|body\.|user)/gi,
53
+ type: 'exec with user input concatenation',
54
+ message: 'exec() with user input allows command injection',
55
+ severity: 'critical',
56
+ },
57
+ {
58
+ pattern: /exec\s*\(\s*`[^`]*\$\{(?:req\.|params\.|query\.|body\.)/gi,
59
+ type: 'exec with user input interpolation',
60
+ message: 'exec() with template literal user input is vulnerable',
61
+ severity: 'critical',
62
+ },
63
+ {
64
+ pattern: /execSync\s*\(\s*['"`].*\+/gi,
65
+ type: 'execSync with concatenation',
66
+ message: 'execSync() with string concatenation may allow injection',
67
+ severity: 'high',
68
+ },
69
+ {
70
+ pattern: /execSync\s*\(\s*`[^`]*\$\{/gi,
71
+ type: 'execSync with interpolation',
72
+ message: 'execSync() with template interpolation is risky',
73
+ severity: 'high',
74
+ },
75
+ {
76
+ pattern: /execFile\s*\(\s*(?:req\.|params\.|query\.|body\.)/gi,
77
+ type: 'execFile with user-controlled command',
78
+ message: 'execFile() with user-controlled command path is dangerous',
79
+ severity: 'critical',
80
+ },
81
+ ];
82
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
83
+ const line = lines[lineNum];
84
+ for (const { pattern, type, message, severity } of execPatterns) {
85
+ pattern.lastIndex = 0;
86
+ if (pattern.test(line)) {
87
+ findings.push({
88
+ id: `cwe-78-exec-${findings.length + 1}`,
89
+ ruleId: 'cwe-78-command-injection',
90
+ severity,
91
+ message: `Command Injection - ${type}: ${message}`,
92
+ location: {
93
+ file: context.filePath,
94
+ startLine: lineNum + 1,
95
+ endLine: lineNum + 1,
96
+ startColumn: 0,
97
+ endColumn: line.length,
98
+ },
99
+ cwe: ['78'],
100
+ owasp: ['A03:2021'],
101
+ suggestion: {
102
+ description: 'Use execFile with argument array or sanitize input',
103
+ example: `// Use execFile with separate arguments (no shell)
104
+ const { execFile } = require('child_process');
105
+ execFile('ls', ['-la', safeDir], (err, stdout) => {});
106
+
107
+ // Or validate/whitelist commands
108
+ const allowedCommands = ['list', 'status'];
109
+ if (!allowedCommands.includes(userCommand)) {
110
+ throw new Error('Invalid command');
111
+ }`,
112
+ },
113
+ });
114
+ }
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Check for spawn with shell:true
120
+ */
121
+ function checkSpawnUsage(context, sourceCode, findings) {
122
+ const lines = sourceCode.split('\n');
123
+ const spawnPatterns = [
124
+ {
125
+ pattern: /spawn\s*\([^)]*shell\s*:\s*true/gi,
126
+ type: 'spawn with shell:true',
127
+ message: 'spawn() with shell:true enables shell command injection',
128
+ severity: 'high',
129
+ },
130
+ {
131
+ pattern: /spawnSync\s*\([^)]*shell\s*:\s*true/gi,
132
+ type: 'spawnSync with shell:true',
133
+ message: 'spawnSync() with shell:true enables shell command injection',
134
+ severity: 'high',
135
+ },
136
+ {
137
+ pattern: /spawn\s*\(\s*(?:req\.|params\.|query\.|body\.)/gi,
138
+ type: 'spawn with user-controlled command',
139
+ message: 'spawn() with user-controlled command is dangerous',
140
+ severity: 'critical',
141
+ },
142
+ {
143
+ pattern: /spawn\s*\(\s*['"`]\w+['"`]\s*,\s*\[.*(?:req\.|params\.|query\.|body\.)/gi,
144
+ type: 'spawn with user-controlled arguments',
145
+ message: 'spawn() arguments from user input should be validated',
146
+ severity: 'medium',
147
+ },
148
+ ];
149
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
150
+ const line = lines[lineNum];
151
+ for (const { pattern, type, message, severity } of spawnPatterns) {
152
+ pattern.lastIndex = 0;
153
+ if (pattern.test(line)) {
154
+ findings.push({
155
+ id: `cwe-78-spawn-${findings.length + 1}`,
156
+ ruleId: 'cwe-78-command-injection',
157
+ severity,
158
+ message: `Command Injection - ${type}: ${message}`,
159
+ location: {
160
+ file: context.filePath,
161
+ startLine: lineNum + 1,
162
+ endLine: lineNum + 1,
163
+ startColumn: 0,
164
+ endColumn: line.length,
165
+ },
166
+ cwe: ['78'],
167
+ owasp: ['A03:2021'],
168
+ suggestion: {
169
+ description: 'Avoid shell:true and validate arguments',
170
+ example: `// Use spawn without shell (default)
171
+ const { spawn } = require('child_process');
172
+ spawn('git', ['status']);
173
+
174
+ // Validate user arguments
175
+ const allowedArgs = ['--version', '--help'];
176
+ const safeArgs = userArgs.filter(arg =>
177
+ allowedArgs.includes(arg) || /^[a-zA-Z0-9_-]+$/.test(arg)
178
+ );
179
+ spawn('command', safeArgs);`,
180
+ },
181
+ });
182
+ }
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Check for other shell execution patterns
188
+ */
189
+ function checkShellExecution(context, sourceCode, findings) {
190
+ const lines = sourceCode.split('\n');
191
+ const shellPatterns = [
192
+ {
193
+ pattern: /child_process.*require.*exec/gi,
194
+ type: 'child_process exec import',
195
+ message: 'child_process exec should be used carefully',
196
+ severity: 'info',
197
+ },
198
+ {
199
+ pattern: /\$\(\s*['"`][^'"`]*(?:req\.|params\.|query\.)/gi,
200
+ type: 'Shell substitution with user input',
201
+ message: 'Shell substitution with user input is vulnerable',
202
+ severity: 'critical',
203
+ },
204
+ {
205
+ pattern: /eval\s*\(\s*['"`].*(?:sh|bash|cmd|powershell)/gi,
206
+ type: 'eval with shell command',
207
+ message: 'eval() containing shell commands is extremely dangerous',
208
+ severity: 'critical',
209
+ },
210
+ {
211
+ pattern: /\.run\s*\(\s*['"`](?:sh|bash|cmd)\s+/gi,
212
+ type: 'Direct shell invocation',
213
+ message: 'Direct shell invocation is risky',
214
+ severity: 'high',
215
+ },
216
+ {
217
+ pattern: /shelljs|execa|cross-spawn.*(?:req\.|params\.|query\.)/gi,
218
+ type: 'Shell library with user input',
219
+ message: 'Shell execution library with user input needs validation',
220
+ severity: 'high',
221
+ },
222
+ ];
223
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
224
+ const line = lines[lineNum];
225
+ for (const { pattern, type, message, severity } of shellPatterns) {
226
+ pattern.lastIndex = 0;
227
+ if (pattern.test(line)) {
228
+ findings.push({
229
+ id: `cwe-78-shell-${findings.length + 1}`,
230
+ ruleId: 'cwe-78-command-injection',
231
+ severity,
232
+ message: `Command Injection - ${type}: ${message}`,
233
+ location: {
234
+ file: context.filePath,
235
+ startLine: lineNum + 1,
236
+ endLine: lineNum + 1,
237
+ startColumn: 0,
238
+ endColumn: line.length,
239
+ },
240
+ cwe: ['78'],
241
+ owasp: ['A03:2021'],
242
+ suggestion: {
243
+ description: 'Use safe alternatives to shell execution',
244
+ example: `// Use specific APIs instead of shell commands
245
+ // Instead of: exec('rm -rf ' + dir)
246
+ const fs = require('fs');
247
+ fs.rmSync(dir, { recursive: true });
248
+
249
+ // For git operations, use a library
250
+ const simpleGit = require('simple-git');
251
+ await git.status();`,
252
+ },
253
+ });
254
+ }
255
+ }
256
+ }
257
+ }
258
+ export default cwe78CommandInjection;
259
+ //# sourceMappingURL=cwe-78-command-injection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-78-command-injection.js","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-78-command-injection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview CWE-787: Out-of-bounds Write
3
+ * @module @nahisaho/musubix-security/rules/cwe/cwe-787-oob-write
4
+ * @trace TSK-RULE-005
5
+ *
6
+ * Detects:
7
+ * - Buffer overflow patterns
8
+ * - Array index out of bounds
9
+ * - Unsafe array operations
10
+ * - TypedArray boundary violations
11
+ * - Unchecked array growth
12
+ *
13
+ * CWE-787 is #1 in CWE Top 25 2023.
14
+ */
15
+ import type { SecurityRule } from '../types.js';
16
+ /**
17
+ * CWE-787 - Out-of-bounds Write
18
+ */
19
+ export declare const cwe787OutOfBoundsWrite: SecurityRule;
20
+ export default cwe787OutOfBoundsWrite;
21
+ //# sourceMappingURL=cwe-787-oob-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwe-787-oob-write.d.ts","sourceRoot":"","sources":["../../../src/rules/cwe/cwe-787-oob-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YA+BpC,CAAC;AAoUF,eAAe,sBAAsB,CAAC"}