← Back to scan
File as GitHub Issue repo: opf/openproject

Push this scan report to opf/openproject

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

Rails: SQL injection via where("#{...}") or find_by_sql

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 MINED018 [MINED018] Unsafe Deserialization Pickle: pickle.loads / yaml.load (without Loader=SafeLo… app/models/queries/work_packages/filter…:42
CRIT SEC116 [SEC116] Ruby YAML.load / Marshal.load on untrusted input: `YAML.load` (pre-3.1) and `Mar… app/models/queries/work_packages/filter…:42
CRIT SEC079 [SEC079] Python: yaml.load without SafeLoader: yaml.load() without explicit SafeLoader ca… app/models/queries/work_packages/filter…:42
CRIT SEC096 [SEC096] Rails: SQL injection via where("#{...}") or find_by_sql: ActiveRecord where() / … app/models/queries/projects/filters/fil…:155
CRIT SEC096 [SEC096] Rails: SQL injection via where("#{...}") or find_by_sql: ActiveRecord where() / … app/models/journal.rb:205
CRIT SEC096 [SEC096] Rails: SQL injection via where("#{...}") or find_by_sql: ActiveRecord where() / … app/models/category.rb:53
CRIT DKC008 Compose service mounts the Docker socket docker/dev/tls/docker-compose.yml:1
CRIT DKC007 Compose service contains a literal secret environment value docker-compose.yml:125
CRIT DKC007 Compose service contains a literal secret environment value docker-compose.yml:113
CRIT DKC007 Compose service contains a literal secret environment value docker/pullpreview/docker-compose.yml:79
CRIT DKC007 Compose service contains a literal secret environment value docker/pullpreview/docker-compose.yml:73
CRIT DKC007 Compose service contains a literal secret environment value docker/pullpreview/docker-compose.yml:64
CRIT DKC007 Compose service contains a literal secret environment value docker/pullpreview/docker-compose.yml:51
CRIT DKR005 Docker image bakes a secret-like ENV value docker/prod/Dockerfile:32
CRIT MINED116 [MINED116] Workflow uses `secrets.HETZNER_CA_KEY` on a `pull_request` trigger: This workf… .github/workflows/pullpreview.yml:60
CRIT MINED116 [MINED116] Workflow uses `secrets.HCLOUD_TOKEN` on a `pull_request` trigger: This workflo… .github/workflows/pullpreview.yml:59
CRIT MINED116 [MINED116] Workflow uses `secrets.OPENPROJECTCI_GH_SAAS_WORKFLOW_PAT` on a `pull_request`… .github/workflows/downstream-ci.yml:34
CRIT MINED116 [MINED116] Workflow uses `secrets.CAPYBARA_AWS_SECRET_ACCESS_KEY` on a `pull_request` tri… .github/workflows/test-core.yml:88
CRIT MINED116 [MINED116] Workflow uses `secrets.CAPYBARA_AWS_ACCESS_KEY_ID` on a `pull_request` trigger… .github/workflows/test-core.yml:87
HIGH MINED004 [MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums). app/models/user_password/sha1.rb:35
HIGH MINED004 [MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums). app/models/attachment.rb:31
HIGH SEC103 [SEC103] LDAP injection — non-constant search filter: User input concatenated into an LDA… app/controllers/search_controller.rb:120
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/sys_controller.rb:40
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/scim_v2/base_controller…:36
HIGH SEC109 [SEC109] Rails skip_forgery_protection / protect_from_forgery disabled: Rails CSRF protec… app/controllers/omni_auth_login_control…:40
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/sys_controller.rb:40
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/scim_v2/base_controller…:36
HIGH SEC097 [SEC097] Rails: force_ssl disabled / protect_from_forgery missing: Rails app disables SSL… app/controllers/omni_auth_login_control…:40
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/components/admin/import/jira/import…:50
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/components/admin/import/jira/import…:46
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… app/components/admin/import/jira/import…:50
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/contracts/projects/copy_contract.rb:36
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/components/work_packages/date_picke…:148
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … app/components/activities/item_componen…:160
HIGH DKR001 Docker final stage runs as root docker/dev/backend/Dockerfile:67
HIGH MINED126 [MINED126] Workflow container/services image `postgres:16` unpinned: `container/services … .github/workflows/seed-all-locales.yml:76
HIGH MINED126 [MINED126] Workflow container/services image `postgres:16` unpinned: `container/services … .github/workflows/packager.yml:22
HIGH MINED130 [MINED130] Lockfile pulls package from off-canonical host `github.com`: `package-lock.jso… extensions/op-blocknote-hocuspocus/pack…:1
HIGH MINED118 [MINED118] Dockerfile FROM `node:22.18` not pinned by digest: `FROM node:22.18` resolves … extensions/op-blocknote-hocuspocus/Dock…:1
HIGH MINED122 [MINED122] package.json dep `op-blocknote-extensions` pulled from URL/Git: `dependencies.… extensions/op-blocknote-hocuspocus/pack…:1
HIGH MINED118 [MINED118] Dockerfile FROM `ruby:2.6-stretch` not pinned by digest: `FROM ruby:2.6-stretc… docker/prod/mysql-to-postgres/Dockerfile:1
HIGH MINED118 [MINED118] Dockerfile FROM `node:22.21.0` not pinned by digest: `FROM node:22.21.0` resol… docker/dev/frontend/Dockerfile:1
HIGH MINED118 [MINED118] Dockerfile FROM `ruby:4.0.2-trixie` not pinned by digest: `FROM ruby:4.0.2-tri… docker/dev/backend/Dockerfile:1
HIGH MINED130 [MINED130] Lockfile pulls package from off-canonical host `github.com`: `package-lock.jso… frontend/package-lock.json:1
HIGH MINED122 [MINED122] package.json dep `op-blocknote-extensions` pulled from URL/Git: `dependencies.… frontend/package.json:1
HIGH DKC013 Database service has no persistent data volume docker/dev/xwiki/docker-compose.yml:1
HIGH DKC009 Compose service bind-mounts a sensitive host path docker/dev/keycloak/docker-compose.yml:13
HIGH DKC009 Compose service bind-mounts a sensitive host path docker/dev/gitlab/docker-compose.yml:3
HIGH DKC011 Database service publishes a host port docker/dev/minio/docker-compose.yml:2
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:778
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:715
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:632
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:631
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:630
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:628
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:508
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:268
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:239
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… config/routes.rb:200
MED SEC007 [SEC007] Unsafe Deserialization: Unsafe deserialization can execute arbitrary code. app/models/queries/work_packages/filter…:42
MED SEC134 [SEC134] AI scaffold leftover — Lorem ipsum / example.com / John Doe in code: Lorem ipsum… app/models/exports/pdf/demo_generator.rb:134
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/helpers/backup_helper.rb:63
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/controllers/my/access_tokens_contro…:75
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … app/components/my/access_token/new_acce…:47
MED DKR003 Compose service `cuprite-chrome` image uses the latest tag docker-compose.yml:240
MED DKR003 Compose service `hocuspocus-test` image uses the latest tag docker-compose.yml:125
MED DKR003 Compose service `worker` image uses the latest tag docker-compose.yml:71
MED DKR003 Compose service `backend` image uses the latest tag docker-compose.yml:61
MED DKR003 Compose service `hocuspocus` image uses the latest tag docker/pullpreview/docker-compose.yml:79
MED DKR003 Compose service `step` image uses the latest tag docker/dev/tls/docker-compose.yml:59
MED DKR003 Compose service `traefik` image uses the latest tag docker/dev/tls/docker-compose.yml:1
MED DKR003 Compose service `minio` image uses the latest tag docker/dev/minio/docker-compose.yml:2
MED DKR003 Compose service `gitlab` image uses the latest tag docker/dev/gitlab/docker-compose.yml:3
MED AUC001 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks…
MED DKR002 Compose service `cache` image has no explicit tag docker-compose.yml:105
MED DKC015 Database service has no healthcheck docker-compose.yml:113
MED DKC015 Database service has no healthcheck docker-compose.yml:92
MED DKC015 Database service has no healthcheck docker/pullpreview/docker-compose.yml:51
MED DKC015 Database service has no healthcheck docker/dev/xwiki/docker-compose.yml:18
MED DKC015 Database service has no healthcheck docker/dev/xwiki/docker-compose.yml:1
MED DKC015 Database service has no healthcheck docker/dev/keycloak/docker-compose.yml:1
MED DKC015 Database service has no healthcheck docker/dev/jira-software/docker-compose…:1
MED DKR009 Dockerfile separates apt update from install docker/dev/backend/Dockerfile:37
MED DKR001 Docker final stage has no non-root USER extensions/op-blocknote-hocuspocus/Dock…:1
MED DKR001 Docker final stage has no non-root USER docker/prod/mysql-to-postgres/Dockerfile:1
MED DKR001 Docker final stage has no non-root USER docker/prod/Dockerfile:135
MED WEB003 Public web service has no security.txt .well-known/security.txt
MED AIC004 Suspicious implementation file appears unreferenced app/models/journal/caused_by_system_upd…:1
MED DKR014 Dockerfile copies broad context with incomplete .dockerignore docker/prod/Dockerfile:83
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/shared/components/work…:36
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/features/work-packages…:107
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/features/work-packages…:64
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/features/work-packages…:208
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/features/work-packages…:131
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/features/work-packages…:130
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/core/current-user/curr…:183
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/core/current-user/curr…:126
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/core/current-user/curr…:109
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/core/apiv3/endpoints/w…:21
MED JRN003 Frontend API reference is not matched by discovered backend routes frontend/src/app/core/apiv3/endpoints/w…:8
MED AUC002 [AUC002] Low visible authorization coverage in route inventory: Only 15.7% of discovered …
MED WEB015 Public web app has no Content Security Policy index.html
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:214
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:210
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:200
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:185
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:170
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:158
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:155
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:153
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:99
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … config/routes.rb:97
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:695
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:656
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:650
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:644
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:569
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:565
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:563
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:392
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:253
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… config/routes.rb:251
MED DKC007 Compose service contains a literal secret environment value docker/dev/tls/docker-compose.yml:59
MED DKC007 Compose service contains a literal secret environment value docker/dev/minio/docker-compose.yml:2
MED DKC007 Compose service contains a literal secret environment value docker/dev/keycloak/docker-compose.yml:13
MED DKC007 Compose service contains a literal secret environment value docker/dev/keycloak/docker-compose.yml:1
MED DKC007 Compose service contains a literal secret environment value docker/dev/jira-software/docker-compose…:1
MED DKC007 Compose service contains a literal secret environment value docker/dev/hocuspocus/docker-compose.yml:1
LOW AIC003 Duplicated implementation block across source files app/components/work_package_types/form_…:58
LOW AIC003 Duplicated implementation block across source files app/components/settings/project_custom_…:34
LOW AIC003 Duplicated implementation block across source files app/components/projects/settings/projec…:14
LOW AIC003 Duplicated implementation block across source files app/components/projects/index_sub_heade…:13
LOW AIC003 Duplicated implementation block across source files app/components/projects/index_page_head…:69
LOW AIC003 Duplicated implementation block across source files app/components/placeholder_users/show_p…:17
LOW AIC003 Duplicated implementation block across source files app/components/open_project/common/inpl…:11
LOW AIC003 Duplicated implementation block across source files app/components/my/access_token/ical/row…:24
LOW AIC003 Duplicated implementation block across source files app/components/groups/edit_page_header_…:2
LOW AIC003 Duplicated implementation block across source files app/components/admin/import/jira/import…:15
LOW WEB001 Public web app has no robots.txt robots.txt
LOW DKR010 Dockerfile leaves apt package indexes in the image layer docker/dev/frontend/Dockerfile:9
LOW DKR010 Dockerfile leaves apt package indexes in the image layer docker/dev/backend/Dockerfile:69
LOW DKR010 Dockerfile leaves apt package indexes in the image layer docker/ci/Dockerfile:10
LOW WEB002 Public web app has no sitemap sitemap.xml
LOW DKR011 Dockerfile installs recommended OS packages docker/prod/mysql-to-postgres/Dockerfile:10
LOW DKR011 Dockerfile installs recommended OS packages docker/dev/frontend/Dockerfile:9
LOW DKR011 Dockerfile installs recommended OS packages docker/dev/backend/Dockerfile:69
LOW DKR011 Dockerfile installs recommended OS packages docker/dev/backend/Dockerfile:41
LOW DKR011 Dockerfile installs recommended OS packages docker/dev/backend/Dockerfile:38
LOW DKR011 Dockerfile installs recommended OS packages docker/dev/backend/Dockerfile:23
LOW DKR008 .dockerignore misses sensitive defaults .dockerignore
LOW DKR011 Dockerfile installs recommended OS packages docker/ci/Dockerfile:15
LOW DKR011 Dockerfile installs recommended OS packages docker/ci/Dockerfile:10
LOW DKC016 App service does not wait for database health docker-compose.yml:149
LOW DKC016 App service does not wait for database health docker-compose.yml:71
LOW DKC016 App service does not wait for database health docker-compose.yml:61
LOW DKC016 App service does not wait for database health docker/pullpreview/docker-compose.yml:73
LOW DKC016 App service does not wait for database health docker/pullpreview/docker-compose.yml:64
LOW AIC009 Multiple AI-agent scaffold marker files are present .github/copilot-instructions.md:1
LOW WEB008 Public docs site has no llms.txt llms.txt
LOW AIC005 Duplicate top-level symbol appears in a patch-style file app/models/journal/caused_by_system_upd…:1
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:149
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:132
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:78
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:71
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:61
LOW DKC010 Compose service lacks no-new-privileges hardening docker/pullpreview/docker-compose.yml:79
LOW DKC010 Compose service lacks no-new-privileges hardening docker/pullpreview/docker-compose.yml:73
LOW DKC010 Compose service lacks no-new-privileges hardening docker/pullpreview/docker-compose.yml:64
LOW AIC002 Source file name looks like an AI patch artifact lib/open_project/inplace_edit/handlers/…:1
LOW AIC002 Source file name looks like an AI patch artifact app/models/journal/caused_by_system_upd…:1
LOW DKC017 Database password is wired through an environment variable placeholder docker-compose.yml:92
LOW DKC017 Database password is wired through an environment variable placeholder docker/dev/xwiki/docker-compose.yml:18
LOW DKC017 Database password is wired through an environment variable placeholder docker/dev/xwiki/docker-compose.yml:1
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:149
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:71
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:61
LOW DKC006 Compose service does not declare a runtime user docker/pullpreview/docker-compose.yml:73
LOW DKC006 Compose service does not declare a runtime user docker/pullpreview/docker-compose.yml:64
LOW WEB011 Public web app has no humans.txt humans.txt
INFO MINED043 [MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr… app/helpers/frontend_asset_helper.rb:35
Reset to top 5 180 findings available (after auto-suppression of test files + won't-fix)

Issue body (markdown)

## Code-quality scan: `opf/openproject`

**Score: 88/100 (B+)**  ·  180 findings  ·  scanned 2026-06-05 14:08 UTC  ·  923,251 LOC

| Severity | Count |
|---|---|
| CRITICAL | 19 |
| HIGH | 40 |
| MEDIUM | 69 |
| LOW | 51 |

📊 [Full filterable report](https://repobility.com/scan/92b6357d-575d-4f40-a408-5de40603b739/)  ·  ![scorecard](https://repobility.com/scan/92b6357d-575d-4f40-a408-5de40603b739/report.png?v=1780668526-s2)

### Top findings

1. **CRITICAL** `MINED018` — Unsafe Deserialization Pickle
   `app/models/queries/work_packages/filter_serializer.rb:42` · CWE-502 · ✓ Repobility
2. **CRITICAL** `SEC116` — Ruby YAML.load / Marshal.load on untrusted input
   `app/models/queries/work_packages/filter_serializer.rb:42` · A08:2021 Software & Data Integrity Failures
3. **CRITICAL** `SEC079` — Python: yaml.load without SafeLoader
   `app/models/queries/work_packages/filter_serializer.rb:42` · A05:2021 Security Misconfiguration
4. **CRITICAL** `SEC096` — Rails: SQL injection via where("#{...}") or find_by_sql
   `app/models/queries/projects/filters/filter_on_project_phase.rb:155` · CWE-89
5. **CRITICAL** `SEC096` — Rails: SQL injection via where("#{...}") or find_by_sql
   `app/models/journal.rb:205` · CWE-89

---

**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/92b6357d-575d-4f40-a408-5de40603b739/_
Already filed
This repo publishes a SECURITY.md policy and the scan contains 28 Critical/High security finding(s). Public issue filing would violate coordinated disclosure. Submit privately via the project's security reporting channel.
Megaproject â high spam risk
Could not determine 'opf/openproject' 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.