scryer 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +414 -0
- data/README.md +114 -649
- data/docs/architecture.md +268 -0
- data/docs/contributing.md +42 -0
- data/docs/fix-mode.md +364 -0
- data/docs/rails-integration.md +162 -0
- data/docs/rules.md +310 -0
- data/docs/usage.md +301 -0
- data/lib/generators/scryer/USAGE +10 -2
- data/lib/generators/scryer/templates/scryer_initializer.rb +15 -0
- data/lib/scryer/ai_fix_suggester.rb +37 -11
- data/lib/scryer/ast.rb +26 -0
- data/lib/scryer/authorization_watcher.rb +156 -0
- data/lib/scryer/baseline.rb +75 -0
- data/lib/scryer/cli.rb +688 -14
- data/lib/scryer/colorizer.rb +56 -0
- data/lib/scryer/dependency_fixer.rb +96 -0
- data/lib/scryer/finding.rb +6 -0
- data/lib/scryer/fix_runner.rb +161 -0
- data/lib/scryer/fix_verifier.rb +169 -0
- data/lib/scryer/mechanical_fixer.rb +288 -0
- data/lib/scryer/minitest.rb +48 -0
- data/lib/scryer/performance_rules/inefficient_save_loop_rule.rb +32 -0
- data/lib/scryer/performance_rules/missing_pagination_rule.rb +1 -0
- data/lib/scryer/performance_rules/n_plus_one_query_rule.rb +1 -0
- data/lib/scryer/performance_rules/unbounded_table_scan_rule.rb +1 -0
- data/lib/scryer/report_renderer.rb +539 -46
- data/lib/scryer/rspec.rb +55 -0
- data/lib/scryer/rule.rb +22 -2
- data/lib/scryer/rules/action_cable_forgery_protection_rule.rb +3 -0
- data/lib/scryer/rules/active_storage_inline_disposition_rule.rb +3 -0
- data/lib/scryer/rules/active_storage_missing_content_type_validation_rule.rb +3 -0
- data/lib/scryer/rules/authentication_bypass_rule.rb +30 -7
- data/lib/scryer/rules/command_injection_rule.rb +3 -0
- data/lib/scryer/rules/consider_all_requests_local_rule.rb +51 -0
- data/lib/scryer/rules/cors_misconfiguration_rule.rb +51 -20
- data/lib/scryer/rules/csrf_protection_rule.rb +60 -11
- data/lib/scryer/rules/force_ssl_rule.rb +3 -0
- data/lib/scryer/rules/graphql_missing_query_limits_rule.rb +31 -0
- data/lib/scryer/rules/hardcoded_basic_auth_rule.rb +3 -0
- data/lib/scryer/rules/hardcoded_secret_key_base_rule.rb +3 -0
- data/lib/scryer/rules/hardcoded_secret_rule.rb +3 -0
- data/lib/scryer/rules/host_authorization_disabled_rule.rb +50 -0
- data/lib/scryer/rules/idor_rule.rb +63 -9
- data/lib/scryer/rules/insecure_cookie_serializer_rule.rb +3 -0
- data/lib/scryer/rules/job_raw_params_rule.rb +40 -7
- data/lib/scryer/rules/jwt_insecure_rule.rb +3 -0
- data/lib/scryer/rules/mass_assignment_rule.rb +32 -5
- data/lib/scryer/rules/missing_authorization_rule.rb +103 -0
- data/lib/scryer/rules/missing_policy_scope_rule.rb +134 -0
- data/lib/scryer/rules/open_redirect_rule.rb +3 -0
- data/lib/scryer/rules/path_traversal_rule.rb +22 -1
- data/lib/scryer/rules/security_headers_rule.rb +3 -0
- data/lib/scryer/rules/sql_injection_rule.rb +3 -0
- data/lib/scryer/rules/ssrf_rule.rb +67 -13
- data/lib/scryer/rules/unsafe_deserialization_rule.rb +3 -0
- data/lib/scryer/rules/verbose_production_log_level_rule.rb +53 -0
- data/lib/scryer/rules/weak_crypto_rule.rb +37 -2
- data/lib/scryer/rules/weak_session_cookie_rule.rb +3 -0
- data/lib/scryer/rules/xss_unsafe_html_rule.rb +41 -0
- data/lib/scryer/scanner.rb +25 -12
- data/lib/scryer/style_rules/frozen_string_literal_rule.rb +1 -0
- data/lib/scryer/version.rb +1 -1
- data/lib/scryer.rb +30 -1
- data/lib/tasks/scryer.rake +447 -20
- metadata +52 -12
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scryer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ram Laxman Yadav
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-08-
|
|
11
|
+
date: 2026-08-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -24,19 +24,38 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '13.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: minitest
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '5.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '5.0'
|
|
27
41
|
description: |
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
Scryer is an all-in-one security auditing and static analysis tool for Ruby on Rails
|
|
43
|
+
applications — tells you what to fix first, across security, performance, dependencies, and
|
|
44
|
+
code quality. It scans a Ruby/Rails codebase for security vulnerabilities, performance
|
|
45
|
+
problems, dependency risk, and code-quality issues, then ranks everything it finds by severity
|
|
46
|
+
across all of those categories — so a scan ends with one answer to "what's most worth fixing,"
|
|
47
|
+
not four separate reports to reconcile by hand. (Style/lint is RuboCop's job — Scryer doesn't
|
|
48
|
+
touch that, except one narrow check.)
|
|
32
49
|
|
|
33
|
-
Detects SQL injection, mass assignment,
|
|
34
|
-
|
|
35
|
-
known-vulnerable gems via a live
|
|
50
|
+
Detects SQL injection, mass assignment, SSRF, path traversal, IDOR, insecure JWT/CORS/session
|
|
51
|
+
config, hardcoded secrets, XSS, weak crypto, and more; N+1 queries, missing pagination, and
|
|
52
|
+
other performance heuristics; near-duplicate code; and known-vulnerable gems via a live
|
|
53
|
+
OSV.dev dependency audit — on by default, every run.
|
|
36
54
|
|
|
37
55
|
Every finding includes a human-reviewable suggested fix — never auto-applied, optionally
|
|
38
56
|
rewritten against your actual code by any LLM you configure. Reports in JSON, self-contained
|
|
39
|
-
HTML, or
|
|
57
|
+
HTML, CSV, or SARIF (for GitHub Code Scanning). Zero runtime dependencies beyond Ruby's own
|
|
58
|
+
stdlib.
|
|
40
59
|
email:
|
|
41
60
|
executables:
|
|
42
61
|
- scryer
|
|
@@ -46,6 +65,12 @@ files:
|
|
|
46
65
|
- CHANGELOG.md
|
|
47
66
|
- LICENSE.txt
|
|
48
67
|
- README.md
|
|
68
|
+
- docs/architecture.md
|
|
69
|
+
- docs/contributing.md
|
|
70
|
+
- docs/fix-mode.md
|
|
71
|
+
- docs/rails-integration.md
|
|
72
|
+
- docs/rules.md
|
|
73
|
+
- docs/usage.md
|
|
49
74
|
- exe/scryer
|
|
50
75
|
- lib/generators/scryer/USAGE
|
|
51
76
|
- lib/generators/scryer/install_generator.rb
|
|
@@ -54,12 +79,20 @@ files:
|
|
|
54
79
|
- lib/scryer/ai_client.rb
|
|
55
80
|
- lib/scryer/ai_fix_suggester.rb
|
|
56
81
|
- lib/scryer/ast.rb
|
|
82
|
+
- lib/scryer/authorization_watcher.rb
|
|
83
|
+
- lib/scryer/baseline.rb
|
|
57
84
|
- lib/scryer/cache_extractor.rb
|
|
58
85
|
- lib/scryer/cli.rb
|
|
86
|
+
- lib/scryer/colorizer.rb
|
|
59
87
|
- lib/scryer/dependency_audit.rb
|
|
88
|
+
- lib/scryer/dependency_fixer.rb
|
|
60
89
|
- lib/scryer/duplicate_detector.rb
|
|
61
90
|
- lib/scryer/finding.rb
|
|
91
|
+
- lib/scryer/fix_runner.rb
|
|
92
|
+
- lib/scryer/fix_verifier.rb
|
|
93
|
+
- lib/scryer/mechanical_fixer.rb
|
|
62
94
|
- lib/scryer/method_extractor.rb
|
|
95
|
+
- lib/scryer/minitest.rb
|
|
63
96
|
- lib/scryer/performance_rules/inefficient_save_loop_rule.rb
|
|
64
97
|
- lib/scryer/performance_rules/missing_pagination_rule.rb
|
|
65
98
|
- lib/scryer/performance_rules/n_plus_one_query_rule.rb
|
|
@@ -68,6 +101,7 @@ files:
|
|
|
68
101
|
- lib/scryer/query_watcher.rb
|
|
69
102
|
- lib/scryer/railtie.rb
|
|
70
103
|
- lib/scryer/report_renderer.rb
|
|
104
|
+
- lib/scryer/rspec.rb
|
|
71
105
|
- lib/scryer/rule.rb
|
|
72
106
|
- lib/scryer/rule_set.rb
|
|
73
107
|
- lib/scryer/rules/action_cable_forgery_protection_rule.rb
|
|
@@ -75,6 +109,7 @@ files:
|
|
|
75
109
|
- lib/scryer/rules/active_storage_missing_content_type_validation_rule.rb
|
|
76
110
|
- lib/scryer/rules/authentication_bypass_rule.rb
|
|
77
111
|
- lib/scryer/rules/command_injection_rule.rb
|
|
112
|
+
- lib/scryer/rules/consider_all_requests_local_rule.rb
|
|
78
113
|
- lib/scryer/rules/cors_misconfiguration_rule.rb
|
|
79
114
|
- lib/scryer/rules/csrf_protection_rule.rb
|
|
80
115
|
- lib/scryer/rules/force_ssl_rule.rb
|
|
@@ -82,17 +117,21 @@ files:
|
|
|
82
117
|
- lib/scryer/rules/hardcoded_basic_auth_rule.rb
|
|
83
118
|
- lib/scryer/rules/hardcoded_secret_key_base_rule.rb
|
|
84
119
|
- lib/scryer/rules/hardcoded_secret_rule.rb
|
|
120
|
+
- lib/scryer/rules/host_authorization_disabled_rule.rb
|
|
85
121
|
- lib/scryer/rules/idor_rule.rb
|
|
86
122
|
- lib/scryer/rules/insecure_cookie_serializer_rule.rb
|
|
87
123
|
- lib/scryer/rules/job_raw_params_rule.rb
|
|
88
124
|
- lib/scryer/rules/jwt_insecure_rule.rb
|
|
89
125
|
- lib/scryer/rules/mass_assignment_rule.rb
|
|
126
|
+
- lib/scryer/rules/missing_authorization_rule.rb
|
|
127
|
+
- lib/scryer/rules/missing_policy_scope_rule.rb
|
|
90
128
|
- lib/scryer/rules/open_redirect_rule.rb
|
|
91
129
|
- lib/scryer/rules/path_traversal_rule.rb
|
|
92
130
|
- lib/scryer/rules/security_headers_rule.rb
|
|
93
131
|
- lib/scryer/rules/sql_injection_rule.rb
|
|
94
132
|
- lib/scryer/rules/ssrf_rule.rb
|
|
95
133
|
- lib/scryer/rules/unsafe_deserialization_rule.rb
|
|
134
|
+
- lib/scryer/rules/verbose_production_log_level_rule.rb
|
|
96
135
|
- lib/scryer/rules/weak_crypto_rule.rb
|
|
97
136
|
- lib/scryer/rules/weak_session_cookie_rule.rb
|
|
98
137
|
- lib/scryer/rules/xss_unsafe_html_rule.rb
|
|
@@ -127,6 +166,7 @@ requirements: []
|
|
|
127
166
|
rubygems_version: 3.5.11
|
|
128
167
|
signing_key:
|
|
129
168
|
specification_version: 4
|
|
130
|
-
summary:
|
|
131
|
-
|
|
169
|
+
summary: An all-in-one security auditing and static analysis tool for Ruby on Rails
|
|
170
|
+
applications — tells you what to fix first, across security, performance, dependencies,
|
|
171
|
+
and code quality.
|
|
132
172
|
test_files: []
|