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.
- package/LICENSE +21 -21
- package/README.md +355 -122
- package/dist/LICENSE +21 -21
- package/dist/README.md +355 -122
- package/dist/cli.js +2 -1
- package/dist/package.json +62 -63
- package/dist/packages/crucible/.golden/golden-master.json +413 -413
- package/dist/packages/crucible/banner.js +1 -1
- package/dist/packages/crucible/rule-loader.js +1 -1
- package/dist/packages/crucible/rules/code-scanner-core.json +233 -129
- package/dist/packages/crucible/rules/command-injection.json +411 -411
- package/dist/packages/crucible/rules/crypto-misuse.json +35 -35
- package/dist/packages/crucible/rules/deserialization.json +152 -152
- package/dist/packages/crucible/rules/env-injection.json +46 -46
- package/dist/packages/crucible/rules/eval-abuse.json +104 -104
- package/dist/packages/crucible/rules/file-upload.json +46 -46
- package/dist/packages/crucible/rules/hallucination.json +22 -22
- package/dist/packages/crucible/rules/hardcoded-secret.json +397 -397
- package/dist/packages/crucible/rules/hardcoded-url.json +13 -13
- package/dist/packages/crucible/rules/insecure-crypto.json +302 -302
- package/dist/packages/crucible/rules/integer-overflow.json +35 -35
- package/dist/packages/crucible/rules/log-injection.json +33 -33
- package/dist/packages/crucible/rules/mass-assignment.json +112 -112
- package/dist/packages/crucible/rules/open-redirect.json +196 -196
- package/dist/packages/crucible/rules/path-traversal.json +422 -422
- package/dist/packages/crucible/rules/prototype-pollution.json +22 -22
- package/dist/packages/crucible/rules/sql-injection.json +619 -597
- package/dist/packages/crucible/rules/ssrf.json +557 -557
- package/dist/packages/crucible/rules/timing-attack.json +55 -55
- package/dist/packages/crucible/rules/unsafe-block.json +24 -24
- package/dist/packages/crucible/rules/xss.json +663 -641
- package/dist/packages/crucible/rules/xxe.json +66 -66
- package/dist/packages/crucible/rules/yaml-deserialization.json +22 -22
- package/dist/packages/crucible/rules/yaml-injection.json +22 -22
- package/dist/packages/crucible/seeds/csharp/seed-001.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-002.cs +24 -24
- package/dist/packages/crucible/seeds/csharp/seed-003.cs +30 -30
- package/dist/packages/crucible/seeds/csharp/seed-004.cs +31 -31
- package/dist/packages/crucible/seeds/csharp/seed-005.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-006.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-007.cs +34 -34
- package/dist/packages/crucible/seeds/csharp/seed-008.cs +23 -23
- package/dist/packages/crucible/seeds/csharp/seed-009.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-010.cs +29 -29
- package/dist/packages/crucible/seeds/csharp/seed-011.cs +32 -32
- package/dist/packages/crucible/seeds/csharp/seed-012.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-013.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-014.cs +26 -26
- package/dist/packages/crucible/seeds/csharp/seed-015.cs +33 -33
- package/dist/packages/crucible/seeds/csharp/seed-016.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-017.cs +22 -22
- package/dist/packages/crucible/seeds/csharp/seed-018.cs +26 -26
- package/dist/packages/crucible/seeds/csharp/seed-019.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-020.cs +22 -22
- package/dist/packages/crucible/seeds/csharp/seed-021.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-022.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-023.cs +33 -33
- package/dist/packages/crucible/seeds/csharp/seed-024.cs +31 -31
- package/dist/packages/crucible/seeds/csharp/seed-025.cs +31 -31
- package/dist/packages/crucible/seeds/csharp/seed-026.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-027.cs +29 -29
- package/dist/packages/crucible/seeds/csharp/seed-028.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-029.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-030.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-031.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-032.cs +30 -30
- package/dist/packages/crucible/seeds/csharp/seed-033.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-034.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-035.cs +32 -32
- package/dist/packages/crucible/seeds/csharp/seed-036.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-037.cs +29 -29
- package/dist/packages/crucible/seeds/csharp/seed-038.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-039.cs +29 -29
- package/dist/packages/crucible/seeds/csharp/seed-040.cs +28 -28
- package/dist/packages/crucible/seeds/csharp/seed-041.cs +33 -33
- package/dist/packages/crucible/seeds/csharp/seed-042.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-043.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-044.cs +25 -25
- package/dist/packages/crucible/seeds/csharp/seed-045.cs +30 -30
- package/dist/packages/crucible/seeds/csharp/seed-046.cs +29 -29
- package/dist/packages/crucible/seeds/csharp/seed-047.cs +26 -26
- package/dist/packages/crucible/seeds/csharp/seed-048.cs +31 -31
- package/dist/packages/crucible/seeds/csharp/seed-049.cs +27 -27
- package/dist/packages/crucible/seeds/csharp/seed-050.cs +30 -30
- package/dist/packages/crucible/seeds/csharp/seed-051.cs +34 -34
- package/dist/packages/crucible/seeds/csharp/seed-052.cs +36 -36
- package/dist/packages/crucible/seeds/go/seed-001.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-002.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-003.go +31 -31
- package/dist/packages/crucible/seeds/go/seed-004.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-005.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-006.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-007.go +24 -24
- package/dist/packages/crucible/seeds/go/seed-008.go +25 -25
- package/dist/packages/crucible/seeds/go/seed-009.go +30 -30
- package/dist/packages/crucible/seeds/go/seed-010.go +35 -35
- package/dist/packages/crucible/seeds/go/seed-011.go +24 -24
- package/dist/packages/crucible/seeds/go/seed-012.go +24 -24
- package/dist/packages/crucible/seeds/go/seed-013.go +31 -31
- package/dist/packages/crucible/seeds/go/seed-014.go +35 -35
- package/dist/packages/crucible/seeds/go/seed-015.go +25 -25
- package/dist/packages/crucible/seeds/go/seed-016.go +19 -19
- package/dist/packages/crucible/seeds/go/seed-017.go +23 -23
- package/dist/packages/crucible/seeds/go/seed-018.go +23 -23
- package/dist/packages/crucible/seeds/go/seed-019.go +22 -22
- package/dist/packages/crucible/seeds/go/seed-020.go +31 -31
- package/dist/packages/crucible/seeds/go/seed-021.go +22 -22
- package/dist/packages/crucible/seeds/go/seed-022.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-023.go +26 -26
- package/dist/packages/crucible/seeds/go/seed-024.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-025.go +23 -23
- package/dist/packages/crucible/seeds/go/seed-026.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-027.go +26 -26
- package/dist/packages/crucible/seeds/go/seed-028.go +23 -23
- package/dist/packages/crucible/seeds/go/seed-029.go +28 -28
- package/dist/packages/crucible/seeds/go/seed-030.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-031.go +28 -28
- package/dist/packages/crucible/seeds/go/seed-032.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-033.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-034.go +22 -22
- package/dist/packages/crucible/seeds/go/seed-035.go +32 -32
- package/dist/packages/crucible/seeds/go/seed-036.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-037.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-038.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-039.go +26 -26
- package/dist/packages/crucible/seeds/go/seed-040.go +37 -37
- package/dist/packages/crucible/seeds/go/seed-041.go +23 -23
- package/dist/packages/crucible/seeds/go/seed-042.go +32 -32
- package/dist/packages/crucible/seeds/go/seed-043.go +35 -35
- package/dist/packages/crucible/seeds/go/seed-044.go +25 -25
- package/dist/packages/crucible/seeds/go/seed-045.go +26 -26
- package/dist/packages/crucible/seeds/go/seed-046.go +34 -34
- package/dist/packages/crucible/seeds/go/seed-047.go +26 -26
- package/dist/packages/crucible/seeds/go/seed-048.go +29 -29
- package/dist/packages/crucible/seeds/go/seed-049.go +24 -24
- package/dist/packages/crucible/seeds/go/seed-050.go +27 -27
- package/dist/packages/crucible/seeds/go/seed-051.go +38 -38
- package/dist/packages/crucible/seeds/go/seed-052.go +27 -27
- package/dist/packages/crucible/seeds/java/seed-001.java +23 -23
- package/dist/packages/crucible/seeds/java/seed-002.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-003.java +28 -28
- package/dist/packages/crucible/seeds/java/seed-004.java +26 -26
- package/dist/packages/crucible/seeds/java/seed-005.java +33 -33
- package/dist/packages/crucible/seeds/java/seed-006.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-007.java +21 -21
- package/dist/packages/crucible/seeds/java/seed-008.java +29 -29
- package/dist/packages/crucible/seeds/java/seed-009.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-010.java +30 -30
- package/dist/packages/crucible/seeds/java/seed-011.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-012.java +20 -20
- package/dist/packages/crucible/seeds/java/seed-013.java +26 -26
- package/dist/packages/crucible/seeds/java/seed-014.java +23 -23
- package/dist/packages/crucible/seeds/java/seed-015.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-016.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-017.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-018.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-019.java +38 -38
- package/dist/packages/crucible/seeds/java/seed-020.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-021.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-022.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-023.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-024.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-025.java +27 -27
- package/dist/packages/crucible/seeds/java/seed-026.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-027.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-028.java +21 -21
- package/dist/packages/crucible/seeds/java/seed-029.java +28 -28
- package/dist/packages/crucible/seeds/java/seed-030.java +27 -27
- package/dist/packages/crucible/seeds/java/seed-031.java +23 -23
- package/dist/packages/crucible/seeds/java/seed-032.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-033.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-034.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-035.java +29 -29
- package/dist/packages/crucible/seeds/java/seed-036.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-037.java +30 -30
- package/dist/packages/crucible/seeds/java/seed-038.java +29 -29
- package/dist/packages/crucible/seeds/java/seed-039.java +26 -26
- package/dist/packages/crucible/seeds/java/seed-040.java +31 -31
- package/dist/packages/crucible/seeds/java/seed-041.java +20 -20
- package/dist/packages/crucible/seeds/java/seed-042.java +26 -26
- package/dist/packages/crucible/seeds/java/seed-043.java +31 -31
- package/dist/packages/crucible/seeds/java/seed-044.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-045.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-046.java +22 -22
- package/dist/packages/crucible/seeds/java/seed-047.java +26 -26
- package/dist/packages/crucible/seeds/java/seed-048.java +24 -24
- package/dist/packages/crucible/seeds/java/seed-049.java +28 -28
- package/dist/packages/crucible/seeds/java/seed-050.java +29 -29
- package/dist/packages/crucible/seeds/java/seed-051.java +25 -25
- package/dist/packages/crucible/seeds/java/seed-052.java +32 -32
- package/dist/packages/crucible/seeds/js/seed-001.js +27 -27
- package/dist/packages/crucible/seeds/js/seed-002.js +28 -28
- package/dist/packages/crucible/seeds/js/seed-003.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-004.js +28 -28
- package/dist/packages/crucible/seeds/js/seed-005.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-006.js +28 -28
- package/dist/packages/crucible/seeds/js/seed-007.js +26 -26
- package/dist/packages/crucible/seeds/js/seed-008.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-009.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-010.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-011.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-012.js +32 -32
- package/dist/packages/crucible/seeds/js/seed-013.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-014.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-015.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-016.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-017.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-018.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-019.js +32 -32
- package/dist/packages/crucible/seeds/js/seed-020.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-021.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-022.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-023.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-024.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-025.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-026.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-027.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-028.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-029.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-030.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-031.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-032.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-033.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-034.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-035.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-036.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-037.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-038.js +31 -31
- package/dist/packages/crucible/seeds/js/seed-039.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-040.js +35 -35
- package/dist/packages/crucible/seeds/js/seed-041.js +32 -32
- package/dist/packages/crucible/seeds/js/seed-042.js +32 -32
- package/dist/packages/crucible/seeds/js/seed-043.js +27 -27
- package/dist/packages/crucible/seeds/js/seed-044.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-045.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-046.js +33 -33
- package/dist/packages/crucible/seeds/js/seed-047.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-048.js +29 -29
- package/dist/packages/crucible/seeds/js/seed-049.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-050.js +34 -34
- package/dist/packages/crucible/seeds/js/seed-051.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-052.js +30 -30
- package/dist/packages/crucible/seeds/js/seed-053.js +26 -26
- package/dist/packages/crucible/seeds/js/seed-054.js +35 -35
- package/dist/packages/crucible/seeds/js/seed-055.js +33 -33
- package/dist/packages/crucible/seeds/kotlin/seed-001.kt +24 -24
- package/dist/packages/crucible/seeds/kotlin/seed-002.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-003.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-004.kt +24 -24
- package/dist/packages/crucible/seeds/kotlin/seed-005.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-006.kt +21 -21
- package/dist/packages/crucible/seeds/kotlin/seed-007.kt +23 -23
- package/dist/packages/crucible/seeds/kotlin/seed-008.kt +25 -25
- package/dist/packages/crucible/seeds/kotlin/seed-009.kt +21 -21
- package/dist/packages/crucible/seeds/kotlin/seed-010.kt +28 -28
- package/dist/packages/crucible/seeds/kotlin/seed-011.kt +22 -22
- package/dist/packages/crucible/seeds/kotlin/seed-012.kt +25 -25
- package/dist/packages/crucible/seeds/kotlin/seed-013.kt +30 -30
- package/dist/packages/crucible/seeds/kotlin/seed-014.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-015.kt +24 -24
- package/dist/packages/crucible/seeds/kotlin/seed-016.kt +28 -28
- package/dist/packages/crucible/seeds/kotlin/seed-017.kt +33 -33
- package/dist/packages/crucible/seeds/kotlin/seed-018.kt +31 -31
- package/dist/packages/crucible/seeds/kotlin/seed-019.kt +28 -28
- package/dist/packages/crucible/seeds/kotlin/seed-020.kt +31 -31
- package/dist/packages/crucible/seeds/kotlin/seed-021.kt +34 -34
- package/dist/packages/crucible/seeds/kotlin/seed-022.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-023.kt +20 -20
- package/dist/packages/crucible/seeds/kotlin/seed-024.kt +23 -23
- package/dist/packages/crucible/seeds/kotlin/seed-025.kt +23 -23
- package/dist/packages/crucible/seeds/kotlin/seed-026.kt +26 -26
- package/dist/packages/crucible/seeds/kotlin/seed-027.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-028.kt +24 -24
- package/dist/packages/crucible/seeds/kotlin/seed-029.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-030.kt +26 -26
- package/dist/packages/crucible/seeds/kotlin/seed-031.kt +28 -28
- package/dist/packages/crucible/seeds/kotlin/seed-032.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-033.kt +30 -30
- package/dist/packages/crucible/seeds/kotlin/seed-034.kt +26 -26
- package/dist/packages/crucible/seeds/kotlin/seed-035.kt +33 -33
- package/dist/packages/crucible/seeds/kotlin/seed-036.kt +25 -25
- package/dist/packages/crucible/seeds/kotlin/seed-037.kt +26 -26
- package/dist/packages/crucible/seeds/kotlin/seed-038.kt +25 -25
- package/dist/packages/crucible/seeds/kotlin/seed-039.kt +29 -29
- package/dist/packages/crucible/seeds/kotlin/seed-040.kt +28 -28
- package/dist/packages/crucible/seeds/kotlin/seed-041.kt +31 -31
- package/dist/packages/crucible/seeds/kotlin/seed-042.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-043.kt +26 -26
- package/dist/packages/crucible/seeds/kotlin/seed-044.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-045.kt +27 -27
- package/dist/packages/crucible/seeds/kotlin/seed-046.kt +33 -33
- package/dist/packages/crucible/seeds/kotlin/seed-047.kt +32 -32
- package/dist/packages/crucible/seeds/kotlin/seed-048.kt +20 -20
- package/dist/packages/crucible/seeds/kotlin/seed-049.kt +23 -23
- package/dist/packages/crucible/seeds/kotlin/seed-050.kt +19 -19
- package/dist/packages/crucible/seeds/php/seed-001.php +23 -23
- package/dist/packages/crucible/seeds/php/seed-002.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-003.php +25 -25
- package/dist/packages/crucible/seeds/php/seed-004.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-005.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-006.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-007.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-008.php +19 -19
- package/dist/packages/crucible/seeds/php/seed-009.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-010.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-011.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-012.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-013.php +23 -23
- package/dist/packages/crucible/seeds/php/seed-014.php +20 -20
- package/dist/packages/crucible/seeds/php/seed-015.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-016.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-017.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-018.php +17 -17
- package/dist/packages/crucible/seeds/php/seed-019.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-020.php +19 -19
- package/dist/packages/crucible/seeds/php/seed-021.php +22 -22
- package/dist/packages/crucible/seeds/php/seed-022.php +15 -15
- package/dist/packages/crucible/seeds/php/seed-023.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-024.php +22 -22
- package/dist/packages/crucible/seeds/php/seed-025.php +20 -20
- package/dist/packages/crucible/seeds/php/seed-026.php +22 -22
- package/dist/packages/crucible/seeds/php/seed-027.php +15 -15
- package/dist/packages/crucible/seeds/php/seed-028.php +15 -15
- package/dist/packages/crucible/seeds/php/seed-029.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-030.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-031.php +23 -23
- package/dist/packages/crucible/seeds/php/seed-032.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-033.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-034.php +24 -24
- package/dist/packages/crucible/seeds/php/seed-035.php +22 -22
- package/dist/packages/crucible/seeds/php/seed-036.php +17 -17
- package/dist/packages/crucible/seeds/php/seed-037.php +19 -19
- package/dist/packages/crucible/seeds/php/seed-038.php +20 -20
- package/dist/packages/crucible/seeds/php/seed-039.php +15 -15
- package/dist/packages/crucible/seeds/php/seed-040.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-041.php +20 -20
- package/dist/packages/crucible/seeds/php/seed-042.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-043.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-044.php +25 -25
- package/dist/packages/crucible/seeds/php/seed-045.php +25 -25
- package/dist/packages/crucible/seeds/php/seed-046.php +20 -20
- package/dist/packages/crucible/seeds/php/seed-047.php +21 -21
- package/dist/packages/crucible/seeds/php/seed-048.php +19 -19
- package/dist/packages/crucible/seeds/php/seed-049.php +18 -18
- package/dist/packages/crucible/seeds/php/seed-050.php +20 -20
- package/dist/packages/crucible/seeds/python/seed-001.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-002.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-003.py +31 -31
- package/dist/packages/crucible/seeds/python/seed-004.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-005.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-006.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-007.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-008.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-009.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-010.py +42 -42
- package/dist/packages/crucible/seeds/python/seed-011.py +30 -30
- package/dist/packages/crucible/seeds/python/seed-012.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-013.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-014.py +40 -40
- package/dist/packages/crucible/seeds/python/seed-015.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-016.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-017.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-018.py +30 -30
- package/dist/packages/crucible/seeds/python/seed-019.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-020.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-021 2.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-021.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-022 2.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-022.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-023 2.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-023.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-024 2.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-024.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-025 2.py +40 -40
- package/dist/packages/crucible/seeds/python/seed-025.py +40 -40
- package/dist/packages/crucible/seeds/python/seed-026 2.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-026.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-027 2.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-027.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-028 2.py +42 -42
- package/dist/packages/crucible/seeds/python/seed-028.py +42 -42
- package/dist/packages/crucible/seeds/python/seed-029.py +42 -42
- package/dist/packages/crucible/seeds/python/seed-030 2.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-030.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-031 2.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-031.py +34 -34
- package/dist/packages/crucible/seeds/python/seed-032.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-033.py +32 -32
- package/dist/packages/crucible/seeds/python/seed-034.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-035.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-036 2.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-036.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-037 2.py +41 -41
- package/dist/packages/crucible/seeds/python/seed-037.py +41 -41
- package/dist/packages/crucible/seeds/python/seed-038 2.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-038.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-039 2.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-039.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-040 2.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-040.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-041 2.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-041.py +37 -37
- package/dist/packages/crucible/seeds/python/seed-042 2.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-042.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-043 2.py +32 -32
- package/dist/packages/crucible/seeds/python/seed-043.py +32 -32
- package/dist/packages/crucible/seeds/python/seed-044 2.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-044.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-045 2.py +36 -36
- package/dist/packages/crucible/seeds/python/seed-045.py +36 -36
- package/dist/packages/crucible/seeds/python/seed-046 2.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-046.py +33 -33
- package/dist/packages/crucible/seeds/python/seed-047 2.py +44 -44
- package/dist/packages/crucible/seeds/python/seed-047.py +44 -44
- package/dist/packages/crucible/seeds/python/seed-048 2.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-048.py +35 -35
- package/dist/packages/crucible/seeds/python/seed-049 2.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-049.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-050 2.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-050.py +39 -39
- package/dist/packages/crucible/seeds/python/seed-051 2.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-051.py +38 -38
- package/dist/packages/crucible/seeds/python/seed-052 2.py +41 -41
- package/dist/packages/crucible/seeds/python/seed-052.py +41 -41
- package/dist/packages/crucible/seeds/ruby/seed-001 2.rb +15 -15
- package/dist/packages/crucible/seeds/ruby/seed-001.rb +15 -15
- package/dist/packages/crucible/seeds/ruby/seed-002 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-002.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-003 2.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-003.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-004 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-004.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-005 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-005.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-006 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-006.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-007 2.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-007.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-008 2.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-008.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-009 2.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-009.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-010 2.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-010.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-011 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-011.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-012 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-012.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-013 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-013.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-014 2.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-014.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-015 2.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-015.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-016 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-016.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-017 2.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-017.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-018 2.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-018.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-019 2.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-019.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-020 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-020.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-021 2.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-021.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-022 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-022.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-023 2.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-023.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-024 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-024.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-025 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-025.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-026 2.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-026.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-027 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-027.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-028 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-028.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-029 2.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-029.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-030 2.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-030.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-031 2.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-031.rb +17 -17
- package/dist/packages/crucible/seeds/ruby/seed-032 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-032.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-033 2.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-033.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-034 2.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-034.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-035 2.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-035.rb +19 -19
- package/dist/packages/crucible/seeds/ruby/seed-036 2.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-036.rb +18 -18
- package/dist/packages/crucible/seeds/ruby/seed-037 2.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-037.rb +21 -21
- package/dist/packages/crucible/seeds/ruby/seed-038 2.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-038.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-039 2.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-039.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-040 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-040.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-041 2.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-041.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-042 2.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-042.rb +25 -25
- package/dist/packages/crucible/seeds/ruby/seed-043 2.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-043.rb +23 -23
- package/dist/packages/crucible/seeds/ruby/seed-044 2.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-044.rb +16 -16
- package/dist/packages/crucible/seeds/ruby/seed-045 2.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-045.rb +22 -22
- package/dist/packages/crucible/seeds/ruby/seed-046 2.rb +27 -27
- package/dist/packages/crucible/seeds/ruby/seed-046.rb +27 -27
- package/dist/packages/crucible/seeds/ruby/seed-047 2.rb +26 -26
- package/dist/packages/crucible/seeds/ruby/seed-047.rb +26 -26
- package/dist/packages/crucible/seeds/ruby/seed-048 2.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-048.rb +24 -24
- package/dist/packages/crucible/seeds/ruby/seed-049 2.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-049.rb +20 -20
- package/dist/packages/crucible/seeds/ruby/seed-050 2.rb +27 -27
- package/dist/packages/crucible/seeds/ruby/seed-050.rb +27 -27
- package/dist/packages/crucible/seeds/rust/seed-001 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-001.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-002 2.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-002.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-003 2.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-003.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-004 2.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-004.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-005 2.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-005.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-006 2.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-006.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-007 2.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-007.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-008 2.rs +19 -19
- package/dist/packages/crucible/seeds/rust/seed-008.rs +19 -19
- package/dist/packages/crucible/seeds/rust/seed-009 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-009.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-010 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-010.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-011 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-011.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-012 2.rs +31 -31
- package/dist/packages/crucible/seeds/rust/seed-012.rs +31 -31
- package/dist/packages/crucible/seeds/rust/seed-013 2.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-013.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-014 2.rs +30 -30
- package/dist/packages/crucible/seeds/rust/seed-014.rs +30 -30
- package/dist/packages/crucible/seeds/rust/seed-015 2.rs +33 -33
- package/dist/packages/crucible/seeds/rust/seed-015.rs +33 -33
- package/dist/packages/crucible/seeds/rust/seed-016 2.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-016.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-017 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-017.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-018 2.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-018.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-019 2.rs +36 -36
- package/dist/packages/crucible/seeds/rust/seed-019.rs +36 -36
- package/dist/packages/crucible/seeds/rust/seed-020 2.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-020.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-021 2.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-021.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-022 2.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-022.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-023 2.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-023.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-024 2.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-024.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-025 2.rs +29 -29
- package/dist/packages/crucible/seeds/rust/seed-025.rs +29 -29
- package/dist/packages/crucible/seeds/rust/seed-026 2.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-026.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-027 2.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-027.rs +24 -24
- package/dist/packages/crucible/seeds/rust/seed-028 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-028.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-029 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-029.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-030 2.rs +30 -30
- package/dist/packages/crucible/seeds/rust/seed-030.rs +30 -30
- package/dist/packages/crucible/seeds/rust/seed-031 2.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-031.rs +22 -22
- package/dist/packages/crucible/seeds/rust/seed-032 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-032.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-033 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-033.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-034 2.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-034.rs +20 -20
- package/dist/packages/crucible/seeds/rust/seed-035 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-035.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-036 2.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-036.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-037 2.rs +31 -31
- package/dist/packages/crucible/seeds/rust/seed-037.rs +31 -31
- package/dist/packages/crucible/seeds/rust/seed-038 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-038.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-039 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-039.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-040 2.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-040.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-041 2.rs +32 -32
- package/dist/packages/crucible/seeds/rust/seed-041.rs +32 -32
- package/dist/packages/crucible/seeds/rust/seed-042 2.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-042.rs +27 -27
- package/dist/packages/crucible/seeds/rust/seed-043 2.rs +29 -29
- package/dist/packages/crucible/seeds/rust/seed-043.rs +29 -29
- package/dist/packages/crucible/seeds/rust/seed-044 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-044.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-045 2.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-045.rs +28 -28
- package/dist/packages/crucible/seeds/rust/seed-046 2.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-046.rs +25 -25
- package/dist/packages/crucible/seeds/rust/seed-047 2.rs +34 -34
- package/dist/packages/crucible/seeds/rust/seed-047.rs +34 -34
- package/dist/packages/crucible/seeds/rust/seed-048 2.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-048.rs +21 -21
- package/dist/packages/crucible/seeds/rust/seed-049 2.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-049.rs +26 -26
- package/dist/packages/crucible/seeds/rust/seed-050 2.rs +23 -23
- package/dist/packages/crucible/seeds/rust/seed-050.rs +23 -23
- package/dist/packages/crucible/seeds/ts/seed-001 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-001.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-002 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-002.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-003 2.ts +28 -28
- package/dist/packages/crucible/seeds/ts/seed-003.ts +28 -28
- package/dist/packages/crucible/seeds/ts/seed-004 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-004.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-005 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-005.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-006 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-006.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-007 2.ts +28 -28
- package/dist/packages/crucible/seeds/ts/seed-007.ts +28 -28
- package/dist/packages/crucible/seeds/ts/seed-008 2.ts +40 -40
- package/dist/packages/crucible/seeds/ts/seed-008.ts +40 -40
- package/dist/packages/crucible/seeds/ts/seed-009 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-009.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-010 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-010.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-011 2.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-011.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-012 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-012.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-013 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-013.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-014 2.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-014.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-015 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-015.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-016 2.ts +37 -37
- package/dist/packages/crucible/seeds/ts/seed-016.ts +37 -37
- package/dist/packages/crucible/seeds/ts/seed-017 2.ts +44 -44
- package/dist/packages/crucible/seeds/ts/seed-017.ts +44 -44
- package/dist/packages/crucible/seeds/ts/seed-018 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-018.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-019 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-019.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-020 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-020.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-021 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-021.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-022 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-022.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-023 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-023.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-024 2.ts +35 -35
- package/dist/packages/crucible/seeds/ts/seed-024.ts +35 -35
- package/dist/packages/crucible/seeds/ts/seed-025 2.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-025.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-026 2.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-026.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-027 2.ts +30 -30
- package/dist/packages/crucible/seeds/ts/seed-027.ts +30 -30
- package/dist/packages/crucible/seeds/ts/seed-028 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-028.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-029 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-029.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-030 2.ts +37 -37
- package/dist/packages/crucible/seeds/ts/seed-030.ts +37 -37
- package/dist/packages/crucible/seeds/ts/seed-031 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-031.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-032 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-032.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-033 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-033.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-034 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-034.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-035 2.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-035.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-036 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-036.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-037 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-037.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-038 2.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-038.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-039 2.ts +35 -35
- package/dist/packages/crucible/seeds/ts/seed-039.ts +35 -35
- package/dist/packages/crucible/seeds/ts/seed-040 2.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-040.ts +31 -31
- package/dist/packages/crucible/seeds/ts/seed-041 2.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-041.ts +29 -29
- package/dist/packages/crucible/seeds/ts/seed-042 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-042.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-043 2.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-043.ts +32 -32
- package/dist/packages/crucible/seeds/ts/seed-044 2.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-044.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-045 2.ts +39 -39
- package/dist/packages/crucible/seeds/ts/seed-045.ts +39 -39
- package/dist/packages/crucible/seeds/ts/seed-046 2.ts +41 -41
- package/dist/packages/crucible/seeds/ts/seed-046.ts +41 -41
- package/dist/packages/crucible/seeds/ts/seed-047 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-047.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-048 2.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-048.ts +33 -33
- package/dist/packages/crucible/seeds/ts/seed-049 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-049.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-050 2.ts +41 -41
- package/dist/packages/crucible/seeds/ts/seed-050.ts +41 -41
- package/dist/packages/crucible/seeds/ts/seed-051 2.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-051.ts +34 -34
- package/dist/packages/crucible/seeds/ts/seed-052 2.ts +36 -36
- package/dist/packages/crucible/seeds/ts/seed-052.ts +36 -36
- package/dist/packages/scanner/ai-confidence-scorer.js +1 -1
- package/dist/packages/scanner/baseline-manager.js +1 -1
- package/dist/packages/scanner/code-scanner.js +1 -1
- package/dist/packages/scanner/copy-paste-detector.js +1 -1
- package/dist/packages/scanner/drift-detector.js +1 -1
- package/dist/packages/scanner/export-verifier.js +1 -1
- package/dist/packages/scanner/ghost-code-detector.js +1 -1
- package/dist/packages/scanner/hallucination-detector.js +1 -1
- package/dist/packages/scanner/license-manager.js +1 -1
- package/dist/packages/scanner/monitor-service.js +1 -1
- package/dist/packages/scanner/taint-tracker.js +1 -1
- package/package.json +62 -63
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: path_traversal
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Path traversal via Paths.get with user input enabling directory escape
|
|
6
|
-
|
|
7
|
-
import java.io.*;
|
|
8
|
-
import java.nio.file.*;
|
|
9
|
-
import javax.servlet.http.*;
|
|
10
|
-
|
|
11
|
-
public class TemplateServlet extends HttpServlet {
|
|
12
|
-
private static final Path TEMPLATE_DIR = Paths.get("/opt/app/templates");
|
|
13
|
-
|
|
14
|
-
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
15
|
-
throws IOException {
|
|
16
|
-
String templateName = req.getParameter("template");
|
|
17
|
-
// Vulnerable: resolve without startsWith check allows traversal
|
|
18
|
-
Path templatePath = TEMPLATE_DIR.resolve(templateName);
|
|
19
|
-
byte[] content = Files.readAllBytes(templatePath);
|
|
20
|
-
resp.setContentType("text/html");
|
|
21
|
-
resp.getOutputStream().write(content);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: path_traversal
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Path traversal via Paths.get with user input enabling directory escape
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.nio.file.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class TemplateServlet extends HttpServlet {
|
|
12
|
+
private static final Path TEMPLATE_DIR = Paths.get("/opt/app/templates");
|
|
13
|
+
|
|
14
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
15
|
+
throws IOException {
|
|
16
|
+
String templateName = req.getParameter("template");
|
|
17
|
+
// Vulnerable: resolve without startsWith check allows traversal
|
|
18
|
+
Path templatePath = TEMPLATE_DIR.resolve(templateName);
|
|
19
|
+
byte[] content = Files.readAllBytes(templatePath);
|
|
20
|
+
resp.setContentType("text/html");
|
|
21
|
+
resp.getOutputStream().write(content);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: path_traversal
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Path traversal in file delete endpoint with user-controlled filename
|
|
6
|
-
|
|
7
|
-
import java.io.*;
|
|
8
|
-
import javax.servlet.http.*;
|
|
9
|
-
|
|
10
|
-
public class FileManagerServlet extends HttpServlet {
|
|
11
|
-
private static final String UPLOAD_DIR = "/var/uploads/";
|
|
12
|
-
|
|
13
|
-
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
-
throws IOException {
|
|
15
|
-
String filename = req.getParameter("name");
|
|
16
|
-
// Vulnerable: attacker can delete arbitrary files via ../
|
|
17
|
-
File target = new File(UPLOAD_DIR + filename);
|
|
18
|
-
boolean deleted = target.delete();
|
|
19
|
-
resp.setContentType("application/json");
|
|
20
|
-
resp.getWriter().println("{\"deleted\":" + deleted + "}");
|
|
21
|
-
}
|
|
22
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: path_traversal
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Path traversal in file delete endpoint with user-controlled filename
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
|
|
10
|
+
public class FileManagerServlet extends HttpServlet {
|
|
11
|
+
private static final String UPLOAD_DIR = "/var/uploads/";
|
|
12
|
+
|
|
13
|
+
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws IOException {
|
|
15
|
+
String filename = req.getParameter("name");
|
|
16
|
+
// Vulnerable: attacker can delete arbitrary files via ../
|
|
17
|
+
File target = new File(UPLOAD_DIR + filename);
|
|
18
|
+
boolean deleted = target.delete();
|
|
19
|
+
resp.setContentType("application/json");
|
|
20
|
+
resp.getWriter().println("{\"deleted\":" + deleted + "}");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: path_traversal
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Path traversal via file write using user-supplied output path
|
|
6
|
-
|
|
7
|
-
import java.io.*;
|
|
8
|
-
import javax.servlet.http.*;
|
|
9
|
-
|
|
10
|
-
public class ReportWriterServlet extends HttpServlet {
|
|
11
|
-
private static final String REPORT_BASE = "/var/reports/";
|
|
12
|
-
|
|
13
|
-
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
-
throws IOException {
|
|
15
|
-
String reportName = req.getParameter("reportName");
|
|
16
|
-
String content = req.getParameter("content");
|
|
17
|
-
// Vulnerable: reportName can traverse directories (../../etc/cron.d/backdoor)
|
|
18
|
-
File out = new File(REPORT_BASE + reportName + ".txt");
|
|
19
|
-
try (FileWriter fw = new FileWriter(out)) {
|
|
20
|
-
fw.write(content);
|
|
21
|
-
}
|
|
22
|
-
resp.getWriter().println("Report saved.");
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: path_traversal
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Path traversal via file write using user-supplied output path
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
|
|
10
|
+
public class ReportWriterServlet extends HttpServlet {
|
|
11
|
+
private static final String REPORT_BASE = "/var/reports/";
|
|
12
|
+
|
|
13
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws IOException {
|
|
15
|
+
String reportName = req.getParameter("reportName");
|
|
16
|
+
String content = req.getParameter("content");
|
|
17
|
+
// Vulnerable: reportName can traverse directories (../../etc/cron.d/backdoor)
|
|
18
|
+
File out = new File(REPORT_BASE + reportName + ".txt");
|
|
19
|
+
try (FileWriter fw = new FileWriter(out)) {
|
|
20
|
+
fw.write(content);
|
|
21
|
+
}
|
|
22
|
+
resp.getWriter().println("Report saved.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: insecure_crypto
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: MD5 used for password hashing via MessageDigest
|
|
6
|
-
|
|
7
|
-
import java.security.MessageDigest;
|
|
8
|
-
import java.security.NoSuchAlgorithmException;
|
|
9
|
-
|
|
10
|
-
public class PasswordHasher {
|
|
11
|
-
public static String hashPassword(String password) throws NoSuchAlgorithmException {
|
|
12
|
-
// Vulnerable: MD5 is cryptographically broken and unsalted
|
|
13
|
-
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
14
|
-
byte[] hash = md.digest(password.getBytes());
|
|
15
|
-
StringBuilder sb = new StringBuilder();
|
|
16
|
-
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
17
|
-
return sb.toString();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
public static boolean verifyPassword(String password, String storedHash)
|
|
21
|
-
throws NoSuchAlgorithmException {
|
|
22
|
-
return hashPassword(password).equals(storedHash);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: MD5 used for password hashing via MessageDigest
|
|
6
|
+
|
|
7
|
+
import java.security.MessageDigest;
|
|
8
|
+
import java.security.NoSuchAlgorithmException;
|
|
9
|
+
|
|
10
|
+
public class PasswordHasher {
|
|
11
|
+
public static String hashPassword(String password) throws NoSuchAlgorithmException {
|
|
12
|
+
// Vulnerable: MD5 is cryptographically broken and unsalted
|
|
13
|
+
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
14
|
+
byte[] hash = md.digest(password.getBytes());
|
|
15
|
+
StringBuilder sb = new StringBuilder();
|
|
16
|
+
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
17
|
+
return sb.toString();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public static boolean verifyPassword(String password, String storedHash)
|
|
21
|
+
throws NoSuchAlgorithmException {
|
|
22
|
+
return hashPassword(password).equals(storedHash);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: insecure_crypto
|
|
3
|
-
// severity: critical
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: DES cipher used for data encryption (56-bit key, broken algorithm)
|
|
6
|
-
|
|
7
|
-
import javax.crypto.*;
|
|
8
|
-
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
-
import java.util.Base64;
|
|
10
|
-
|
|
11
|
-
public class DataEncryptor {
|
|
12
|
-
// Vulnerable: DES uses only 56-bit key, broken since 1999
|
|
13
|
-
private static final String ALGORITHM = "DES";
|
|
14
|
-
private static final byte[] KEY_BYTES = "8byteKey".getBytes();
|
|
15
|
-
|
|
16
|
-
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
-
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
18
|
-
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
19
|
-
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
-
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public static String decrypt(String ciphertext) throws Exception {
|
|
24
|
-
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
25
|
-
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
26
|
-
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
-
return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)));
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: DES cipher used for data encryption (56-bit key, broken algorithm)
|
|
6
|
+
|
|
7
|
+
import javax.crypto.*;
|
|
8
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
+
import java.util.Base64;
|
|
10
|
+
|
|
11
|
+
public class DataEncryptor {
|
|
12
|
+
// Vulnerable: DES uses only 56-bit key, broken since 1999
|
|
13
|
+
private static final String ALGORITHM = "DES";
|
|
14
|
+
private static final byte[] KEY_BYTES = "8byteKey".getBytes();
|
|
15
|
+
|
|
16
|
+
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
+
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
18
|
+
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
19
|
+
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
+
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static String decrypt(String ciphertext) throws Exception {
|
|
24
|
+
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
25
|
+
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
26
|
+
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
+
return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: insecure_crypto
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: java.util.Random used for security token generation instead of SecureRandom
|
|
6
|
-
|
|
7
|
-
import java.util.Random;
|
|
8
|
-
|
|
9
|
-
public class TokenGenerator {
|
|
10
|
-
// Vulnerable: java.util.Random is not cryptographically secure
|
|
11
|
-
private static final Random RANDOM = new Random();
|
|
12
|
-
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
13
|
-
|
|
14
|
-
public static String generateSessionToken(int length) {
|
|
15
|
-
StringBuilder sb = new StringBuilder(length);
|
|
16
|
-
for (int i = 0; i < length; i++) {
|
|
17
|
-
sb.append(CHARS.charAt(RANDOM.nextInt(CHARS.length())));
|
|
18
|
-
}
|
|
19
|
-
return sb.toString();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public static String generatePasswordResetToken() {
|
|
23
|
-
return generateSessionToken(32);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: java.util.Random used for security token generation instead of SecureRandom
|
|
6
|
+
|
|
7
|
+
import java.util.Random;
|
|
8
|
+
|
|
9
|
+
public class TokenGenerator {
|
|
10
|
+
// Vulnerable: java.util.Random is not cryptographically secure
|
|
11
|
+
private static final Random RANDOM = new Random();
|
|
12
|
+
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
13
|
+
|
|
14
|
+
public static String generateSessionToken(int length) {
|
|
15
|
+
StringBuilder sb = new StringBuilder(length);
|
|
16
|
+
for (int i = 0; i < length; i++) {
|
|
17
|
+
sb.append(CHARS.charAt(RANDOM.nextInt(CHARS.length())));
|
|
18
|
+
}
|
|
19
|
+
return sb.toString();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public static String generatePasswordResetToken() {
|
|
23
|
+
return generateSessionToken(32);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: insecure_crypto
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: SHA-1 used for HMAC signature and MD5 for file integrity check
|
|
6
|
-
|
|
7
|
-
import java.security.MessageDigest;
|
|
8
|
-
import javax.crypto.Mac;
|
|
9
|
-
import javax.crypto.spec.SecretKeySpec;
|
|
10
|
-
|
|
11
|
-
public class IntegrityChecker {
|
|
12
|
-
public static String computeHmac(String data, String key) throws Exception {
|
|
13
|
-
// Vulnerable: HMAC-SHA1 is weak for new applications
|
|
14
|
-
Mac mac = Mac.getInstance("HmacSHA1");
|
|
15
|
-
mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"));
|
|
16
|
-
byte[] raw = mac.doFinal(data.getBytes());
|
|
17
|
-
StringBuilder sb = new StringBuilder();
|
|
18
|
-
for (byte b : raw) sb.append(String.format("%02x", b));
|
|
19
|
-
return sb.toString();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public static String md5File(byte[] fileBytes) throws Exception {
|
|
23
|
-
// Vulnerable: MD5 used for file integrity — collision attacks possible
|
|
24
|
-
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
25
|
-
byte[] hash = md.digest(fileBytes);
|
|
26
|
-
StringBuilder sb = new StringBuilder();
|
|
27
|
-
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
28
|
-
return sb.toString();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: SHA-1 used for HMAC signature and MD5 for file integrity check
|
|
6
|
+
|
|
7
|
+
import java.security.MessageDigest;
|
|
8
|
+
import javax.crypto.Mac;
|
|
9
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
10
|
+
|
|
11
|
+
public class IntegrityChecker {
|
|
12
|
+
public static String computeHmac(String data, String key) throws Exception {
|
|
13
|
+
// Vulnerable: HMAC-SHA1 is weak for new applications
|
|
14
|
+
Mac mac = Mac.getInstance("HmacSHA1");
|
|
15
|
+
mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"));
|
|
16
|
+
byte[] raw = mac.doFinal(data.getBytes());
|
|
17
|
+
StringBuilder sb = new StringBuilder();
|
|
18
|
+
for (byte b : raw) sb.append(String.format("%02x", b));
|
|
19
|
+
return sb.toString();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public static String md5File(byte[] fileBytes) throws Exception {
|
|
23
|
+
// Vulnerable: MD5 used for file integrity — collision attacks possible
|
|
24
|
+
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
25
|
+
byte[] hash = md.digest(fileBytes);
|
|
26
|
+
StringBuilder sb = new StringBuilder();
|
|
27
|
+
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
28
|
+
return sb.toString();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: insecure_crypto
|
|
3
|
-
// severity: high
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: AES-ECB mode used for encryption (ECB leaks patterns, no IV)
|
|
6
|
-
|
|
7
|
-
import javax.crypto.*;
|
|
8
|
-
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
-
import java.util.Base64;
|
|
10
|
-
|
|
11
|
-
public class AesEcbEncryptor {
|
|
12
|
-
// Vulnerable: AES/ECB/PKCS5Padding does not use an IV and leaks data patterns
|
|
13
|
-
private static final String CIPHER_SPEC = "AES/ECB/PKCS5Padding";
|
|
14
|
-
private static final String SECRET_KEY = "1234567890abcdef"; // 16 bytes
|
|
15
|
-
|
|
16
|
-
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
-
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
18
|
-
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
19
|
-
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
-
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public static String decrypt(String ct) throws Exception {
|
|
24
|
-
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
25
|
-
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
26
|
-
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
-
return new String(cipher.doFinal(Base64.getDecoder().decode(ct)));
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: AES-ECB mode used for encryption (ECB leaks patterns, no IV)
|
|
6
|
+
|
|
7
|
+
import javax.crypto.*;
|
|
8
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
+
import java.util.Base64;
|
|
10
|
+
|
|
11
|
+
public class AesEcbEncryptor {
|
|
12
|
+
// Vulnerable: AES/ECB/PKCS5Padding does not use an IV and leaks data patterns
|
|
13
|
+
private static final String CIPHER_SPEC = "AES/ECB/PKCS5Padding";
|
|
14
|
+
private static final String SECRET_KEY = "1234567890abcdef"; // 16 bytes
|
|
15
|
+
|
|
16
|
+
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
+
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
18
|
+
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
19
|
+
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
+
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static String decrypt(String ct) throws Exception {
|
|
24
|
+
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
25
|
+
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
26
|
+
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
+
return new String(cipher.doFinal(Base64.getDecoder().decode(ct)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: deserialization
|
|
3
|
-
// severity: critical
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Unsafe deserialization via ObjectInputStream.readObject on untrusted data
|
|
6
|
-
|
|
7
|
-
import java.io.*;
|
|
8
|
-
import javax.servlet.http.*;
|
|
9
|
-
|
|
10
|
-
public class SessionRestoreServlet extends HttpServlet {
|
|
11
|
-
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
12
|
-
throws IOException {
|
|
13
|
-
// Vulnerable: deserializes raw bytes from request body — no type checking
|
|
14
|
-
InputStream body = req.getInputStream();
|
|
15
|
-
ObjectInputStream ois = new ObjectInputStream(body);
|
|
16
|
-
Object sessionData;
|
|
17
|
-
try {
|
|
18
|
-
sessionData = ois.readObject();
|
|
19
|
-
} catch (ClassNotFoundException e) {
|
|
20
|
-
resp.sendError(400, "Unknown class");
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
req.getSession().setAttribute("data", sessionData);
|
|
24
|
-
resp.getWriter().println("Session restored");
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization via ObjectInputStream.readObject on untrusted data
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
|
|
10
|
+
public class SessionRestoreServlet extends HttpServlet {
|
|
11
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
12
|
+
throws IOException {
|
|
13
|
+
// Vulnerable: deserializes raw bytes from request body — no type checking
|
|
14
|
+
InputStream body = req.getInputStream();
|
|
15
|
+
ObjectInputStream ois = new ObjectInputStream(body);
|
|
16
|
+
Object sessionData;
|
|
17
|
+
try {
|
|
18
|
+
sessionData = ois.readObject();
|
|
19
|
+
} catch (ClassNotFoundException e) {
|
|
20
|
+
resp.sendError(400, "Unknown class");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
req.getSession().setAttribute("data", sessionData);
|
|
24
|
+
resp.getWriter().println("Session restored");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: deserialization
|
|
3
|
-
// severity: critical
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Unsafe deserialization of Base64-decoded cookie value via ObjectInputStream
|
|
6
|
-
|
|
7
|
-
import java.io.*;
|
|
8
|
-
import java.util.Base64;
|
|
9
|
-
import javax.servlet.http.*;
|
|
10
|
-
|
|
11
|
-
public class RememberMeServlet extends HttpServlet {
|
|
12
|
-
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
-
throws IOException {
|
|
14
|
-
Cookie[] cookies = req.getCookies();
|
|
15
|
-
for (Cookie c : cookies) {
|
|
16
|
-
if ("rememberMe".equals(c.getName())) {
|
|
17
|
-
byte[] data = Base64.getDecoder().decode(c.getValue());
|
|
18
|
-
// Vulnerable: deserializes attacker-controlled cookie bytes
|
|
19
|
-
try (ObjectInputStream ois = new ObjectInputStream(
|
|
20
|
-
new ByteArrayInputStream(data))) {
|
|
21
|
-
Object principal = ois.readObject();
|
|
22
|
-
req.getSession().setAttribute("user", principal);
|
|
23
|
-
} catch (ClassNotFoundException e) {
|
|
24
|
-
resp.sendError(400);
|
|
25
|
-
}
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
resp.sendRedirect("/dashboard");
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization of Base64-decoded cookie value via ObjectInputStream
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.util.Base64;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class RememberMeServlet extends HttpServlet {
|
|
12
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
Cookie[] cookies = req.getCookies();
|
|
15
|
+
for (Cookie c : cookies) {
|
|
16
|
+
if ("rememberMe".equals(c.getName())) {
|
|
17
|
+
byte[] data = Base64.getDecoder().decode(c.getValue());
|
|
18
|
+
// Vulnerable: deserializes attacker-controlled cookie bytes
|
|
19
|
+
try (ObjectInputStream ois = new ObjectInputStream(
|
|
20
|
+
new ByteArrayInputStream(data))) {
|
|
21
|
+
Object principal = ois.readObject();
|
|
22
|
+
req.getSession().setAttribute("user", principal);
|
|
23
|
+
} catch (ClassNotFoundException e) {
|
|
24
|
+
resp.sendError(400);
|
|
25
|
+
}
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
resp.sendRedirect("/dashboard");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: deserialization
|
|
3
|
-
// severity: critical
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Unsafe deserialization via XMLDecoder on user-supplied XML
|
|
6
|
-
|
|
7
|
-
import java.beans.XMLDecoder;
|
|
8
|
-
import java.io.*;
|
|
9
|
-
import javax.servlet.http.*;
|
|
10
|
-
|
|
11
|
-
public class XmlConfigServlet extends HttpServlet {
|
|
12
|
-
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
-
throws IOException {
|
|
14
|
-
// Vulnerable: XMLDecoder can execute arbitrary Java code via crafted XML
|
|
15
|
-
XMLDecoder decoder = new XMLDecoder(req.getInputStream());
|
|
16
|
-
Object config = decoder.readObject();
|
|
17
|
-
decoder.close();
|
|
18
|
-
resp.getWriter().println("Loaded config: " + config.getClass().getName());
|
|
19
|
-
}
|
|
20
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization via XMLDecoder on user-supplied XML
|
|
6
|
+
|
|
7
|
+
import java.beans.XMLDecoder;
|
|
8
|
+
import java.io.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class XmlConfigServlet extends HttpServlet {
|
|
12
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
// Vulnerable: XMLDecoder can execute arbitrary Java code via crafted XML
|
|
15
|
+
XMLDecoder decoder = new XMLDecoder(req.getInputStream());
|
|
16
|
+
Object config = decoder.readObject();
|
|
17
|
+
decoder.close();
|
|
18
|
+
resp.getWriter().println("Loaded config: " + config.getClass().getName());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
// [CRUCIBLE-SEED]
|
|
2
|
-
// category: deserialization
|
|
3
|
-
// severity: critical
|
|
4
|
-
// language: java
|
|
5
|
-
// expected: Unsafe deserialization in JMS message listener via ObjectMessage
|
|
6
|
-
|
|
7
|
-
import javax.jms.*;
|
|
8
|
-
|
|
9
|
-
public class OrderMessageListener implements MessageListener {
|
|
10
|
-
@Override
|
|
11
|
-
public void onMessage(Message message) {
|
|
12
|
-
try {
|
|
13
|
-
if (message instanceof ObjectMessage) {
|
|
14
|
-
// Vulnerable: ObjectMessage.getObject() deserializes untrusted JMS payload
|
|
15
|
-
Object payload = ((ObjectMessage) message).getObject();
|
|
16
|
-
processOrder(payload);
|
|
17
|
-
}
|
|
18
|
-
} catch (JMSException e) {
|
|
19
|
-
e.printStackTrace();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
private void processOrder(Object order) {
|
|
24
|
-
System.out.println("Processing: " + order);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization in JMS message listener via ObjectMessage
|
|
6
|
+
|
|
7
|
+
import javax.jms.*;
|
|
8
|
+
|
|
9
|
+
public class OrderMessageListener implements MessageListener {
|
|
10
|
+
@Override
|
|
11
|
+
public void onMessage(Message message) {
|
|
12
|
+
try {
|
|
13
|
+
if (message instanceof ObjectMessage) {
|
|
14
|
+
// Vulnerable: ObjectMessage.getObject() deserializes untrusted JMS payload
|
|
15
|
+
Object payload = ((ObjectMessage) message).getObject();
|
|
16
|
+
processOrder(payload);
|
|
17
|
+
}
|
|
18
|
+
} catch (JMSException e) {
|
|
19
|
+
e.printStackTrace();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private void processOrder(Object order) {
|
|
24
|
+
System.out.println("Processing: " + order);
|
|
25
|
+
}
|
|
26
|
+
}
|