thuban 0.4.2 → 0.4.5

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 (740) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +355 -122
  3. package/dist/LICENSE +21 -21
  4. package/dist/README.md +355 -122
  5. package/dist/cli.js +2 -1
  6. package/dist/package.json +62 -63
  7. package/dist/packages/crucible/.golden/golden-master.json +413 -413
  8. package/dist/packages/crucible/banner.js +1 -1
  9. package/dist/packages/crucible/rule-loader.js +1 -1
  10. package/dist/packages/crucible/rules/code-scanner-core.json +233 -129
  11. package/dist/packages/crucible/rules/command-injection.json +411 -411
  12. package/dist/packages/crucible/rules/crypto-misuse.json +35 -35
  13. package/dist/packages/crucible/rules/deserialization.json +152 -152
  14. package/dist/packages/crucible/rules/env-injection.json +46 -46
  15. package/dist/packages/crucible/rules/eval-abuse.json +104 -104
  16. package/dist/packages/crucible/rules/file-upload.json +46 -46
  17. package/dist/packages/crucible/rules/hallucination.json +22 -22
  18. package/dist/packages/crucible/rules/hardcoded-secret.json +397 -397
  19. package/dist/packages/crucible/rules/hardcoded-url.json +13 -13
  20. package/dist/packages/crucible/rules/insecure-crypto.json +302 -302
  21. package/dist/packages/crucible/rules/integer-overflow.json +35 -35
  22. package/dist/packages/crucible/rules/log-injection.json +33 -33
  23. package/dist/packages/crucible/rules/mass-assignment.json +112 -112
  24. package/dist/packages/crucible/rules/open-redirect.json +196 -196
  25. package/dist/packages/crucible/rules/path-traversal.json +422 -422
  26. package/dist/packages/crucible/rules/prototype-pollution.json +22 -22
  27. package/dist/packages/crucible/rules/sql-injection.json +619 -597
  28. package/dist/packages/crucible/rules/ssrf.json +557 -557
  29. package/dist/packages/crucible/rules/timing-attack.json +55 -55
  30. package/dist/packages/crucible/rules/unsafe-block.json +24 -24
  31. package/dist/packages/crucible/rules/xss.json +663 -641
  32. package/dist/packages/crucible/rules/xxe.json +66 -66
  33. package/dist/packages/crucible/rules/yaml-deserialization.json +22 -22
  34. package/dist/packages/crucible/rules/yaml-injection.json +22 -22
  35. package/dist/packages/crucible/seeds/csharp/seed-001.cs +28 -28
  36. package/dist/packages/crucible/seeds/csharp/seed-002.cs +24 -24
  37. package/dist/packages/crucible/seeds/csharp/seed-003.cs +30 -30
  38. package/dist/packages/crucible/seeds/csharp/seed-004.cs +31 -31
  39. package/dist/packages/crucible/seeds/csharp/seed-005.cs +28 -28
  40. package/dist/packages/crucible/seeds/csharp/seed-006.cs +25 -25
  41. package/dist/packages/crucible/seeds/csharp/seed-007.cs +34 -34
  42. package/dist/packages/crucible/seeds/csharp/seed-008.cs +23 -23
  43. package/dist/packages/crucible/seeds/csharp/seed-009.cs +27 -27
  44. package/dist/packages/crucible/seeds/csharp/seed-010.cs +29 -29
  45. package/dist/packages/crucible/seeds/csharp/seed-011.cs +32 -32
  46. package/dist/packages/crucible/seeds/csharp/seed-012.cs +27 -27
  47. package/dist/packages/crucible/seeds/csharp/seed-013.cs +27 -27
  48. package/dist/packages/crucible/seeds/csharp/seed-014.cs +26 -26
  49. package/dist/packages/crucible/seeds/csharp/seed-015.cs +33 -33
  50. package/dist/packages/crucible/seeds/csharp/seed-016.cs +25 -25
  51. package/dist/packages/crucible/seeds/csharp/seed-017.cs +22 -22
  52. package/dist/packages/crucible/seeds/csharp/seed-018.cs +26 -26
  53. package/dist/packages/crucible/seeds/csharp/seed-019.cs +25 -25
  54. package/dist/packages/crucible/seeds/csharp/seed-020.cs +22 -22
  55. package/dist/packages/crucible/seeds/csharp/seed-021.cs +28 -28
  56. package/dist/packages/crucible/seeds/csharp/seed-022.cs +25 -25
  57. package/dist/packages/crucible/seeds/csharp/seed-023.cs +33 -33
  58. package/dist/packages/crucible/seeds/csharp/seed-024.cs +31 -31
  59. package/dist/packages/crucible/seeds/csharp/seed-025.cs +31 -31
  60. package/dist/packages/crucible/seeds/csharp/seed-026.cs +25 -25
  61. package/dist/packages/crucible/seeds/csharp/seed-027.cs +29 -29
  62. package/dist/packages/crucible/seeds/csharp/seed-028.cs +25 -25
  63. package/dist/packages/crucible/seeds/csharp/seed-029.cs +27 -27
  64. package/dist/packages/crucible/seeds/csharp/seed-030.cs +27 -27
  65. package/dist/packages/crucible/seeds/csharp/seed-031.cs +28 -28
  66. package/dist/packages/crucible/seeds/csharp/seed-032.cs +30 -30
  67. package/dist/packages/crucible/seeds/csharp/seed-033.cs +27 -27
  68. package/dist/packages/crucible/seeds/csharp/seed-034.cs +25 -25
  69. package/dist/packages/crucible/seeds/csharp/seed-035.cs +32 -32
  70. package/dist/packages/crucible/seeds/csharp/seed-036.cs +28 -28
  71. package/dist/packages/crucible/seeds/csharp/seed-037.cs +29 -29
  72. package/dist/packages/crucible/seeds/csharp/seed-038.cs +28 -28
  73. package/dist/packages/crucible/seeds/csharp/seed-039.cs +29 -29
  74. package/dist/packages/crucible/seeds/csharp/seed-040.cs +28 -28
  75. package/dist/packages/crucible/seeds/csharp/seed-041.cs +33 -33
  76. package/dist/packages/crucible/seeds/csharp/seed-042.cs +27 -27
  77. package/dist/packages/crucible/seeds/csharp/seed-043.cs +27 -27
  78. package/dist/packages/crucible/seeds/csharp/seed-044.cs +25 -25
  79. package/dist/packages/crucible/seeds/csharp/seed-045.cs +30 -30
  80. package/dist/packages/crucible/seeds/csharp/seed-046.cs +29 -29
  81. package/dist/packages/crucible/seeds/csharp/seed-047.cs +26 -26
  82. package/dist/packages/crucible/seeds/csharp/seed-048.cs +31 -31
  83. package/dist/packages/crucible/seeds/csharp/seed-049.cs +27 -27
  84. package/dist/packages/crucible/seeds/csharp/seed-050.cs +30 -30
  85. package/dist/packages/crucible/seeds/csharp/seed-051.cs +34 -34
  86. package/dist/packages/crucible/seeds/csharp/seed-052.cs +36 -36
  87. package/dist/packages/crucible/seeds/go/seed-001.go +29 -29
  88. package/dist/packages/crucible/seeds/go/seed-002.go +27 -27
  89. package/dist/packages/crucible/seeds/go/seed-003.go +31 -31
  90. package/dist/packages/crucible/seeds/go/seed-004.go +27 -27
  91. package/dist/packages/crucible/seeds/go/seed-005.go +27 -27
  92. package/dist/packages/crucible/seeds/go/seed-006.go +29 -29
  93. package/dist/packages/crucible/seeds/go/seed-007.go +24 -24
  94. package/dist/packages/crucible/seeds/go/seed-008.go +25 -25
  95. package/dist/packages/crucible/seeds/go/seed-009.go +30 -30
  96. package/dist/packages/crucible/seeds/go/seed-010.go +35 -35
  97. package/dist/packages/crucible/seeds/go/seed-011.go +24 -24
  98. package/dist/packages/crucible/seeds/go/seed-012.go +24 -24
  99. package/dist/packages/crucible/seeds/go/seed-013.go +31 -31
  100. package/dist/packages/crucible/seeds/go/seed-014.go +35 -35
  101. package/dist/packages/crucible/seeds/go/seed-015.go +25 -25
  102. package/dist/packages/crucible/seeds/go/seed-016.go +19 -19
  103. package/dist/packages/crucible/seeds/go/seed-017.go +23 -23
  104. package/dist/packages/crucible/seeds/go/seed-018.go +23 -23
  105. package/dist/packages/crucible/seeds/go/seed-019.go +22 -22
  106. package/dist/packages/crucible/seeds/go/seed-020.go +31 -31
  107. package/dist/packages/crucible/seeds/go/seed-021.go +22 -22
  108. package/dist/packages/crucible/seeds/go/seed-022.go +29 -29
  109. package/dist/packages/crucible/seeds/go/seed-023.go +26 -26
  110. package/dist/packages/crucible/seeds/go/seed-024.go +27 -27
  111. package/dist/packages/crucible/seeds/go/seed-025.go +23 -23
  112. package/dist/packages/crucible/seeds/go/seed-026.go +29 -29
  113. package/dist/packages/crucible/seeds/go/seed-027.go +26 -26
  114. package/dist/packages/crucible/seeds/go/seed-028.go +23 -23
  115. package/dist/packages/crucible/seeds/go/seed-029.go +28 -28
  116. package/dist/packages/crucible/seeds/go/seed-030.go +27 -27
  117. package/dist/packages/crucible/seeds/go/seed-031.go +28 -28
  118. package/dist/packages/crucible/seeds/go/seed-032.go +27 -27
  119. package/dist/packages/crucible/seeds/go/seed-033.go +29 -29
  120. package/dist/packages/crucible/seeds/go/seed-034.go +22 -22
  121. package/dist/packages/crucible/seeds/go/seed-035.go +32 -32
  122. package/dist/packages/crucible/seeds/go/seed-036.go +27 -27
  123. package/dist/packages/crucible/seeds/go/seed-037.go +27 -27
  124. package/dist/packages/crucible/seeds/go/seed-038.go +27 -27
  125. package/dist/packages/crucible/seeds/go/seed-039.go +26 -26
  126. package/dist/packages/crucible/seeds/go/seed-040.go +37 -37
  127. package/dist/packages/crucible/seeds/go/seed-041.go +23 -23
  128. package/dist/packages/crucible/seeds/go/seed-042.go +32 -32
  129. package/dist/packages/crucible/seeds/go/seed-043.go +35 -35
  130. package/dist/packages/crucible/seeds/go/seed-044.go +25 -25
  131. package/dist/packages/crucible/seeds/go/seed-045.go +26 -26
  132. package/dist/packages/crucible/seeds/go/seed-046.go +34 -34
  133. package/dist/packages/crucible/seeds/go/seed-047.go +26 -26
  134. package/dist/packages/crucible/seeds/go/seed-048.go +29 -29
  135. package/dist/packages/crucible/seeds/go/seed-049.go +24 -24
  136. package/dist/packages/crucible/seeds/go/seed-050.go +27 -27
  137. package/dist/packages/crucible/seeds/go/seed-051.go +38 -38
  138. package/dist/packages/crucible/seeds/go/seed-052.go +27 -27
  139. package/dist/packages/crucible/seeds/java/seed-001.java +23 -23
  140. package/dist/packages/crucible/seeds/java/seed-002.java +22 -22
  141. package/dist/packages/crucible/seeds/java/seed-003.java +28 -28
  142. package/dist/packages/crucible/seeds/java/seed-004.java +26 -26
  143. package/dist/packages/crucible/seeds/java/seed-005.java +33 -33
  144. package/dist/packages/crucible/seeds/java/seed-006.java +22 -22
  145. package/dist/packages/crucible/seeds/java/seed-007.java +21 -21
  146. package/dist/packages/crucible/seeds/java/seed-008.java +29 -29
  147. package/dist/packages/crucible/seeds/java/seed-009.java +24 -24
  148. package/dist/packages/crucible/seeds/java/seed-010.java +30 -30
  149. package/dist/packages/crucible/seeds/java/seed-011.java +25 -25
  150. package/dist/packages/crucible/seeds/java/seed-012.java +20 -20
  151. package/dist/packages/crucible/seeds/java/seed-013.java +26 -26
  152. package/dist/packages/crucible/seeds/java/seed-014.java +23 -23
  153. package/dist/packages/crucible/seeds/java/seed-015.java +25 -25
  154. package/dist/packages/crucible/seeds/java/seed-016.java +22 -22
  155. package/dist/packages/crucible/seeds/java/seed-017.java +24 -24
  156. package/dist/packages/crucible/seeds/java/seed-018.java +24 -24
  157. package/dist/packages/crucible/seeds/java/seed-019.java +38 -38
  158. package/dist/packages/crucible/seeds/java/seed-020.java +24 -24
  159. package/dist/packages/crucible/seeds/java/seed-021.java +22 -22
  160. package/dist/packages/crucible/seeds/java/seed-022.java +22 -22
  161. package/dist/packages/crucible/seeds/java/seed-023.java +22 -22
  162. package/dist/packages/crucible/seeds/java/seed-024.java +25 -25
  163. package/dist/packages/crucible/seeds/java/seed-025.java +27 -27
  164. package/dist/packages/crucible/seeds/java/seed-026.java +25 -25
  165. package/dist/packages/crucible/seeds/java/seed-027.java +22 -22
  166. package/dist/packages/crucible/seeds/java/seed-028.java +21 -21
  167. package/dist/packages/crucible/seeds/java/seed-029.java +28 -28
  168. package/dist/packages/crucible/seeds/java/seed-030.java +27 -27
  169. package/dist/packages/crucible/seeds/java/seed-031.java +23 -23
  170. package/dist/packages/crucible/seeds/java/seed-032.java +22 -22
  171. package/dist/packages/crucible/seeds/java/seed-033.java +24 -24
  172. package/dist/packages/crucible/seeds/java/seed-034.java +24 -24
  173. package/dist/packages/crucible/seeds/java/seed-035.java +29 -29
  174. package/dist/packages/crucible/seeds/java/seed-036.java +25 -25
  175. package/dist/packages/crucible/seeds/java/seed-037.java +30 -30
  176. package/dist/packages/crucible/seeds/java/seed-038.java +29 -29
  177. package/dist/packages/crucible/seeds/java/seed-039.java +26 -26
  178. package/dist/packages/crucible/seeds/java/seed-040.java +31 -31
  179. package/dist/packages/crucible/seeds/java/seed-041.java +20 -20
  180. package/dist/packages/crucible/seeds/java/seed-042.java +26 -26
  181. package/dist/packages/crucible/seeds/java/seed-043.java +31 -31
  182. package/dist/packages/crucible/seeds/java/seed-044.java +22 -22
  183. package/dist/packages/crucible/seeds/java/seed-045.java +25 -25
  184. package/dist/packages/crucible/seeds/java/seed-046.java +22 -22
  185. package/dist/packages/crucible/seeds/java/seed-047.java +26 -26
  186. package/dist/packages/crucible/seeds/java/seed-048.java +24 -24
  187. package/dist/packages/crucible/seeds/java/seed-049.java +28 -28
  188. package/dist/packages/crucible/seeds/java/seed-050.java +29 -29
  189. package/dist/packages/crucible/seeds/java/seed-051.java +25 -25
  190. package/dist/packages/crucible/seeds/java/seed-052.java +32 -32
  191. package/dist/packages/crucible/seeds/js/seed-001.js +27 -27
  192. package/dist/packages/crucible/seeds/js/seed-002.js +28 -28
  193. package/dist/packages/crucible/seeds/js/seed-003.js +30 -30
  194. package/dist/packages/crucible/seeds/js/seed-004.js +28 -28
  195. package/dist/packages/crucible/seeds/js/seed-005.js +31 -31
  196. package/dist/packages/crucible/seeds/js/seed-006.js +28 -28
  197. package/dist/packages/crucible/seeds/js/seed-007.js +26 -26
  198. package/dist/packages/crucible/seeds/js/seed-008.js +30 -30
  199. package/dist/packages/crucible/seeds/js/seed-009.js +30 -30
  200. package/dist/packages/crucible/seeds/js/seed-010.js +29 -29
  201. package/dist/packages/crucible/seeds/js/seed-011.js +34 -34
  202. package/dist/packages/crucible/seeds/js/seed-012.js +32 -32
  203. package/dist/packages/crucible/seeds/js/seed-013.js +29 -29
  204. package/dist/packages/crucible/seeds/js/seed-014.js +29 -29
  205. package/dist/packages/crucible/seeds/js/seed-015.js +31 -31
  206. package/dist/packages/crucible/seeds/js/seed-016.js +31 -31
  207. package/dist/packages/crucible/seeds/js/seed-017.js +30 -30
  208. package/dist/packages/crucible/seeds/js/seed-018.js +29 -29
  209. package/dist/packages/crucible/seeds/js/seed-019.js +32 -32
  210. package/dist/packages/crucible/seeds/js/seed-020.js +29 -29
  211. package/dist/packages/crucible/seeds/js/seed-021.js +31 -31
  212. package/dist/packages/crucible/seeds/js/seed-022.js +31 -31
  213. package/dist/packages/crucible/seeds/js/seed-023.js +29 -29
  214. package/dist/packages/crucible/seeds/js/seed-024.js +29 -29
  215. package/dist/packages/crucible/seeds/js/seed-025.js +34 -34
  216. package/dist/packages/crucible/seeds/js/seed-026.js +31 -31
  217. package/dist/packages/crucible/seeds/js/seed-027.js +31 -31
  218. package/dist/packages/crucible/seeds/js/seed-028.js +33 -33
  219. package/dist/packages/crucible/seeds/js/seed-029.js +33 -33
  220. package/dist/packages/crucible/seeds/js/seed-030.js +30 -30
  221. package/dist/packages/crucible/seeds/js/seed-031.js +31 -31
  222. package/dist/packages/crucible/seeds/js/seed-032.js +34 -34
  223. package/dist/packages/crucible/seeds/js/seed-033.js +33 -33
  224. package/dist/packages/crucible/seeds/js/seed-034.js +33 -33
  225. package/dist/packages/crucible/seeds/js/seed-035.js +30 -30
  226. package/dist/packages/crucible/seeds/js/seed-036.js +30 -30
  227. package/dist/packages/crucible/seeds/js/seed-037.js +29 -29
  228. package/dist/packages/crucible/seeds/js/seed-038.js +31 -31
  229. package/dist/packages/crucible/seeds/js/seed-039.js +34 -34
  230. package/dist/packages/crucible/seeds/js/seed-040.js +35 -35
  231. package/dist/packages/crucible/seeds/js/seed-041.js +32 -32
  232. package/dist/packages/crucible/seeds/js/seed-042.js +32 -32
  233. package/dist/packages/crucible/seeds/js/seed-043.js +27 -27
  234. package/dist/packages/crucible/seeds/js/seed-044.js +29 -29
  235. package/dist/packages/crucible/seeds/js/seed-045.js +33 -33
  236. package/dist/packages/crucible/seeds/js/seed-046.js +33 -33
  237. package/dist/packages/crucible/seeds/js/seed-047.js +29 -29
  238. package/dist/packages/crucible/seeds/js/seed-048.js +29 -29
  239. package/dist/packages/crucible/seeds/js/seed-049.js +34 -34
  240. package/dist/packages/crucible/seeds/js/seed-050.js +34 -34
  241. package/dist/packages/crucible/seeds/js/seed-051.js +30 -30
  242. package/dist/packages/crucible/seeds/js/seed-052.js +30 -30
  243. package/dist/packages/crucible/seeds/js/seed-053.js +26 -26
  244. package/dist/packages/crucible/seeds/js/seed-054.js +35 -35
  245. package/dist/packages/crucible/seeds/js/seed-055.js +33 -33
  246. package/dist/packages/crucible/seeds/kotlin/seed-001.kt +24 -24
  247. package/dist/packages/crucible/seeds/kotlin/seed-002.kt +27 -27
  248. package/dist/packages/crucible/seeds/kotlin/seed-003.kt +29 -29
  249. package/dist/packages/crucible/seeds/kotlin/seed-004.kt +24 -24
  250. package/dist/packages/crucible/seeds/kotlin/seed-005.kt +29 -29
  251. package/dist/packages/crucible/seeds/kotlin/seed-006.kt +21 -21
  252. package/dist/packages/crucible/seeds/kotlin/seed-007.kt +23 -23
  253. package/dist/packages/crucible/seeds/kotlin/seed-008.kt +25 -25
  254. package/dist/packages/crucible/seeds/kotlin/seed-009.kt +21 -21
  255. package/dist/packages/crucible/seeds/kotlin/seed-010.kt +28 -28
  256. package/dist/packages/crucible/seeds/kotlin/seed-011.kt +22 -22
  257. package/dist/packages/crucible/seeds/kotlin/seed-012.kt +25 -25
  258. package/dist/packages/crucible/seeds/kotlin/seed-013.kt +30 -30
  259. package/dist/packages/crucible/seeds/kotlin/seed-014.kt +27 -27
  260. package/dist/packages/crucible/seeds/kotlin/seed-015.kt +24 -24
  261. package/dist/packages/crucible/seeds/kotlin/seed-016.kt +28 -28
  262. package/dist/packages/crucible/seeds/kotlin/seed-017.kt +33 -33
  263. package/dist/packages/crucible/seeds/kotlin/seed-018.kt +31 -31
  264. package/dist/packages/crucible/seeds/kotlin/seed-019.kt +28 -28
  265. package/dist/packages/crucible/seeds/kotlin/seed-020.kt +31 -31
  266. package/dist/packages/crucible/seeds/kotlin/seed-021.kt +34 -34
  267. package/dist/packages/crucible/seeds/kotlin/seed-022.kt +29 -29
  268. package/dist/packages/crucible/seeds/kotlin/seed-023.kt +20 -20
  269. package/dist/packages/crucible/seeds/kotlin/seed-024.kt +23 -23
  270. package/dist/packages/crucible/seeds/kotlin/seed-025.kt +23 -23
  271. package/dist/packages/crucible/seeds/kotlin/seed-026.kt +26 -26
  272. package/dist/packages/crucible/seeds/kotlin/seed-027.kt +29 -29
  273. package/dist/packages/crucible/seeds/kotlin/seed-028.kt +24 -24
  274. package/dist/packages/crucible/seeds/kotlin/seed-029.kt +27 -27
  275. package/dist/packages/crucible/seeds/kotlin/seed-030.kt +26 -26
  276. package/dist/packages/crucible/seeds/kotlin/seed-031.kt +28 -28
  277. package/dist/packages/crucible/seeds/kotlin/seed-032.kt +29 -29
  278. package/dist/packages/crucible/seeds/kotlin/seed-033.kt +30 -30
  279. package/dist/packages/crucible/seeds/kotlin/seed-034.kt +26 -26
  280. package/dist/packages/crucible/seeds/kotlin/seed-035.kt +33 -33
  281. package/dist/packages/crucible/seeds/kotlin/seed-036.kt +25 -25
  282. package/dist/packages/crucible/seeds/kotlin/seed-037.kt +26 -26
  283. package/dist/packages/crucible/seeds/kotlin/seed-038.kt +25 -25
  284. package/dist/packages/crucible/seeds/kotlin/seed-039.kt +29 -29
  285. package/dist/packages/crucible/seeds/kotlin/seed-040.kt +28 -28
  286. package/dist/packages/crucible/seeds/kotlin/seed-041.kt +31 -31
  287. package/dist/packages/crucible/seeds/kotlin/seed-042.kt +27 -27
  288. package/dist/packages/crucible/seeds/kotlin/seed-043.kt +26 -26
  289. package/dist/packages/crucible/seeds/kotlin/seed-044.kt +27 -27
  290. package/dist/packages/crucible/seeds/kotlin/seed-045.kt +27 -27
  291. package/dist/packages/crucible/seeds/kotlin/seed-046.kt +33 -33
  292. package/dist/packages/crucible/seeds/kotlin/seed-047.kt +32 -32
  293. package/dist/packages/crucible/seeds/kotlin/seed-048.kt +20 -20
  294. package/dist/packages/crucible/seeds/kotlin/seed-049.kt +23 -23
  295. package/dist/packages/crucible/seeds/kotlin/seed-050.kt +19 -19
  296. package/dist/packages/crucible/seeds/php/seed-001.php +23 -23
  297. package/dist/packages/crucible/seeds/php/seed-002.php +18 -18
  298. package/dist/packages/crucible/seeds/php/seed-003.php +25 -25
  299. package/dist/packages/crucible/seeds/php/seed-004.php +21 -21
  300. package/dist/packages/crucible/seeds/php/seed-005.php +21 -21
  301. package/dist/packages/crucible/seeds/php/seed-006.php +21 -21
  302. package/dist/packages/crucible/seeds/php/seed-007.php +18 -18
  303. package/dist/packages/crucible/seeds/php/seed-008.php +19 -19
  304. package/dist/packages/crucible/seeds/php/seed-009.php +24 -24
  305. package/dist/packages/crucible/seeds/php/seed-010.php +24 -24
  306. package/dist/packages/crucible/seeds/php/seed-011.php +18 -18
  307. package/dist/packages/crucible/seeds/php/seed-012.php +24 -24
  308. package/dist/packages/crucible/seeds/php/seed-013.php +23 -23
  309. package/dist/packages/crucible/seeds/php/seed-014.php +20 -20
  310. package/dist/packages/crucible/seeds/php/seed-015.php +18 -18
  311. package/dist/packages/crucible/seeds/php/seed-016.php +18 -18
  312. package/dist/packages/crucible/seeds/php/seed-017.php +18 -18
  313. package/dist/packages/crucible/seeds/php/seed-018.php +17 -17
  314. package/dist/packages/crucible/seeds/php/seed-019.php +24 -24
  315. package/dist/packages/crucible/seeds/php/seed-020.php +19 -19
  316. package/dist/packages/crucible/seeds/php/seed-021.php +22 -22
  317. package/dist/packages/crucible/seeds/php/seed-022.php +15 -15
  318. package/dist/packages/crucible/seeds/php/seed-023.php +24 -24
  319. package/dist/packages/crucible/seeds/php/seed-024.php +22 -22
  320. package/dist/packages/crucible/seeds/php/seed-025.php +20 -20
  321. package/dist/packages/crucible/seeds/php/seed-026.php +22 -22
  322. package/dist/packages/crucible/seeds/php/seed-027.php +15 -15
  323. package/dist/packages/crucible/seeds/php/seed-028.php +15 -15
  324. package/dist/packages/crucible/seeds/php/seed-029.php +21 -21
  325. package/dist/packages/crucible/seeds/php/seed-030.php +21 -21
  326. package/dist/packages/crucible/seeds/php/seed-031.php +23 -23
  327. package/dist/packages/crucible/seeds/php/seed-032.php +18 -18
  328. package/dist/packages/crucible/seeds/php/seed-033.php +18 -18
  329. package/dist/packages/crucible/seeds/php/seed-034.php +24 -24
  330. package/dist/packages/crucible/seeds/php/seed-035.php +22 -22
  331. package/dist/packages/crucible/seeds/php/seed-036.php +17 -17
  332. package/dist/packages/crucible/seeds/php/seed-037.php +19 -19
  333. package/dist/packages/crucible/seeds/php/seed-038.php +20 -20
  334. package/dist/packages/crucible/seeds/php/seed-039.php +15 -15
  335. package/dist/packages/crucible/seeds/php/seed-040.php +21 -21
  336. package/dist/packages/crucible/seeds/php/seed-041.php +20 -20
  337. package/dist/packages/crucible/seeds/php/seed-042.php +21 -21
  338. package/dist/packages/crucible/seeds/php/seed-043.php +21 -21
  339. package/dist/packages/crucible/seeds/php/seed-044.php +25 -25
  340. package/dist/packages/crucible/seeds/php/seed-045.php +25 -25
  341. package/dist/packages/crucible/seeds/php/seed-046.php +20 -20
  342. package/dist/packages/crucible/seeds/php/seed-047.php +21 -21
  343. package/dist/packages/crucible/seeds/php/seed-048.php +19 -19
  344. package/dist/packages/crucible/seeds/php/seed-049.php +18 -18
  345. package/dist/packages/crucible/seeds/php/seed-050.php +20 -20
  346. package/dist/packages/crucible/seeds/python/seed-001.py +33 -33
  347. package/dist/packages/crucible/seeds/python/seed-002.py +39 -39
  348. package/dist/packages/crucible/seeds/python/seed-003.py +31 -31
  349. package/dist/packages/crucible/seeds/python/seed-004.py +33 -33
  350. package/dist/packages/crucible/seeds/python/seed-005.py +33 -33
  351. package/dist/packages/crucible/seeds/python/seed-006.py +34 -34
  352. package/dist/packages/crucible/seeds/python/seed-007.py +33 -33
  353. package/dist/packages/crucible/seeds/python/seed-008.py +38 -38
  354. package/dist/packages/crucible/seeds/python/seed-009.py +38 -38
  355. package/dist/packages/crucible/seeds/python/seed-010.py +42 -42
  356. package/dist/packages/crucible/seeds/python/seed-011.py +30 -30
  357. package/dist/packages/crucible/seeds/python/seed-012.py +35 -35
  358. package/dist/packages/crucible/seeds/python/seed-013.py +33 -33
  359. package/dist/packages/crucible/seeds/python/seed-014.py +40 -40
  360. package/dist/packages/crucible/seeds/python/seed-015.py +33 -33
  361. package/dist/packages/crucible/seeds/python/seed-016.py +34 -34
  362. package/dist/packages/crucible/seeds/python/seed-017.py +34 -34
  363. package/dist/packages/crucible/seeds/python/seed-018.py +30 -30
  364. package/dist/packages/crucible/seeds/python/seed-019.py +33 -33
  365. package/dist/packages/crucible/seeds/python/seed-020.py +37 -37
  366. package/dist/packages/crucible/seeds/python/seed-021 2.py +37 -37
  367. package/dist/packages/crucible/seeds/python/seed-021.py +37 -37
  368. package/dist/packages/crucible/seeds/python/seed-022 2.py +34 -34
  369. package/dist/packages/crucible/seeds/python/seed-022.py +34 -34
  370. package/dist/packages/crucible/seeds/python/seed-023 2.py +37 -37
  371. package/dist/packages/crucible/seeds/python/seed-023.py +37 -37
  372. package/dist/packages/crucible/seeds/python/seed-024 2.py +38 -38
  373. package/dist/packages/crucible/seeds/python/seed-024.py +38 -38
  374. package/dist/packages/crucible/seeds/python/seed-025 2.py +40 -40
  375. package/dist/packages/crucible/seeds/python/seed-025.py +40 -40
  376. package/dist/packages/crucible/seeds/python/seed-026 2.py +35 -35
  377. package/dist/packages/crucible/seeds/python/seed-026.py +35 -35
  378. package/dist/packages/crucible/seeds/python/seed-027 2.py +35 -35
  379. package/dist/packages/crucible/seeds/python/seed-027.py +35 -35
  380. package/dist/packages/crucible/seeds/python/seed-028 2.py +42 -42
  381. package/dist/packages/crucible/seeds/python/seed-028.py +42 -42
  382. package/dist/packages/crucible/seeds/python/seed-029.py +42 -42
  383. package/dist/packages/crucible/seeds/python/seed-030 2.py +37 -37
  384. package/dist/packages/crucible/seeds/python/seed-030.py +37 -37
  385. package/dist/packages/crucible/seeds/python/seed-031 2.py +34 -34
  386. package/dist/packages/crucible/seeds/python/seed-031.py +34 -34
  387. package/dist/packages/crucible/seeds/python/seed-032.py +33 -33
  388. package/dist/packages/crucible/seeds/python/seed-033.py +32 -32
  389. package/dist/packages/crucible/seeds/python/seed-034.py +38 -38
  390. package/dist/packages/crucible/seeds/python/seed-035.py +35 -35
  391. package/dist/packages/crucible/seeds/python/seed-036 2.py +33 -33
  392. package/dist/packages/crucible/seeds/python/seed-036.py +33 -33
  393. package/dist/packages/crucible/seeds/python/seed-037 2.py +41 -41
  394. package/dist/packages/crucible/seeds/python/seed-037.py +41 -41
  395. package/dist/packages/crucible/seeds/python/seed-038 2.py +33 -33
  396. package/dist/packages/crucible/seeds/python/seed-038.py +33 -33
  397. package/dist/packages/crucible/seeds/python/seed-039 2.py +39 -39
  398. package/dist/packages/crucible/seeds/python/seed-039.py +39 -39
  399. package/dist/packages/crucible/seeds/python/seed-040 2.py +39 -39
  400. package/dist/packages/crucible/seeds/python/seed-040.py +39 -39
  401. package/dist/packages/crucible/seeds/python/seed-041 2.py +37 -37
  402. package/dist/packages/crucible/seeds/python/seed-041.py +37 -37
  403. package/dist/packages/crucible/seeds/python/seed-042 2.py +38 -38
  404. package/dist/packages/crucible/seeds/python/seed-042.py +38 -38
  405. package/dist/packages/crucible/seeds/python/seed-043 2.py +32 -32
  406. package/dist/packages/crucible/seeds/python/seed-043.py +32 -32
  407. package/dist/packages/crucible/seeds/python/seed-044 2.py +38 -38
  408. package/dist/packages/crucible/seeds/python/seed-044.py +38 -38
  409. package/dist/packages/crucible/seeds/python/seed-045 2.py +36 -36
  410. package/dist/packages/crucible/seeds/python/seed-045.py +36 -36
  411. package/dist/packages/crucible/seeds/python/seed-046 2.py +33 -33
  412. package/dist/packages/crucible/seeds/python/seed-046.py +33 -33
  413. package/dist/packages/crucible/seeds/python/seed-047 2.py +44 -44
  414. package/dist/packages/crucible/seeds/python/seed-047.py +44 -44
  415. package/dist/packages/crucible/seeds/python/seed-048 2.py +35 -35
  416. package/dist/packages/crucible/seeds/python/seed-048.py +35 -35
  417. package/dist/packages/crucible/seeds/python/seed-049 2.py +39 -39
  418. package/dist/packages/crucible/seeds/python/seed-049.py +39 -39
  419. package/dist/packages/crucible/seeds/python/seed-050 2.py +39 -39
  420. package/dist/packages/crucible/seeds/python/seed-050.py +39 -39
  421. package/dist/packages/crucible/seeds/python/seed-051 2.py +38 -38
  422. package/dist/packages/crucible/seeds/python/seed-051.py +38 -38
  423. package/dist/packages/crucible/seeds/python/seed-052 2.py +41 -41
  424. package/dist/packages/crucible/seeds/python/seed-052.py +41 -41
  425. package/dist/packages/crucible/seeds/ruby/seed-001 2.rb +15 -15
  426. package/dist/packages/crucible/seeds/ruby/seed-001.rb +15 -15
  427. package/dist/packages/crucible/seeds/ruby/seed-002 2.rb +22 -22
  428. package/dist/packages/crucible/seeds/ruby/seed-002.rb +22 -22
  429. package/dist/packages/crucible/seeds/ruby/seed-003 2.rb +25 -25
  430. package/dist/packages/crucible/seeds/ruby/seed-003.rb +25 -25
  431. package/dist/packages/crucible/seeds/ruby/seed-004 2.rb +17 -17
  432. package/dist/packages/crucible/seeds/ruby/seed-004.rb +17 -17
  433. package/dist/packages/crucible/seeds/ruby/seed-005 2.rb +21 -21
  434. package/dist/packages/crucible/seeds/ruby/seed-005.rb +21 -21
  435. package/dist/packages/crucible/seeds/ruby/seed-006 2.rb +17 -17
  436. package/dist/packages/crucible/seeds/ruby/seed-006.rb +17 -17
  437. package/dist/packages/crucible/seeds/ruby/seed-007 2.rb +16 -16
  438. package/dist/packages/crucible/seeds/ruby/seed-007.rb +16 -16
  439. package/dist/packages/crucible/seeds/ruby/seed-008 2.rb +18 -18
  440. package/dist/packages/crucible/seeds/ruby/seed-008.rb +18 -18
  441. package/dist/packages/crucible/seeds/ruby/seed-009 2.rb +20 -20
  442. package/dist/packages/crucible/seeds/ruby/seed-009.rb +20 -20
  443. package/dist/packages/crucible/seeds/ruby/seed-010 2.rb +24 -24
  444. package/dist/packages/crucible/seeds/ruby/seed-010.rb +24 -24
  445. package/dist/packages/crucible/seeds/ruby/seed-011 2.rb +21 -21
  446. package/dist/packages/crucible/seeds/ruby/seed-011.rb +21 -21
  447. package/dist/packages/crucible/seeds/ruby/seed-012 2.rb +22 -22
  448. package/dist/packages/crucible/seeds/ruby/seed-012.rb +22 -22
  449. package/dist/packages/crucible/seeds/ruby/seed-013 2.rb +21 -21
  450. package/dist/packages/crucible/seeds/ruby/seed-013.rb +21 -21
  451. package/dist/packages/crucible/seeds/ruby/seed-014 2.rb +16 -16
  452. package/dist/packages/crucible/seeds/ruby/seed-014.rb +16 -16
  453. package/dist/packages/crucible/seeds/ruby/seed-015 2.rb +18 -18
  454. package/dist/packages/crucible/seeds/ruby/seed-015.rb +18 -18
  455. package/dist/packages/crucible/seeds/ruby/seed-016 2.rb +17 -17
  456. package/dist/packages/crucible/seeds/ruby/seed-016.rb +17 -17
  457. package/dist/packages/crucible/seeds/ruby/seed-017 2.rb +25 -25
  458. package/dist/packages/crucible/seeds/ruby/seed-017.rb +25 -25
  459. package/dist/packages/crucible/seeds/ruby/seed-018 2.rb +23 -23
  460. package/dist/packages/crucible/seeds/ruby/seed-018.rb +23 -23
  461. package/dist/packages/crucible/seeds/ruby/seed-019 2.rb +20 -20
  462. package/dist/packages/crucible/seeds/ruby/seed-019.rb +20 -20
  463. package/dist/packages/crucible/seeds/ruby/seed-020 2.rb +17 -17
  464. package/dist/packages/crucible/seeds/ruby/seed-020.rb +17 -17
  465. package/dist/packages/crucible/seeds/ruby/seed-021 2.rb +20 -20
  466. package/dist/packages/crucible/seeds/ruby/seed-021.rb +20 -20
  467. package/dist/packages/crucible/seeds/ruby/seed-022 2.rb +21 -21
  468. package/dist/packages/crucible/seeds/ruby/seed-022.rb +21 -21
  469. package/dist/packages/crucible/seeds/ruby/seed-023 2.rb +19 -19
  470. package/dist/packages/crucible/seeds/ruby/seed-023.rb +19 -19
  471. package/dist/packages/crucible/seeds/ruby/seed-024 2.rb +17 -17
  472. package/dist/packages/crucible/seeds/ruby/seed-024.rb +17 -17
  473. package/dist/packages/crucible/seeds/ruby/seed-025 2.rb +17 -17
  474. package/dist/packages/crucible/seeds/ruby/seed-025.rb +17 -17
  475. package/dist/packages/crucible/seeds/ruby/seed-026 2.rb +18 -18
  476. package/dist/packages/crucible/seeds/ruby/seed-026.rb +18 -18
  477. package/dist/packages/crucible/seeds/ruby/seed-027 2.rb +21 -21
  478. package/dist/packages/crucible/seeds/ruby/seed-027.rb +21 -21
  479. package/dist/packages/crucible/seeds/ruby/seed-028 2.rb +22 -22
  480. package/dist/packages/crucible/seeds/ruby/seed-028.rb +22 -22
  481. package/dist/packages/crucible/seeds/ruby/seed-029 2.rb +19 -19
  482. package/dist/packages/crucible/seeds/ruby/seed-029.rb +19 -19
  483. package/dist/packages/crucible/seeds/ruby/seed-030 2.rb +20 -20
  484. package/dist/packages/crucible/seeds/ruby/seed-030.rb +20 -20
  485. package/dist/packages/crucible/seeds/ruby/seed-031 2.rb +17 -17
  486. package/dist/packages/crucible/seeds/ruby/seed-031.rb +17 -17
  487. package/dist/packages/crucible/seeds/ruby/seed-032 2.rb +22 -22
  488. package/dist/packages/crucible/seeds/ruby/seed-032.rb +22 -22
  489. package/dist/packages/crucible/seeds/ruby/seed-033 2.rb +18 -18
  490. package/dist/packages/crucible/seeds/ruby/seed-033.rb +18 -18
  491. package/dist/packages/crucible/seeds/ruby/seed-034 2.rb +19 -19
  492. package/dist/packages/crucible/seeds/ruby/seed-034.rb +19 -19
  493. package/dist/packages/crucible/seeds/ruby/seed-035 2.rb +19 -19
  494. package/dist/packages/crucible/seeds/ruby/seed-035.rb +19 -19
  495. package/dist/packages/crucible/seeds/ruby/seed-036 2.rb +18 -18
  496. package/dist/packages/crucible/seeds/ruby/seed-036.rb +18 -18
  497. package/dist/packages/crucible/seeds/ruby/seed-037 2.rb +21 -21
  498. package/dist/packages/crucible/seeds/ruby/seed-037.rb +21 -21
  499. package/dist/packages/crucible/seeds/ruby/seed-038 2.rb +24 -24
  500. package/dist/packages/crucible/seeds/ruby/seed-038.rb +24 -24
  501. package/dist/packages/crucible/seeds/ruby/seed-039 2.rb +24 -24
  502. package/dist/packages/crucible/seeds/ruby/seed-039.rb +24 -24
  503. package/dist/packages/crucible/seeds/ruby/seed-040 2.rb +22 -22
  504. package/dist/packages/crucible/seeds/ruby/seed-040.rb +22 -22
  505. package/dist/packages/crucible/seeds/ruby/seed-041 2.rb +23 -23
  506. package/dist/packages/crucible/seeds/ruby/seed-041.rb +23 -23
  507. package/dist/packages/crucible/seeds/ruby/seed-042 2.rb +25 -25
  508. package/dist/packages/crucible/seeds/ruby/seed-042.rb +25 -25
  509. package/dist/packages/crucible/seeds/ruby/seed-043 2.rb +23 -23
  510. package/dist/packages/crucible/seeds/ruby/seed-043.rb +23 -23
  511. package/dist/packages/crucible/seeds/ruby/seed-044 2.rb +16 -16
  512. package/dist/packages/crucible/seeds/ruby/seed-044.rb +16 -16
  513. package/dist/packages/crucible/seeds/ruby/seed-045 2.rb +22 -22
  514. package/dist/packages/crucible/seeds/ruby/seed-045.rb +22 -22
  515. package/dist/packages/crucible/seeds/ruby/seed-046 2.rb +27 -27
  516. package/dist/packages/crucible/seeds/ruby/seed-046.rb +27 -27
  517. package/dist/packages/crucible/seeds/ruby/seed-047 2.rb +26 -26
  518. package/dist/packages/crucible/seeds/ruby/seed-047.rb +26 -26
  519. package/dist/packages/crucible/seeds/ruby/seed-048 2.rb +24 -24
  520. package/dist/packages/crucible/seeds/ruby/seed-048.rb +24 -24
  521. package/dist/packages/crucible/seeds/ruby/seed-049 2.rb +20 -20
  522. package/dist/packages/crucible/seeds/ruby/seed-049.rb +20 -20
  523. package/dist/packages/crucible/seeds/ruby/seed-050 2.rb +27 -27
  524. package/dist/packages/crucible/seeds/ruby/seed-050.rb +27 -27
  525. package/dist/packages/crucible/seeds/rust/seed-001 2.rs +25 -25
  526. package/dist/packages/crucible/seeds/rust/seed-001.rs +25 -25
  527. package/dist/packages/crucible/seeds/rust/seed-002 2.rs +20 -20
  528. package/dist/packages/crucible/seeds/rust/seed-002.rs +20 -20
  529. package/dist/packages/crucible/seeds/rust/seed-003 2.rs +23 -23
  530. package/dist/packages/crucible/seeds/rust/seed-003.rs +23 -23
  531. package/dist/packages/crucible/seeds/rust/seed-004 2.rs +21 -21
  532. package/dist/packages/crucible/seeds/rust/seed-004.rs +21 -21
  533. package/dist/packages/crucible/seeds/rust/seed-005 2.rs +21 -21
  534. package/dist/packages/crucible/seeds/rust/seed-005.rs +21 -21
  535. package/dist/packages/crucible/seeds/rust/seed-006 2.rs +24 -24
  536. package/dist/packages/crucible/seeds/rust/seed-006.rs +24 -24
  537. package/dist/packages/crucible/seeds/rust/seed-007 2.rs +20 -20
  538. package/dist/packages/crucible/seeds/rust/seed-007.rs +20 -20
  539. package/dist/packages/crucible/seeds/rust/seed-008 2.rs +19 -19
  540. package/dist/packages/crucible/seeds/rust/seed-008.rs +19 -19
  541. package/dist/packages/crucible/seeds/rust/seed-009 2.rs +28 -28
  542. package/dist/packages/crucible/seeds/rust/seed-009.rs +28 -28
  543. package/dist/packages/crucible/seeds/rust/seed-010 2.rs +28 -28
  544. package/dist/packages/crucible/seeds/rust/seed-010.rs +28 -28
  545. package/dist/packages/crucible/seeds/rust/seed-011 2.rs +25 -25
  546. package/dist/packages/crucible/seeds/rust/seed-011.rs +25 -25
  547. package/dist/packages/crucible/seeds/rust/seed-012 2.rs +31 -31
  548. package/dist/packages/crucible/seeds/rust/seed-012.rs +31 -31
  549. package/dist/packages/crucible/seeds/rust/seed-013 2.rs +27 -27
  550. package/dist/packages/crucible/seeds/rust/seed-013.rs +27 -27
  551. package/dist/packages/crucible/seeds/rust/seed-014 2.rs +30 -30
  552. package/dist/packages/crucible/seeds/rust/seed-014.rs +30 -30
  553. package/dist/packages/crucible/seeds/rust/seed-015 2.rs +33 -33
  554. package/dist/packages/crucible/seeds/rust/seed-015.rs +33 -33
  555. package/dist/packages/crucible/seeds/rust/seed-016 2.rs +22 -22
  556. package/dist/packages/crucible/seeds/rust/seed-016.rs +22 -22
  557. package/dist/packages/crucible/seeds/rust/seed-017 2.rs +28 -28
  558. package/dist/packages/crucible/seeds/rust/seed-017.rs +28 -28
  559. package/dist/packages/crucible/seeds/rust/seed-018 2.rs +21 -21
  560. package/dist/packages/crucible/seeds/rust/seed-018.rs +21 -21
  561. package/dist/packages/crucible/seeds/rust/seed-019 2.rs +36 -36
  562. package/dist/packages/crucible/seeds/rust/seed-019.rs +36 -36
  563. package/dist/packages/crucible/seeds/rust/seed-020 2.rs +27 -27
  564. package/dist/packages/crucible/seeds/rust/seed-020.rs +27 -27
  565. package/dist/packages/crucible/seeds/rust/seed-021 2.rs +26 -26
  566. package/dist/packages/crucible/seeds/rust/seed-021.rs +26 -26
  567. package/dist/packages/crucible/seeds/rust/seed-022 2.rs +23 -23
  568. package/dist/packages/crucible/seeds/rust/seed-022.rs +23 -23
  569. package/dist/packages/crucible/seeds/rust/seed-023 2.rs +22 -22
  570. package/dist/packages/crucible/seeds/rust/seed-023.rs +22 -22
  571. package/dist/packages/crucible/seeds/rust/seed-024 2.rs +24 -24
  572. package/dist/packages/crucible/seeds/rust/seed-024.rs +24 -24
  573. package/dist/packages/crucible/seeds/rust/seed-025 2.rs +29 -29
  574. package/dist/packages/crucible/seeds/rust/seed-025.rs +29 -29
  575. package/dist/packages/crucible/seeds/rust/seed-026 2.rs +23 -23
  576. package/dist/packages/crucible/seeds/rust/seed-026.rs +23 -23
  577. package/dist/packages/crucible/seeds/rust/seed-027 2.rs +24 -24
  578. package/dist/packages/crucible/seeds/rust/seed-027.rs +24 -24
  579. package/dist/packages/crucible/seeds/rust/seed-028 2.rs +25 -25
  580. package/dist/packages/crucible/seeds/rust/seed-028.rs +25 -25
  581. package/dist/packages/crucible/seeds/rust/seed-029 2.rs +25 -25
  582. package/dist/packages/crucible/seeds/rust/seed-029.rs +25 -25
  583. package/dist/packages/crucible/seeds/rust/seed-030 2.rs +30 -30
  584. package/dist/packages/crucible/seeds/rust/seed-030.rs +30 -30
  585. package/dist/packages/crucible/seeds/rust/seed-031 2.rs +22 -22
  586. package/dist/packages/crucible/seeds/rust/seed-031.rs +22 -22
  587. package/dist/packages/crucible/seeds/rust/seed-032 2.rs +25 -25
  588. package/dist/packages/crucible/seeds/rust/seed-032.rs +25 -25
  589. package/dist/packages/crucible/seeds/rust/seed-033 2.rs +25 -25
  590. package/dist/packages/crucible/seeds/rust/seed-033.rs +25 -25
  591. package/dist/packages/crucible/seeds/rust/seed-034 2.rs +20 -20
  592. package/dist/packages/crucible/seeds/rust/seed-034.rs +20 -20
  593. package/dist/packages/crucible/seeds/rust/seed-035 2.rs +28 -28
  594. package/dist/packages/crucible/seeds/rust/seed-035.rs +28 -28
  595. package/dist/packages/crucible/seeds/rust/seed-036 2.rs +26 -26
  596. package/dist/packages/crucible/seeds/rust/seed-036.rs +26 -26
  597. package/dist/packages/crucible/seeds/rust/seed-037 2.rs +31 -31
  598. package/dist/packages/crucible/seeds/rust/seed-037.rs +31 -31
  599. package/dist/packages/crucible/seeds/rust/seed-038 2.rs +25 -25
  600. package/dist/packages/crucible/seeds/rust/seed-038.rs +25 -25
  601. package/dist/packages/crucible/seeds/rust/seed-039 2.rs +28 -28
  602. package/dist/packages/crucible/seeds/rust/seed-039.rs +28 -28
  603. package/dist/packages/crucible/seeds/rust/seed-040 2.rs +27 -27
  604. package/dist/packages/crucible/seeds/rust/seed-040.rs +27 -27
  605. package/dist/packages/crucible/seeds/rust/seed-041 2.rs +32 -32
  606. package/dist/packages/crucible/seeds/rust/seed-041.rs +32 -32
  607. package/dist/packages/crucible/seeds/rust/seed-042 2.rs +27 -27
  608. package/dist/packages/crucible/seeds/rust/seed-042.rs +27 -27
  609. package/dist/packages/crucible/seeds/rust/seed-043 2.rs +29 -29
  610. package/dist/packages/crucible/seeds/rust/seed-043.rs +29 -29
  611. package/dist/packages/crucible/seeds/rust/seed-044 2.rs +25 -25
  612. package/dist/packages/crucible/seeds/rust/seed-044.rs +25 -25
  613. package/dist/packages/crucible/seeds/rust/seed-045 2.rs +28 -28
  614. package/dist/packages/crucible/seeds/rust/seed-045.rs +28 -28
  615. package/dist/packages/crucible/seeds/rust/seed-046 2.rs +25 -25
  616. package/dist/packages/crucible/seeds/rust/seed-046.rs +25 -25
  617. package/dist/packages/crucible/seeds/rust/seed-047 2.rs +34 -34
  618. package/dist/packages/crucible/seeds/rust/seed-047.rs +34 -34
  619. package/dist/packages/crucible/seeds/rust/seed-048 2.rs +21 -21
  620. package/dist/packages/crucible/seeds/rust/seed-048.rs +21 -21
  621. package/dist/packages/crucible/seeds/rust/seed-049 2.rs +26 -26
  622. package/dist/packages/crucible/seeds/rust/seed-049.rs +26 -26
  623. package/dist/packages/crucible/seeds/rust/seed-050 2.rs +23 -23
  624. package/dist/packages/crucible/seeds/rust/seed-050.rs +23 -23
  625. package/dist/packages/crucible/seeds/ts/seed-001 2.ts +32 -32
  626. package/dist/packages/crucible/seeds/ts/seed-001.ts +32 -32
  627. package/dist/packages/crucible/seeds/ts/seed-002 2.ts +34 -34
  628. package/dist/packages/crucible/seeds/ts/seed-002.ts +34 -34
  629. package/dist/packages/crucible/seeds/ts/seed-003 2.ts +28 -28
  630. package/dist/packages/crucible/seeds/ts/seed-003.ts +28 -28
  631. package/dist/packages/crucible/seeds/ts/seed-004 2.ts +34 -34
  632. package/dist/packages/crucible/seeds/ts/seed-004.ts +34 -34
  633. package/dist/packages/crucible/seeds/ts/seed-005 2.ts +32 -32
  634. package/dist/packages/crucible/seeds/ts/seed-005.ts +32 -32
  635. package/dist/packages/crucible/seeds/ts/seed-006 2.ts +31 -31
  636. package/dist/packages/crucible/seeds/ts/seed-006.ts +31 -31
  637. package/dist/packages/crucible/seeds/ts/seed-007 2.ts +28 -28
  638. package/dist/packages/crucible/seeds/ts/seed-007.ts +28 -28
  639. package/dist/packages/crucible/seeds/ts/seed-008 2.ts +40 -40
  640. package/dist/packages/crucible/seeds/ts/seed-008.ts +40 -40
  641. package/dist/packages/crucible/seeds/ts/seed-009 2.ts +31 -31
  642. package/dist/packages/crucible/seeds/ts/seed-009.ts +31 -31
  643. package/dist/packages/crucible/seeds/ts/seed-010 2.ts +33 -33
  644. package/dist/packages/crucible/seeds/ts/seed-010.ts +33 -33
  645. package/dist/packages/crucible/seeds/ts/seed-011 2.ts +29 -29
  646. package/dist/packages/crucible/seeds/ts/seed-011.ts +29 -29
  647. package/dist/packages/crucible/seeds/ts/seed-012 2.ts +34 -34
  648. package/dist/packages/crucible/seeds/ts/seed-012.ts +34 -34
  649. package/dist/packages/crucible/seeds/ts/seed-013 2.ts +31 -31
  650. package/dist/packages/crucible/seeds/ts/seed-013.ts +31 -31
  651. package/dist/packages/crucible/seeds/ts/seed-014 2.ts +36 -36
  652. package/dist/packages/crucible/seeds/ts/seed-014.ts +36 -36
  653. package/dist/packages/crucible/seeds/ts/seed-015 2.ts +31 -31
  654. package/dist/packages/crucible/seeds/ts/seed-015.ts +31 -31
  655. package/dist/packages/crucible/seeds/ts/seed-016 2.ts +37 -37
  656. package/dist/packages/crucible/seeds/ts/seed-016.ts +37 -37
  657. package/dist/packages/crucible/seeds/ts/seed-017 2.ts +44 -44
  658. package/dist/packages/crucible/seeds/ts/seed-017.ts +44 -44
  659. package/dist/packages/crucible/seeds/ts/seed-018 2.ts +33 -33
  660. package/dist/packages/crucible/seeds/ts/seed-018.ts +33 -33
  661. package/dist/packages/crucible/seeds/ts/seed-019 2.ts +32 -32
  662. package/dist/packages/crucible/seeds/ts/seed-019.ts +32 -32
  663. package/dist/packages/crucible/seeds/ts/seed-020 2.ts +33 -33
  664. package/dist/packages/crucible/seeds/ts/seed-020.ts +33 -33
  665. package/dist/packages/crucible/seeds/ts/seed-021 2.ts +33 -33
  666. package/dist/packages/crucible/seeds/ts/seed-021.ts +33 -33
  667. package/dist/packages/crucible/seeds/ts/seed-022 2.ts +34 -34
  668. package/dist/packages/crucible/seeds/ts/seed-022.ts +34 -34
  669. package/dist/packages/crucible/seeds/ts/seed-023 2.ts +33 -33
  670. package/dist/packages/crucible/seeds/ts/seed-023.ts +33 -33
  671. package/dist/packages/crucible/seeds/ts/seed-024 2.ts +35 -35
  672. package/dist/packages/crucible/seeds/ts/seed-024.ts +35 -35
  673. package/dist/packages/crucible/seeds/ts/seed-025 2.ts +29 -29
  674. package/dist/packages/crucible/seeds/ts/seed-025.ts +29 -29
  675. package/dist/packages/crucible/seeds/ts/seed-026 2.ts +36 -36
  676. package/dist/packages/crucible/seeds/ts/seed-026.ts +36 -36
  677. package/dist/packages/crucible/seeds/ts/seed-027 2.ts +30 -30
  678. package/dist/packages/crucible/seeds/ts/seed-027.ts +30 -30
  679. package/dist/packages/crucible/seeds/ts/seed-028 2.ts +32 -32
  680. package/dist/packages/crucible/seeds/ts/seed-028.ts +32 -32
  681. package/dist/packages/crucible/seeds/ts/seed-029 2.ts +34 -34
  682. package/dist/packages/crucible/seeds/ts/seed-029.ts +34 -34
  683. package/dist/packages/crucible/seeds/ts/seed-030 2.ts +37 -37
  684. package/dist/packages/crucible/seeds/ts/seed-030.ts +37 -37
  685. package/dist/packages/crucible/seeds/ts/seed-031 2.ts +31 -31
  686. package/dist/packages/crucible/seeds/ts/seed-031.ts +31 -31
  687. package/dist/packages/crucible/seeds/ts/seed-032 2.ts +32 -32
  688. package/dist/packages/crucible/seeds/ts/seed-032.ts +32 -32
  689. package/dist/packages/crucible/seeds/ts/seed-033 2.ts +32 -32
  690. package/dist/packages/crucible/seeds/ts/seed-033.ts +32 -32
  691. package/dist/packages/crucible/seeds/ts/seed-034 2.ts +34 -34
  692. package/dist/packages/crucible/seeds/ts/seed-034.ts +34 -34
  693. package/dist/packages/crucible/seeds/ts/seed-035 2.ts +29 -29
  694. package/dist/packages/crucible/seeds/ts/seed-035.ts +29 -29
  695. package/dist/packages/crucible/seeds/ts/seed-036 2.ts +34 -34
  696. package/dist/packages/crucible/seeds/ts/seed-036.ts +34 -34
  697. package/dist/packages/crucible/seeds/ts/seed-037 2.ts +33 -33
  698. package/dist/packages/crucible/seeds/ts/seed-037.ts +33 -33
  699. package/dist/packages/crucible/seeds/ts/seed-038 2.ts +29 -29
  700. package/dist/packages/crucible/seeds/ts/seed-038.ts +29 -29
  701. package/dist/packages/crucible/seeds/ts/seed-039 2.ts +35 -35
  702. package/dist/packages/crucible/seeds/ts/seed-039.ts +35 -35
  703. package/dist/packages/crucible/seeds/ts/seed-040 2.ts +31 -31
  704. package/dist/packages/crucible/seeds/ts/seed-040.ts +31 -31
  705. package/dist/packages/crucible/seeds/ts/seed-041 2.ts +29 -29
  706. package/dist/packages/crucible/seeds/ts/seed-041.ts +29 -29
  707. package/dist/packages/crucible/seeds/ts/seed-042 2.ts +33 -33
  708. package/dist/packages/crucible/seeds/ts/seed-042.ts +33 -33
  709. package/dist/packages/crucible/seeds/ts/seed-043 2.ts +32 -32
  710. package/dist/packages/crucible/seeds/ts/seed-043.ts +32 -32
  711. package/dist/packages/crucible/seeds/ts/seed-044 2.ts +36 -36
  712. package/dist/packages/crucible/seeds/ts/seed-044.ts +36 -36
  713. package/dist/packages/crucible/seeds/ts/seed-045 2.ts +39 -39
  714. package/dist/packages/crucible/seeds/ts/seed-045.ts +39 -39
  715. package/dist/packages/crucible/seeds/ts/seed-046 2.ts +41 -41
  716. package/dist/packages/crucible/seeds/ts/seed-046.ts +41 -41
  717. package/dist/packages/crucible/seeds/ts/seed-047 2.ts +33 -33
  718. package/dist/packages/crucible/seeds/ts/seed-047.ts +33 -33
  719. package/dist/packages/crucible/seeds/ts/seed-048 2.ts +33 -33
  720. package/dist/packages/crucible/seeds/ts/seed-048.ts +33 -33
  721. package/dist/packages/crucible/seeds/ts/seed-049 2.ts +34 -34
  722. package/dist/packages/crucible/seeds/ts/seed-049.ts +34 -34
  723. package/dist/packages/crucible/seeds/ts/seed-050 2.ts +41 -41
  724. package/dist/packages/crucible/seeds/ts/seed-050.ts +41 -41
  725. package/dist/packages/crucible/seeds/ts/seed-051 2.ts +34 -34
  726. package/dist/packages/crucible/seeds/ts/seed-051.ts +34 -34
  727. package/dist/packages/crucible/seeds/ts/seed-052 2.ts +36 -36
  728. package/dist/packages/crucible/seeds/ts/seed-052.ts +36 -36
  729. package/dist/packages/scanner/ai-confidence-scorer.js +1 -1
  730. package/dist/packages/scanner/baseline-manager.js +1 -1
  731. package/dist/packages/scanner/code-scanner.js +1 -1
  732. package/dist/packages/scanner/copy-paste-detector.js +1 -1
  733. package/dist/packages/scanner/drift-detector.js +1 -1
  734. package/dist/packages/scanner/export-verifier.js +1 -1
  735. package/dist/packages/scanner/ghost-code-detector.js +1 -1
  736. package/dist/packages/scanner/hallucination-detector.js +1 -1
  737. package/dist/packages/scanner/license-manager.js +1 -1
  738. package/dist/packages/scanner/monitor-service.js +1 -1
  739. package/dist/packages/scanner/taint-tracker.js +1 -1
  740. package/package.json +62 -63
@@ -1,44 +1,44 @@
1
- # [CRUCIBLE-SEED]
2
- # category: ssrf
3
- # severity: high
4
- # language: python
5
- # expected: SSRF via aiohttp.ClientSession with user-controlled URL in async service
6
-
7
- import aiohttp
8
- from fastapi import FastAPI, Body
9
- from pydantic import BaseModel
10
-
11
- app = FastAPI()
12
-
13
-
14
- class NotificationConfig(BaseModel):
15
- webhook_url: str # user-controlled
16
- event_type: str
17
- secret: str = ""
18
-
19
-
20
- class ImportRequest(BaseModel):
21
- data_url: str # user-controlled source URL
22
- format: str = "json"
23
-
24
-
25
- @app.post("/notifications/send")
26
- async def send_notification(config: NotificationConfig):
27
- async with aiohttp.ClientSession() as session:
28
- # webhook_url from user — attacker targets http://10.0.0.1/admin
29
- async with session.post(
30
- config.webhook_url,
31
- json={"event": config.event_type},
32
- headers={"X-Secret": config.secret},
33
- timeout=aiohttp.ClientTimeout(total=10),
34
- allow_redirects=True, # follows redirects — pivot to internal
35
- ) as resp:
36
- return {"status": resp.status}
37
-
38
-
39
- @app.post("/data/import")
40
- async def import_data(req: ImportRequest):
41
- async with aiohttp.ClientSession() as session:
42
- async with session.get(req.data_url) as resp:
43
- data = await resp.text()
44
- return {"preview": data[:500], "format": req.format}
1
+ # [CRUCIBLE-SEED]
2
+ # category: ssrf
3
+ # severity: high
4
+ # language: python
5
+ # expected: SSRF via aiohttp.ClientSession with user-controlled URL in async service
6
+
7
+ import aiohttp
8
+ from fastapi import FastAPI, Body
9
+ from pydantic import BaseModel
10
+
11
+ app = FastAPI()
12
+
13
+
14
+ class NotificationConfig(BaseModel):
15
+ webhook_url: str # user-controlled
16
+ event_type: str
17
+ secret: str = ""
18
+
19
+
20
+ class ImportRequest(BaseModel):
21
+ data_url: str # user-controlled source URL
22
+ format: str = "json"
23
+
24
+
25
+ @app.post("/notifications/send")
26
+ async def send_notification(config: NotificationConfig):
27
+ async with aiohttp.ClientSession() as session:
28
+ # webhook_url from user — attacker targets http://10.0.0.1/admin
29
+ async with session.post(
30
+ config.webhook_url,
31
+ json={"event": config.event_type},
32
+ headers={"X-Secret": config.secret},
33
+ timeout=aiohttp.ClientTimeout(total=10),
34
+ allow_redirects=True, # follows redirects — pivot to internal
35
+ ) as resp:
36
+ return {"status": resp.status}
37
+
38
+
39
+ @app.post("/data/import")
40
+ async def import_data(req: ImportRequest):
41
+ async with aiohttp.ClientSession() as session:
42
+ async with session.get(req.data_url) as resp:
43
+ data = await resp.text()
44
+ return {"preview": data[:500], "format": req.format}
@@ -1,35 +1,35 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: critical
4
- # language: python
5
- # expected: pickle.loads used with untrusted data — arbitrary code execution
6
-
7
- import pickle
8
- import base64
9
- from flask import Flask, request, jsonify
10
-
11
- app = Flask(__name__)
12
-
13
-
14
- @app.route("/session/restore", methods=["POST"])
15
- def restore_session():
16
- session_data = request.cookies.get("session", "")
17
- if not session_data:
18
- return jsonify({"error": "No session"}), 401
19
-
20
- try:
21
- # pickle.loads executes arbitrary Python code embedded in the payload
22
- # Attacker payload: object with __reduce__ returning os.system('id')
23
- decoded = base64.b64decode(session_data)
24
- session = pickle.loads(decoded)
25
- return jsonify({"user": session.get("user"), "role": session.get("role")})
26
- except Exception as e:
27
- return jsonify({"error": "Invalid session"}), 400
28
-
29
-
30
- @app.route("/cache/get", methods=["POST"])
31
- def get_cached():
32
- raw = request.get_json().get("data", "")
33
- # Data from Redis — but Redis can be poisoned by attacker
34
- obj = pickle.loads(base64.b64decode(raw))
35
- return jsonify({"value": str(obj)})
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: critical
4
+ # language: python
5
+ # expected: pickle.loads used with untrusted data — arbitrary code execution
6
+
7
+ import pickle
8
+ import base64
9
+ from flask import Flask, request, jsonify
10
+
11
+ app = Flask(__name__)
12
+
13
+
14
+ @app.route("/session/restore", methods=["POST"])
15
+ def restore_session():
16
+ session_data = request.cookies.get("session", "")
17
+ if not session_data:
18
+ return jsonify({"error": "No session"}), 401
19
+
20
+ try:
21
+ # pickle.loads executes arbitrary Python code embedded in the payload
22
+ # Attacker payload: object with __reduce__ returning os.system('id')
23
+ decoded = base64.b64decode(session_data)
24
+ session = pickle.loads(decoded)
25
+ return jsonify({"user": session.get("user"), "role": session.get("role")})
26
+ except Exception as e:
27
+ return jsonify({"error": "Invalid session"}), 400
28
+
29
+
30
+ @app.route("/cache/get", methods=["POST"])
31
+ def get_cached():
32
+ raw = request.get_json().get("data", "")
33
+ # Data from Redis — but Redis can be poisoned by attacker
34
+ obj = pickle.loads(base64.b64decode(raw))
35
+ return jsonify({"value": str(obj)})
@@ -1,35 +1,35 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: critical
4
- # language: python
5
- # expected: pickle.loads used with untrusted data — arbitrary code execution
6
-
7
- import pickle
8
- import base64
9
- from flask import Flask, request, jsonify
10
-
11
- app = Flask(__name__)
12
-
13
-
14
- @app.route("/session/restore", methods=["POST"])
15
- def restore_session():
16
- session_data = request.cookies.get("session", "")
17
- if not session_data:
18
- return jsonify({"error": "No session"}), 401
19
-
20
- try:
21
- # pickle.loads executes arbitrary Python code embedded in the payload
22
- # Attacker payload: object with __reduce__ returning os.system('id')
23
- decoded = base64.b64decode(session_data)
24
- session = pickle.loads(decoded)
25
- return jsonify({"user": session.get("user"), "role": session.get("role")})
26
- except Exception as e:
27
- return jsonify({"error": "Invalid session"}), 400
28
-
29
-
30
- @app.route("/cache/get", methods=["POST"])
31
- def get_cached():
32
- raw = request.get_json().get("data", "")
33
- # Data from Redis — but Redis can be poisoned by attacker
34
- obj = pickle.loads(base64.b64decode(raw))
35
- return jsonify({"value": str(obj)})
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: critical
4
+ # language: python
5
+ # expected: pickle.loads used with untrusted data — arbitrary code execution
6
+
7
+ import pickle
8
+ import base64
9
+ from flask import Flask, request, jsonify
10
+
11
+ app = Flask(__name__)
12
+
13
+
14
+ @app.route("/session/restore", methods=["POST"])
15
+ def restore_session():
16
+ session_data = request.cookies.get("session", "")
17
+ if not session_data:
18
+ return jsonify({"error": "No session"}), 401
19
+
20
+ try:
21
+ # pickle.loads executes arbitrary Python code embedded in the payload
22
+ # Attacker payload: object with __reduce__ returning os.system('id')
23
+ decoded = base64.b64decode(session_data)
24
+ session = pickle.loads(decoded)
25
+ return jsonify({"user": session.get("user"), "role": session.get("role")})
26
+ except Exception as e:
27
+ return jsonify({"error": "Invalid session"}), 400
28
+
29
+
30
+ @app.route("/cache/get", methods=["POST"])
31
+ def get_cached():
32
+ raw = request.get_json().get("data", "")
33
+ # Data from Redis — but Redis can be poisoned by attacker
34
+ obj = pickle.loads(base64.b64decode(raw))
35
+ return jsonify({"value": str(obj)})
@@ -1,39 +1,39 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: critical
4
- # language: python
5
- # expected: pickle.load used with untrusted file upload and shelve with user-controlled key
6
-
7
- import pickle
8
- import shelve
9
- from fastapi import FastAPI, UploadFile, File, HTTPException
10
-
11
- app = FastAPI()
12
-
13
-
14
- @app.post("/models/load")
15
- async def load_model(file: UploadFile = File(...)):
16
- contents = await file.read()
17
- try:
18
- # User-uploaded .pkl file deserialized without any validation
19
- model = pickle.loads(contents)
20
- return {"model_type": type(model).__name__}
21
- except Exception as e:
22
- raise HTTPException(status_code=400, detail=str(e))
23
-
24
-
25
- @app.get("/cache/{key}")
26
- def get_from_cache(key: str):
27
- # shelve uses pickle internally — user-controlled key reads arbitrary shelf entries
28
- with shelve.open("/var/cache/app_cache") as db:
29
- if key not in db:
30
- raise HTTPException(status_code=404, detail="Not found")
31
- value = db[key] # deserialized via pickle
32
- return {"value": value}
33
-
34
-
35
- @app.post("/tasks/restore")
36
- async def restore_task_state(file: UploadFile = File(...)):
37
- data = await file.read()
38
- state = pickle.loads(data) # untrusted task state from client
39
- return {"task_id": state.get("id"), "status": state.get("status")}
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: critical
4
+ # language: python
5
+ # expected: pickle.load used with untrusted file upload and shelve with user-controlled key
6
+
7
+ import pickle
8
+ import shelve
9
+ from fastapi import FastAPI, UploadFile, File, HTTPException
10
+
11
+ app = FastAPI()
12
+
13
+
14
+ @app.post("/models/load")
15
+ async def load_model(file: UploadFile = File(...)):
16
+ contents = await file.read()
17
+ try:
18
+ # User-uploaded .pkl file deserialized without any validation
19
+ model = pickle.loads(contents)
20
+ return {"model_type": type(model).__name__}
21
+ except Exception as e:
22
+ raise HTTPException(status_code=400, detail=str(e))
23
+
24
+
25
+ @app.get("/cache/{key}")
26
+ def get_from_cache(key: str):
27
+ # shelve uses pickle internally — user-controlled key reads arbitrary shelf entries
28
+ with shelve.open("/var/cache/app_cache") as db:
29
+ if key not in db:
30
+ raise HTTPException(status_code=404, detail="Not found")
31
+ value = db[key] # deserialized via pickle
32
+ return {"value": value}
33
+
34
+
35
+ @app.post("/tasks/restore")
36
+ async def restore_task_state(file: UploadFile = File(...)):
37
+ data = await file.read()
38
+ state = pickle.loads(data) # untrusted task state from client
39
+ return {"task_id": state.get("id"), "status": state.get("status")}
@@ -1,39 +1,39 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: critical
4
- # language: python
5
- # expected: pickle.load used with untrusted file upload and shelve with user-controlled key
6
-
7
- import pickle
8
- import shelve
9
- from fastapi import FastAPI, UploadFile, File, HTTPException
10
-
11
- app = FastAPI()
12
-
13
-
14
- @app.post("/models/load")
15
- async def load_model(file: UploadFile = File(...)):
16
- contents = await file.read()
17
- try:
18
- # User-uploaded .pkl file deserialized without any validation
19
- model = pickle.loads(contents)
20
- return {"model_type": type(model).__name__}
21
- except Exception as e:
22
- raise HTTPException(status_code=400, detail=str(e))
23
-
24
-
25
- @app.get("/cache/{key}")
26
- def get_from_cache(key: str):
27
- # shelve uses pickle internally — user-controlled key reads arbitrary shelf entries
28
- with shelve.open("/var/cache/app_cache") as db:
29
- if key not in db:
30
- raise HTTPException(status_code=404, detail="Not found")
31
- value = db[key] # deserialized via pickle
32
- return {"value": value}
33
-
34
-
35
- @app.post("/tasks/restore")
36
- async def restore_task_state(file: UploadFile = File(...)):
37
- data = await file.read()
38
- state = pickle.loads(data) # untrusted task state from client
39
- return {"task_id": state.get("id"), "status": state.get("status")}
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: critical
4
+ # language: python
5
+ # expected: pickle.load used with untrusted file upload and shelve with user-controlled key
6
+
7
+ import pickle
8
+ import shelve
9
+ from fastapi import FastAPI, UploadFile, File, HTTPException
10
+
11
+ app = FastAPI()
12
+
13
+
14
+ @app.post("/models/load")
15
+ async def load_model(file: UploadFile = File(...)):
16
+ contents = await file.read()
17
+ try:
18
+ # User-uploaded .pkl file deserialized without any validation
19
+ model = pickle.loads(contents)
20
+ return {"model_type": type(model).__name__}
21
+ except Exception as e:
22
+ raise HTTPException(status_code=400, detail=str(e))
23
+
24
+
25
+ @app.get("/cache/{key}")
26
+ def get_from_cache(key: str):
27
+ # shelve uses pickle internally — user-controlled key reads arbitrary shelf entries
28
+ with shelve.open("/var/cache/app_cache") as db:
29
+ if key not in db:
30
+ raise HTTPException(status_code=404, detail="Not found")
31
+ value = db[key] # deserialized via pickle
32
+ return {"value": value}
33
+
34
+
35
+ @app.post("/tasks/restore")
36
+ async def restore_task_state(file: UploadFile = File(...)):
37
+ data = await file.read()
38
+ state = pickle.loads(data) # untrusted task state from client
39
+ return {"task_id": state.get("id"), "status": state.get("status")}
@@ -1,39 +1,39 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: high
4
- # language: python
5
- # expected: marshal.loads and jsonpickle.decode used with untrusted data
6
-
7
- import marshal
8
- import jsonpickle
9
- from flask import Flask, request, jsonify
10
-
11
- app = Flask(__name__)
12
-
13
-
14
- @app.post("/code/load")
15
- def load_code():
16
- """Load a compiled Python code object from client."""
17
- data = request.get_data()
18
- # marshal.loads with user data can reconstruct code objects — arbitrary execution
19
- code_obj = marshal.loads(data)
20
- result = eval(code_obj)
21
- return jsonify({"result": str(result)})
22
-
23
-
24
- @app.post("/object/restore")
25
- def restore_object():
26
- payload = request.get_json()
27
- serialized = payload.get("object", "")
28
- # jsonpickle can deserialize arbitrary Python objects including those with __reduce__
29
- obj = jsonpickle.decode(serialized)
30
- return jsonify({"type": type(obj).__name__, "repr": repr(obj)})
31
-
32
-
33
- @app.post("/state/import")
34
- def import_state():
35
- body = request.get_json()
36
- state_json = body.get("state", "null")
37
- # jsonpickle.decode with py/object tags allows instantiation of arbitrary classes
38
- state = jsonpickle.decode(state_json, classes=None)
39
- return jsonify({"imported": True, "keys": list(state.keys()) if isinstance(state, dict) else []})
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: high
4
+ # language: python
5
+ # expected: marshal.loads and jsonpickle.decode used with untrusted data
6
+
7
+ import marshal
8
+ import jsonpickle
9
+ from flask import Flask, request, jsonify
10
+
11
+ app = Flask(__name__)
12
+
13
+
14
+ @app.post("/code/load")
15
+ def load_code():
16
+ """Load a compiled Python code object from client."""
17
+ data = request.get_data()
18
+ # marshal.loads with user data can reconstruct code objects — arbitrary execution
19
+ code_obj = marshal.loads(data)
20
+ result = eval(code_obj)
21
+ return jsonify({"result": str(result)})
22
+
23
+
24
+ @app.post("/object/restore")
25
+ def restore_object():
26
+ payload = request.get_json()
27
+ serialized = payload.get("object", "")
28
+ # jsonpickle can deserialize arbitrary Python objects including those with __reduce__
29
+ obj = jsonpickle.decode(serialized)
30
+ return jsonify({"type": type(obj).__name__, "repr": repr(obj)})
31
+
32
+
33
+ @app.post("/state/import")
34
+ def import_state():
35
+ body = request.get_json()
36
+ state_json = body.get("state", "null")
37
+ # jsonpickle.decode with py/object tags allows instantiation of arbitrary classes
38
+ state = jsonpickle.decode(state_json, classes=None)
39
+ return jsonify({"imported": True, "keys": list(state.keys()) if isinstance(state, dict) else []})
@@ -1,39 +1,39 @@
1
- # [CRUCIBLE-SEED]
2
- # category: deserialization
3
- # severity: high
4
- # language: python
5
- # expected: marshal.loads and jsonpickle.decode used with untrusted data
6
-
7
- import marshal
8
- import jsonpickle
9
- from flask import Flask, request, jsonify
10
-
11
- app = Flask(__name__)
12
-
13
-
14
- @app.post("/code/load")
15
- def load_code():
16
- """Load a compiled Python code object from client."""
17
- data = request.get_data()
18
- # marshal.loads with user data can reconstruct code objects — arbitrary execution
19
- code_obj = marshal.loads(data)
20
- result = eval(code_obj)
21
- return jsonify({"result": str(result)})
22
-
23
-
24
- @app.post("/object/restore")
25
- def restore_object():
26
- payload = request.get_json()
27
- serialized = payload.get("object", "")
28
- # jsonpickle can deserialize arbitrary Python objects including those with __reduce__
29
- obj = jsonpickle.decode(serialized)
30
- return jsonify({"type": type(obj).__name__, "repr": repr(obj)})
31
-
32
-
33
- @app.post("/state/import")
34
- def import_state():
35
- body = request.get_json()
36
- state_json = body.get("state", "null")
37
- # jsonpickle.decode with py/object tags allows instantiation of arbitrary classes
38
- state = jsonpickle.decode(state_json, classes=None)
39
- return jsonify({"imported": True, "keys": list(state.keys()) if isinstance(state, dict) else []})
1
+ # [CRUCIBLE-SEED]
2
+ # category: deserialization
3
+ # severity: high
4
+ # language: python
5
+ # expected: marshal.loads and jsonpickle.decode used with untrusted data
6
+
7
+ import marshal
8
+ import jsonpickle
9
+ from flask import Flask, request, jsonify
10
+
11
+ app = Flask(__name__)
12
+
13
+
14
+ @app.post("/code/load")
15
+ def load_code():
16
+ """Load a compiled Python code object from client."""
17
+ data = request.get_data()
18
+ # marshal.loads with user data can reconstruct code objects — arbitrary execution
19
+ code_obj = marshal.loads(data)
20
+ result = eval(code_obj)
21
+ return jsonify({"result": str(result)})
22
+
23
+
24
+ @app.post("/object/restore")
25
+ def restore_object():
26
+ payload = request.get_json()
27
+ serialized = payload.get("object", "")
28
+ # jsonpickle can deserialize arbitrary Python objects including those with __reduce__
29
+ obj = jsonpickle.decode(serialized)
30
+ return jsonify({"type": type(obj).__name__, "repr": repr(obj)})
31
+
32
+
33
+ @app.post("/state/import")
34
+ def import_state():
35
+ body = request.get_json()
36
+ state_json = body.get("state", "null")
37
+ # jsonpickle.decode with py/object tags allows instantiation of arbitrary classes
38
+ state = jsonpickle.decode(state_json, classes=None)
39
+ return jsonify({"imported": True, "keys": list(state.keys()) if isinstance(state, dict) else []})
@@ -1,38 +1,38 @@
1
- # [CRUCIBLE-SEED]
2
- # category: yaml_injection
3
- # severity: critical
4
- # language: python
5
- # expected: yaml.load() with untrusted input — arbitrary code execution via YAML deserialization
6
-
7
- import yaml
8
- from flask import Flask, request, jsonify
9
-
10
- app = Flask(__name__)
11
-
12
-
13
- @app.route("/config/upload", methods=["POST"])
14
- def upload_config():
15
- raw_yaml = request.data.decode("utf-8")
16
- # yaml.load without Loader= defaults to full deserialization — RCE possible
17
- # Attacker payload: "!!python/object/apply:os.system ['id']"
18
- config = yaml.load(raw_yaml)
19
- return jsonify({"loaded_keys": list(config.keys()) if isinstance(config, dict) else []})
20
-
21
-
22
- @app.route("/workflow/import", methods=["POST"])
23
- def import_workflow():
24
- yaml_content = request.get_json().get("yaml", "")
25
- # yaml.load with untrusted string
26
- workflow = yaml.load(yaml_content)
27
- steps = workflow.get("steps", []) if isinstance(workflow, dict) else []
28
- return jsonify({"steps": steps})
29
-
30
-
31
- @app.route("/settings/restore", methods=["POST"])
32
- def restore_settings():
33
- uploaded = request.files.get("settings")
34
- if not uploaded:
35
- return jsonify({"error": "No file"}), 400
36
- content = uploaded.read().decode("utf-8")
37
- settings = yaml.load(content) # unsafe loader
38
- return jsonify({"restored": True, "settings": settings})
1
+ # [CRUCIBLE-SEED]
2
+ # category: yaml_injection
3
+ # severity: critical
4
+ # language: python
5
+ # expected: yaml.load() with untrusted input — arbitrary code execution via YAML deserialization
6
+
7
+ import yaml
8
+ from flask import Flask, request, jsonify
9
+
10
+ app = Flask(__name__)
11
+
12
+
13
+ @app.route("/config/upload", methods=["POST"])
14
+ def upload_config():
15
+ raw_yaml = request.data.decode("utf-8")
16
+ # yaml.load without Loader= defaults to full deserialization — RCE possible
17
+ # Attacker payload: "!!python/object/apply:os.system ['id']"
18
+ config = yaml.load(raw_yaml)
19
+ return jsonify({"loaded_keys": list(config.keys()) if isinstance(config, dict) else []})
20
+
21
+
22
+ @app.route("/workflow/import", methods=["POST"])
23
+ def import_workflow():
24
+ yaml_content = request.get_json().get("yaml", "")
25
+ # yaml.load with untrusted string
26
+ workflow = yaml.load(yaml_content)
27
+ steps = workflow.get("steps", []) if isinstance(workflow, dict) else []
28
+ return jsonify({"steps": steps})
29
+
30
+
31
+ @app.route("/settings/restore", methods=["POST"])
32
+ def restore_settings():
33
+ uploaded = request.files.get("settings")
34
+ if not uploaded:
35
+ return jsonify({"error": "No file"}), 400
36
+ content = uploaded.read().decode("utf-8")
37
+ settings = yaml.load(content) # unsafe loader
38
+ return jsonify({"restored": True, "settings": settings})