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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +414 -0
  3. data/README.md +114 -649
  4. data/docs/architecture.md +268 -0
  5. data/docs/contributing.md +42 -0
  6. data/docs/fix-mode.md +364 -0
  7. data/docs/rails-integration.md +162 -0
  8. data/docs/rules.md +310 -0
  9. data/docs/usage.md +301 -0
  10. data/lib/generators/scryer/USAGE +10 -2
  11. data/lib/generators/scryer/templates/scryer_initializer.rb +15 -0
  12. data/lib/scryer/ai_fix_suggester.rb +37 -11
  13. data/lib/scryer/ast.rb +26 -0
  14. data/lib/scryer/authorization_watcher.rb +156 -0
  15. data/lib/scryer/baseline.rb +75 -0
  16. data/lib/scryer/cli.rb +688 -14
  17. data/lib/scryer/colorizer.rb +56 -0
  18. data/lib/scryer/dependency_fixer.rb +96 -0
  19. data/lib/scryer/finding.rb +6 -0
  20. data/lib/scryer/fix_runner.rb +161 -0
  21. data/lib/scryer/fix_verifier.rb +169 -0
  22. data/lib/scryer/mechanical_fixer.rb +288 -0
  23. data/lib/scryer/minitest.rb +48 -0
  24. data/lib/scryer/performance_rules/inefficient_save_loop_rule.rb +32 -0
  25. data/lib/scryer/performance_rules/missing_pagination_rule.rb +1 -0
  26. data/lib/scryer/performance_rules/n_plus_one_query_rule.rb +1 -0
  27. data/lib/scryer/performance_rules/unbounded_table_scan_rule.rb +1 -0
  28. data/lib/scryer/report_renderer.rb +539 -46
  29. data/lib/scryer/rspec.rb +55 -0
  30. data/lib/scryer/rule.rb +22 -2
  31. data/lib/scryer/rules/action_cable_forgery_protection_rule.rb +3 -0
  32. data/lib/scryer/rules/active_storage_inline_disposition_rule.rb +3 -0
  33. data/lib/scryer/rules/active_storage_missing_content_type_validation_rule.rb +3 -0
  34. data/lib/scryer/rules/authentication_bypass_rule.rb +30 -7
  35. data/lib/scryer/rules/command_injection_rule.rb +3 -0
  36. data/lib/scryer/rules/consider_all_requests_local_rule.rb +51 -0
  37. data/lib/scryer/rules/cors_misconfiguration_rule.rb +51 -20
  38. data/lib/scryer/rules/csrf_protection_rule.rb +60 -11
  39. data/lib/scryer/rules/force_ssl_rule.rb +3 -0
  40. data/lib/scryer/rules/graphql_missing_query_limits_rule.rb +31 -0
  41. data/lib/scryer/rules/hardcoded_basic_auth_rule.rb +3 -0
  42. data/lib/scryer/rules/hardcoded_secret_key_base_rule.rb +3 -0
  43. data/lib/scryer/rules/hardcoded_secret_rule.rb +3 -0
  44. data/lib/scryer/rules/host_authorization_disabled_rule.rb +50 -0
  45. data/lib/scryer/rules/idor_rule.rb +63 -9
  46. data/lib/scryer/rules/insecure_cookie_serializer_rule.rb +3 -0
  47. data/lib/scryer/rules/job_raw_params_rule.rb +40 -7
  48. data/lib/scryer/rules/jwt_insecure_rule.rb +3 -0
  49. data/lib/scryer/rules/mass_assignment_rule.rb +32 -5
  50. data/lib/scryer/rules/missing_authorization_rule.rb +103 -0
  51. data/lib/scryer/rules/missing_policy_scope_rule.rb +134 -0
  52. data/lib/scryer/rules/open_redirect_rule.rb +3 -0
  53. data/lib/scryer/rules/path_traversal_rule.rb +22 -1
  54. data/lib/scryer/rules/security_headers_rule.rb +3 -0
  55. data/lib/scryer/rules/sql_injection_rule.rb +3 -0
  56. data/lib/scryer/rules/ssrf_rule.rb +67 -13
  57. data/lib/scryer/rules/unsafe_deserialization_rule.rb +3 -0
  58. data/lib/scryer/rules/verbose_production_log_level_rule.rb +53 -0
  59. data/lib/scryer/rules/weak_crypto_rule.rb +37 -2
  60. data/lib/scryer/rules/weak_session_cookie_rule.rb +3 -0
  61. data/lib/scryer/rules/xss_unsafe_html_rule.rb +41 -0
  62. data/lib/scryer/scanner.rb +25 -12
  63. data/lib/scryer/style_rules/frozen_string_literal_rule.rb +1 -0
  64. data/lib/scryer/version.rb +1 -1
  65. data/lib/scryer.rb +30 -1
  66. data/lib/tasks/scryer.rake +447 -20
  67. 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.0.0
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-12 00:00:00.000000000 Z
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
- One scan, one report: security, performance, duplicate-code, and dependency audits for Ruby
29
- and Rails — the ground Brakeman, bundler-audit, Reek, and custom glue scripts usually split
30
- between them, covered by a single `scryer` command. (Style/lint is RuboCop's job — Scryer
31
- doesn't touch that.)
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, hardcoded secrets, XSS, weak crypto, and more; N+1
34
- queries, missing pagination, and other performance heuristics; near-duplicate code; and
35
- known-vulnerable gems via a live OSV.dev dependency audit — on by default, every run.
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 CSV. Zero runtime dependencies beyond Ruby's own stdlib.
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: Ruby/Rails security & quality auditor — one command instead of Brakeman +
131
- bundler-audit + Reek.
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: []