Public scan — anyone with this URL can view this analysis. Sign up to track your own repos privately, run scheduled re-scans, and get AI fix prompts via your dashboard.

rails/rails

https://github.com/rails/rails.git · scanned 2026-05-16 13:30 UTC (1 day, 8 hours ago) · 10 languages

248 findings (20 legacy + 228 scanner) 8/10 scanners ran Scanner says 74 (lower by 2)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 1 day, 10 hours ago · v3 · 91 findings from 2 sources. Findings combine the legacy security pipeline AND the multi-layer engine (atlas, wiring, flows, ranked) AND verified AI agent contributions.

JSON
{# ── 2026-05-17 R27 #5: score breakdown panel ────────────────────── Surfaces the score_breakdown JSON that's been silently stored on Repository for months. Turns hidden math into a trust signal. #}
Severity distribution — click a segment to filter
Active filters: source: scanner × excluding tests × Reset all
Scan summary Repository scanned at 74.4/100 with 100.0% coverage. It contains 5161 nodes across 0 cross-layer flows, written primarily in mixed languages. Engine surfaced 76 findings — concentrated in security (31), software (24), cicd (10). Risk profile is high: 9 critical, 7 high, 23 medium. Recommended next step: open the security layer findings first — that's where the highest-impact wins live.

Showing 68 of 91 findings. Click TP / FP to vote on a finding's accuracy — votes adjust the confidence weighting and improve detection across the platform.

critical 9-layer security secrets conf 1.00 Possible secret in actionpack/lib/action_controller/metal/http_authentication.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
actionpack/lib/action_controller/metal/http_authentication.rb:17 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activemodel/lib/active_model/secure_password.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activemodel/lib/active_model/secure_password.rb:103 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activemodel/lib/active_model/secure_password.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activemodel/lib/active_model/secure_password.rb:110 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activemodel/lib/active_model/secure_password.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activemodel/lib/active_model/secure_password.rb:287 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activerecord/lib/active_record/base.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activerecord/lib/active_record/base.rb:57 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activerecord/lib/active_record/connection_handling.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activerecord/lib/active_record/connection_handling.rb:17 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activerecord/lib/active_record/tasks/mysql_database_tasks.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activerecord/lib/active_record/tasks/mysql_database_tasks.rb:69 secrets
critical 9-layer security secrets conf 1.00 Possible secret in activerecord/lib/active_record/token_for.rb
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
activerecord/lib/active_record/token_for.rb:100 secrets
high 9-layer security owasp conf 1.00 Insecure pattern 'eval_used' in activestorage/app/assets/javascripts/activestorage.esm.js:490
Found a known-risky pattern (eval_used). Review and replace if possible.
activestorage/app/assets/javascripts/activestorage.esm.js:490 owaspeval_used
high 9-layer security owasp conf 1.00 Insecure pattern 'eval_used' in activestorage/app/assets/javascripts/activestorage.js:489
Found a known-risky pattern (eval_used). Review and replace if possible.
activestorage/app/assets/javascripts/activestorage.js:489 owaspeval_used
high 9-layer security owasp conf 1.00 Insecure pattern 'eval_used' in activesupport/lib/active_support/core_ext/string/output_safety.rb:220
Found a known-risky pattern (eval_used). Review and replace if possible.
activesupport/lib/active_support/core_ext/string/output_safety.rb:220 owaspeval_used
high 9-layer security owasp conf 1.00 Insecure pattern 'eval_used' in railties/lib/rails/commands/query/query_command.rb:102
Found a known-risky pattern (eval_used). Review and replace if possible.
railties/lib/rails/commands/query/query_command.rb:102 owaspeval_used
high 9-layer security owasp conf 1.00 Insecure pattern 'eval_used' in railties/lib/rails/commands/runner/runner_command.rb:38
Found a known-risky pattern (eval_used). Review and replace if possible.
railties/lib/rails/commands/runner/runner_command.rb:38 owaspeval_used
medium 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
ruby/setup-ruby@v1 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/rails-new-docker.yml:21 supply-chaingithub-actionspinned-dependencies
medium 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
ruby/setup-ruby@v1 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/release.yml:20 supply-chaingithub-actionspinned-dependencies
medium 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
rubygems/[email protected] can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/release.yml:28 supply-chaingithub-actionspinned-dependencies
medium 9-layer cicd supply-chain conf 1.00 GitHub Actions workflow grants broad write permissions
CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions.
.github/workflows/release.yml supply-chaingithub-actionsleast-privilege
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in actioncable/lib/action_cable/subscription_adapter/postgresql.rb:61
Found a known-risky pattern (weak_hash). Review and replace if possible.
actioncable/lib/action_cable/subscription_adapter/postgresql.rb:61 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in actionmailbox/app/controllers/action_mailbox/ingresses/mandrill/inbound_emails_controller.rb:78
Found a known-risky pattern (weak_hash). Review and replace if possible.
actionmailbox/app/controllers/action_mailbox/ingresses/mandrill/inbound_emails_controller.rb:78 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in actionmailbox/app/models/action_mailbox/inbound_email/message_id.rb:17
Found a known-risky pattern (weak_hash). Review and replace if possible.
actionmailbox/app/models/action_mailbox/inbound_email/message_id.rb:17 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in actionpack/lib/action_dispatch/middleware/cookies.rb:309
Found a known-risky pattern (weak_hash). Review and replace if possible.
actionpack/lib/action_dispatch/middleware/cookies.rb:309 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activerecord/lib/active_record/encryption/config.rb:29
Found a known-risky pattern (weak_hash). Review and replace if possible.
activerecord/lib/active_record/encryption/config.rb:29 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activerecord/lib/active_record/encryption/key.rb:24
Found a known-risky pattern (weak_hash). Review and replace if possible.
activerecord/lib/active_record/encryption/key.rb:24 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activerecord/lib/active_record/tasks/database_tasks.rb:647
Found a known-risky pattern (weak_hash). Review and replace if possible.
activerecord/lib/active_record/tasks/database_tasks.rb:647 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activestorage/app/models/active_storage/variation.rb:80
Found a known-risky pattern (weak_hash). Review and replace if possible.
activestorage/app/models/active_storage/variation.rb:80 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activestorage/lib/active_storage.rb:375
Found a known-risky pattern (weak_hash). Review and replace if possible.
activestorage/lib/active_storage.rb:375 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activestorage/lib/active_storage/service.rb:172
Found a known-risky pattern (weak_hash). Review and replace if possible.
activestorage/lib/active_storage/service.rb:172 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activestorage/lib/active_storage/service/gcs_service.rb:131
Found a known-risky pattern (weak_hash). Review and replace if possible.
activestorage/lib/active_storage/service/gcs_service.rb:131 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activestorage/lib/active_storage/service/s3_service.rb:136
Found a known-risky pattern (weak_hash). Review and replace if possible.
activestorage/lib/active_storage/service/s3_service.rb:136 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activesupport/lib/active_support/digest.rb:9
Found a known-risky pattern (weak_hash). Review and replace if possible.
activesupport/lib/active_support/digest.rb:9 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in activesupport/lib/active_support/key_generator.rb:25
Found a known-risky pattern (weak_hash). Review and replace if possible.
activesupport/lib/active_support/key_generator.rb:25 owaspweak_hash
medium 9-layer security owasp conf 1.00 Insecure pattern 'weak_hash' in railties/lib/rails/application/configuration.rb:150
Found a known-risky pattern (weak_hash). Review and replace if possible.
railties/lib/rails/application/configuration.rb:150 owaspweak_hash
low 9-layer hardware coverage conf 1.00 Containers defined but no K8s/orchestration manifest found
Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo.
coveragedeployment
low 9-layer hardware supply-chain conf 1.00 Docker base image is tag-pinned but not digest-pinned: ghcr.io/rails/devcontainer/images/ruby:${VARIANT}
Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter.
.devcontainer/Dockerfile:5 supply-chaindockerpinned-dependencies
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/app/javascript/action_cable/adapters.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/app/javascript/action_cable/index_with_name_deprecation.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/app/javascript/action_cable/internal.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/app/javascript/action_cable/logger.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/rollup.config.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/rollup.config.test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/test_helpers/consumer_test_helper.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/connection_monitor_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/connection_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/consumer_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/subscription_guarantor_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/subscription_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actioncable/test/javascript/src/unit/subscriptions_test.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actionmailbox/test/dummy/app/assets/config/manifest.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actionmailbox/test/dummy/app/javascript/packs/application.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actionpack/test/fixtures/公共/gzip/application-a71b3024f80aea3181c09774ca17e712.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actiontext/rollup.config.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actiontext/test/dummy/app/assets/config/manifest.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: actiontext/test/dummy/app/javascript/application.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: activestorage/app/javascript/activestorage/algorithms/md5_algorithm.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: activestorage/rollup.config.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: activestorage/test/dummy/app/assets/config/manifest.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/devcontainer-shellcheck.yml:20 supply-chaingithub-actionspinned-dependencies
low 9-layer frontend frontend-quality conf 1.00 Stray `console.log` in TS/JS — actioncable/app/assets/javascripts/action_cable.js:495
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
frontend-qualityfq.console-leak
low 9-layer frontend frontend-quality conf 1.00 Stray `console.log` in TS/JS — actioncable/app/javascript/action_cable/index_with_name_deprecation.js:2
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
frontend-qualityfq.console-leak
low 9-layer quality complexity conf 1.00 Very large file: activestorage/app/assets/javascripts/activestorage.js (1323 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: guides/assets/javascripts/@hotwired--turbo.js (3938 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in guides/assets/javascripts/guides.js:180
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (6 lines) in actioncable/app/javascript/action_cable/subscription.js:12
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (7 lines) in railties/lib/rails/generators/rails/app/templates/app/views/pwa/service-worker.js:27
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer api coverage conf 1.00 No API endpoints detected
The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported.
coverage
info 9-layer frontend coverage conf 1.00 No frontend routes/components detected
No React/Vue/Next routes were found. This is fine for backend-only repos.
coverage
{# ── 2026-05-17 Round 14: AI-agent bridge footer ────────────────────── Discoverability: the /agents/voting/ guide + MCP manifest exist but aren't linked from anywhere users actually land. Small, opt-in footer. #}
For AI agents: Voting guide (TP/FP) MCP manifest Stdio wrapper SARIF Integrate Findings queue Vote TP/FP on findings to calibrate the engine.
For AI agents + API integrations
Email me when this repo regresses
Free. We re-scan periodically; new criticals → your inbox. No signup required for the scan itself.
API access

This page is publicly accessible at: https://repobility.com/scan/3eeb1910-4d08-4be7-b475-8aae92530237/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/3eeb1910-4d08-4be7-b475-8aae92530237/

Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.