← Back to scan
File as GitHub Issue repo: hackclub/hackatime

Push this scan report to hackclub/hackatime

Click the green button below to open GitHub’s new-issue form, pre-filled with the report title, summary table, top findings, and an embedded score-card image. No authentication needed — you review on GitHub before submitting. Repobility is credited as the scanner.

Embedded score card image

This image will render at the top of the issue body. Hosted on Repobility, refreshes automatically after re-scans.

Repobility score card

Issue title

Compose service contains a literal secret environment value

Curate findings to include

Pick exactly which findings appear in the issue body. By default the top 5 are included. Uncheck noise, check what matters.

Top 5 (default)
Severity Rule Title File:line
CRIT MINED013 [MINED013] Password In Url: https://user:password@host — leaks creds via logs, referrer, … docker-compose.yml:15
CRIT SEC022 [SEC022] Database URL With Embedded Credential: A database connection URL contains an emb… docker-compose.yml:15
CRIT SEC096 [SEC096] Rails: SQL injection via where("#{...}") or find_by_sql: ActiveRecord where() / … app/models/concerns/user_fuzzy_search.rb:68
CRIT DKC007 Compose service contains a literal secret environment value docker-compose.yml:23
CRIT DKC007 Compose service contains a literal secret environment value docker-compose.yml:1
HIGH MINED004 [MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums). app/models/heartbeat.rb:39
HIGH MINED010 [MINED010] Ruby System Call: system / backtick run shell. Command injection if any arg dy… app/jobs/update_geolite2_database_job.rb:33
HIGH SEC040 [SEC040] innerHTML XSS — template literal with server-supplied data: Setting .innerHTML w… app/javascript/controllers/admin_timeli…:101
HIGH SEC006 [SEC006] XSS Risk: Direct HTML injection without sanitization. app/javascript/controllers/admin_timeli…:101
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/controllers/sessions_controller.rb:3
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/controllers/profiles_controller.rb:105
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/controllers/application_controller.…:50
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/api/v1/badges_controlle…:4
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/api/summary_controller.…:3
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/api/hackatime/v1/hackat…:3
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/api/v1/badges_controlle…:4
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/api/summary_controller.…:3
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/api/hackatime/v1/hackat…:3
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/javascript/entrypoints/inertia.ts:45
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/javascript/controllers/admin_timeli…:215
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/controllers/admin/admin_api_keys_co…:16
HIGH DKR006 Dockerfile pipes a remote script into a shell Dockerfile.dev:24
HIGH DKR006 Dockerfile pipes a remote script into a shell Dockerfile:33
HIGH MINED126 Workflow container/services image `postgres:16-alpine` unpinned .github/workflows/ci.yml:191
HIGH MINED126 Workflow container/services image `postgres:16-alpine` unpinned .github/workflows/ci.yml:144
HIGH MINED115 Action `actions/upload-artifact` pinned to mutable ref `@v7` .github/workflows/ci.yml:247
HIGH MINED115 Action `browser-actions/setup-chrome` pinned to mutable ref `@latest` .github/workflows/ci.yml:215
HIGH MINED115 Action `oven-sh/setup-bun` pinned to mutable ref `@v2` .github/workflows/ci.yml:211
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:205
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:202
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:158
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:155
HIGH MINED115 Action `useblacksmith/build-push-action` pinned to mutable ref `@v2` .github/workflows/ci.yml:132
HIGH MINED115 Action `useblacksmith/setup-docker-builder` pinned to mutable ref `@v1` .github/workflows/ci.yml:129
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:126
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:109
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:106
HIGH MINED115 Action `oven-sh/setup-bun` pinned to mutable ref `@v2` .github/workflows/ci.yml:82
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:76
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:73
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:60
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:57
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:45
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:42
HIGH MINED115 Action `github/codeql-action/upload-sarif` pinned to mutable ref `@v4` .github/workflows/ci.yml:33
HIGH MINED115 Action `ruby/setup-ruby` pinned to mutable ref `@v1` .github/workflows/ci.yml:23
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/ci.yml:20
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/update-linguist.yml:18
HIGH MINED118 Dockerfile FROM `docker.io/library/ruby (no tag)` not pinned by digest Dockerfile.production-worker:10
HIGH MINED118 Dockerfile FROM `ruby:4.0.5` not pinned by digest Dockerfile.dev:1
HIGH MINED118 Dockerfile FROM `docker.io/library/ruby (no tag)` not pinned by digest Dockerfile:12
HIGH GHSA-c2c7-rcm5-vvqj picomatch: GHSA-c2c7-rcm5-vvqj bun.lock
HIGH GHSA-r5fr-rjxr-66jc lodash-es: GHSA-r5fr-rjxr-66jc bun.lock
HIGH DKC011 Database service publishes a host port docker-compose.yml:23
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:338
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:319
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:238
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:187
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:186
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:143
MED SEC123 [SEC123] Production stack trace / debug output exposed: Debug mode left on in production … config/environments/test.rb:26
MED SEC123 [SEC123] Production stack trace / debug output exposed: Debug mode left on in production … config/environments/development.rb:32
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/models/email_verification_request.rb:28
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/models/api_key.rb:12
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/models/admin_api_key.rb:19
MED AUC001 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks…
MED DEPCUR-NPM npm package `prettier-plugin-svelte` is 1 major version(s) behind (^3.5.2 -> 4.1.0) package.json
MED GHSA-qx2v-qp2m-jg93 postcss: GHSA-qx2v-qp2m-jg93 bun.lock
MED GHSA-3v7f-55p6-f55p picomatch: GHSA-3v7f-55p6-f55p bun.lock
MED GHSA-f23m-r3pf-42rh lodash-es: GHSA-f23m-r3pf-42rh bun.lock
MED DKC015 Database service has no healthcheck docker-compose.yml:23
MED DKR001 Docker final stage has no non-root USER Dockerfile.dev:1
MED WEB003 Public web service has no security.txt .well-known/security.txt
MED DKR014 Dockerfile copies broad context with incomplete .dockerignore Dockerfile.production-worker:49
MED DKR014 Dockerfile copies broad context with incomplete .dockerignore Dockerfile:70
MED AUC002 [AUC002] Low visible authorization coverage in route inventory: Only 31.7% of discovered …
MED WEB015 Public web app has no Content Security Policy index.html
MED AGT015 Remote install command pipes network code directly to a shell docs/editors/terminal.md:20
MED AGT015 Remote install command pipes network code directly to a shell app/javascript/pages/WakatimeSetup/Inde…:44
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:120
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:119
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:118
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:117
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:116
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:115
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:114
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:113
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:90
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:87
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:164
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:163
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:160
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:157
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:156
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:155
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:152
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:135
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:134
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:47
LOW DEPCUR-NPM npm package `svelte-check` is minor version(s) behind (^4.4.8 -> 4.6.0) package.json
LOW AIC003 Duplicated implementation block across source files test/jobs/heartbeat_import_remote_downl…:64
LOW AIC003 Duplicated implementation block across source files test/controllers/settings_imports_expor…:36
LOW AIC003 Duplicated implementation block across source files spec/requests/api/v1/users_spec.rb:174
LOW AIC003 Duplicated implementation block across source files db/migrate/20250305061242_uniqueness_in…:4
LOW AIC003 Duplicated implementation block across source files app/javascript/pages/WakatimeAlternativ…:126
LOW AIC003 Duplicated implementation block across source files app/javascript/components/ModalInner.sv…:4
LOW AUC005 [AUC005] No authorization-focused tests detected: No test files with common authorization…
LOW DKR008 .dockerignore misses sensitive defaults .dockerignore
LOW DKC016 App service does not wait for database health docker-compose.yml:1
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:1
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:1
LOW WEB011 Public web app has no humans.txt humans.txt
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … app/javascript/entrypoints/inertia.ts:46
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … app/javascript/controllers/admin_timeli…:32
INFO MINED053 [MINED053] Placeholder Default Username: [email protected] / [email protected] / admin/admin… app/controllers/inertia_controller.rb:89
INFO DEPCUR-NPM npm package `@inertiajs/vite` is patch version(s) behind (^3.3.0 -> 3.3.1) package.json
INFO DEPCUR-NPM npm package `@inertiajs/svelte` is patch version(s) behind (^3.3.0 -> 3.3.1) package.json
Reset to top 5 117 findings available (after auto-suppression of test files + won't-fix)

Issue body (markdown)

## Code-quality scan: `hackclub/hackatime`

**Score: 65/100 (C+)**  ·  117 findings  ·  scanned 2026-06-05 17:54 UTC  ·  42,493 LOC

| Severity | Count |
|---|---|
| CRITICAL | 5 |
| HIGH | 55 |
| MEDIUM | 39 |
| LOW | 13 |

📊 [Full filterable report](https://repobility.com/scan/56bb2fd3-05ef-451b-9d47-d06ccc7ed7eb/)  ·  ![scorecard](https://repobility.com/scan/56bb2fd3-05ef-451b-9d47-d06ccc7ed7eb/report.png?v=1780682085-s2)

### Top findings

1. **CRITICAL** `MINED013` — Password In Url
   `docker-compose.yml:15` · CWE-200 · ✓ Repobility
2. **CRITICAL** `SEC022` — Database URL With Embedded Credential
   `docker-compose.yml:15` · A07:2021 Identification & Authentication Failures
3. **CRITICAL** `SEC096` — Rails: SQL injection via where("#{...}") or find_by_sql
   `app/models/concerns/user_fuzzy_search.rb:68` · CWE-89
4. **CRITICAL** `DKC007` — Compose service contains a literal secret environment value
   `docker-compose.yml:23`
5. **CRITICAL** `DKC007` — Compose service contains a literal secret environment value
   `docker-compose.yml:1`

---

**Security note**: this issue is public. If any flagged finding is a real, exploitable vulnerability, please redirect to your `SECURITY.md` policy or open a [private security advisory](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability) instead. We're happy to close this and re-submit privately.

---

_Filed automatically. Close this issue if not useful — we won't refile. Full report: https://repobility.com/scan/56bb2fd3-05ef-451b-9d47-d06ccc7ed7eb/_
Megaproject â high spam risk
Could not determine 'hackclub/hackatime' star count (GitHub API rate-limited or unreachable). When in doubt about repo size, prefer opening a focused PR or a discussion rather than an issue.

The button opens GitHubâs new-issue page in a new tab. You will see the title + body pre-filled â review, edit if you want, then click GitHubâs "Submit new issue" button. Repobility never posts anything on your behalf.

For real security findings on big repos: use the project's SECURITY.md or private advisory flow instead of a public issue.