← Back to scan
File as GitHub Issue repo: ulsklyc/oikos

Push this scan report to ulsklyc/oikos

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

Workflow uses `secrets.CLAUDE_CODE_OAUTH_TOKEN` on a `pull_request` trigger

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 generic-api-key Detected a Generic API Key, potentially exposing access to various services and sensitive… test/test-api.js:102
CRIT SEC001 [SEC001] Hardcoded Password: Hardcoded password found in source code. tools/installer/locales/cli/en.sh:58
CRIT SEC001 [SEC001] Hardcoded Password: Hardcoded password found in source code. tools/installer/locales/cli/de.sh:58
CRIT SEC001 [SEC001] Hardcoded Password: Hardcoded password found in source code. tools/installer/locales/cli/cs.sh:58
CRIT MINED116 Workflow uses `secrets.CLAUDE_CODE_OAUTH_TOKEN` on a `pull_request` trigger .github/workflows/claude-code-review.yml:38
HIGH SEC040 [SEC040] innerHTML XSS — template literal with server-supplied data: Setting .innerHTML w… server/services/search.js:23
HIGH SEC085 [SEC085] JS: child_process.exec with non-literal: child_process.exec with user-derived in… tools/installer/i18n-mini.js:93
HIGH SEC085 [SEC085] JS: child_process.exec with non-literal: child_process.exec with user-derived in… server/services/ics-parser.js:28
HIGH SEC135 [SEC135] Auth/permission check missing on AI-generated endpoint: Mutating HTTP endpoint g… server/routes/notes.js:42
HIGH SEC135 [SEC135] Auth/permission check missing on AI-generated endpoint: Mutating HTTP endpoint g… server/routes/cardav.js:38
HIGH SEC135 [SEC135] Auth/permission check missing on AI-generated endpoint: Mutating HTTP endpoint g… server/routes/birthdays.js:68
HIGH SEC036 [SEC036] HTTP Header Injection / CRLF Injection: Setting an HTTP response header from use… server/middleware/csrf.js:48
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… server/services/modules.js:54
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… server/services/ics-subscription.js:28
HIGH SEC029 [SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT… public/sw.js:188
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … server/routes/weather.js:135
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … public/sw.js:137
HIGH SEC128 [SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call … public/reminders.js:210
HIGH MINED115 Action `actions/setup-node` pinned to mutable ref `@v4` .github/workflows/truenas-publish.yml:41
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v4` .github/workflows/truenas-publish.yml:32
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v4` .github/workflows/truenas-publish.yml:26
HIGH MINED115 Action `anthropics/claude-code-action` pinned to mutable ref `@v1` .github/workflows/claude.yml:35
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v4` .github/workflows/claude.yml:29
HIGH MINED115 Action `actions/setup-node` pinned to mutable ref `@v4` .github/workflows/ci.yml:25
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v4` .github/workflows/ci.yml:22
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v6` .github/workflows/docker-publish.yml:23
HIGH MINED115 Action `anthropics/claude-code-action` pinned to mutable ref `@v1` .github/workflows/claude-code-review.yml:36
HIGH MINED115 Action `actions/checkout` pinned to mutable ref `@v4` .github/workflows/claude-code-review.yml:30
HIGH MINED118 Dockerfile FROM `node:22-slim` not pinned by digest Dockerfile:18
HIGH MINED118 Dockerfile FROM `node:22-slim` not pinned by digest Dockerfile:1
HIGH MINED113 Express DELETE /:listId/items/checked has no auth server/routes/shopping.js:440
HIGH MINED113 Express POST /:listId/items has no auth server/routes/shopping.js:403
HIGH MINED113 Express DELETE /:listId has no auth server/routes/shopping.js:351
HIGH MINED113 Express PUT /:listId has no auth server/routes/shopping.js:325
HIGH MINED113 Express POST / has no auth server/routes/shopping.js:300
HIGH MINED113 Express DELETE /items/:itemId has no auth server/routes/shopping.js:256
HIGH MINED113 Express PATCH /items/:itemId has no auth server/routes/shopping.js:215
HIGH MINED113 Express PATCH /categories/reorder has no auth server/routes/shopping.js:167
HIGH MINED113 Express DELETE /categories/:catId has no auth server/routes/shopping.js:128
HIGH MINED113 Express PUT /categories/:catId has no auth server/routes/shopping.js:87
HIGH MINED113 Express POST /categories has no auth server/routes/shopping.js:53
HIGH MINED113 Express POST /maintenance-log has no auth server/routes/housekeeping.js:1052
HIGH MINED113 Express POST /supply-requests has no auth server/routes/housekeeping.js:1010
HIGH MINED113 Express DELETE /decay-tasks/:taskId has no auth server/routes/housekeeping.js:997
HIGH MINED113 Express POST /decay-tasks/:taskId/complete has no auth server/routes/housekeeping.js:981
HIGH MINED113 Express PATCH /decay-tasks/:taskId has no auth server/routes/housekeeping.js:951
HIGH MINED113 Express POST /decay-tasks has no auth server/routes/housekeeping.js:927
HIGH MINED113 Express POST /work-sessions/check-out has no auth server/routes/housekeeping.js:869
HIGH MINED113 Express DELETE /visits/:id has no auth server/routes/housekeeping.js:852
HIGH MINED113 Express POST /visits/:id/pay has no auth server/routes/housekeeping.js:831
HIGH MINED113 Express PUT /visits/:id has no auth server/routes/housekeeping.js:763
HIGH MINED113 Express POST /work-sessions/check-in has no auth server/routes/housekeeping.js:678
HIGH MINED113 Express POST /worker has no auth server/routes/housekeeping.js:499
HIGH MINED113 Express POST /setup has no auth server/auth.js:645
HIGH MINED113 Express POST /login has no auth server/auth.js:460
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:371
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:351
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:325
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:256
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:215
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:128
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/shopping.js:87
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/housekeeping.js:997
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/housekeeping.js:981
HIGH AUC003 [AUC003] Object-level route lacks visible authorization: A route with an object id-like p… server/routes/housekeeping.js:951
MED SEC045 [SEC045] eval()/exec() on stored or user-supplied data: eval() and exec() on data — even … tools/installer/i18n-mini.js:93
MED SEC045 [SEC045] eval()/exec() on stored or user-supplied data: eval() and exec() on data — even … server/services/ics-parser.js:28
MED SEC031 [SEC031] Catastrophic Backtracking Regex (ReDoS): Regex contains nested quantifiers like … server/services/ics-parser.js:31
MED SEC105 [SEC105] Cookie missing HttpOnly/Secure flag: Session cookie missing HttpOnly (allows JS … server/middleware/csrf.js:39
MED ERR002 [ERR002] Empty Catch Block: Empty catch blocks hide errors. public/sw.js:224
MED ERR002 [ERR002] Empty Catch Block: Empty catch blocks hide errors. public/sw-register.js:33
MED ERR002 [ERR002] Empty Catch Block: Empty catch blocks hide errors. public/pages/login.js:124
MED DKR003 Compose service `oikos` image uses the latest tag docker-compose.yml:1
MED AUC001 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks…
MED WEB004 robots.txt blocks the full public site public/robots.txt
MED DKR001 Docker final stage has no non-root USER Dockerfile:18
MED DKC000 Docker Compose file could not be parsed deploy/truenas/templates/docker-compose…
MED AGT007 localStorage write failures are swallowed silently public/router.js:172
MED AGT007 localStorage write failures are swallowed silently public/pages/tasks.js:1334
MED AGT007 localStorage write failures are swallowed silently public/pages/setup.js:112
MED AGT007 localStorage write failures are swallowed silently public/pages/settings.js:247
MED AGT007 localStorage write failures are swallowed silently public/pages/login.js:124
MED AGT007 localStorage write failures are swallowed silently public/pages/calendar.js:369
MED WEB003 Public web service has no security.txt .well-known/security.txt
MED DKR014 Dockerfile copies broad context with incomplete .dockerignore Dockerfile:31
MED JRN003 Frontend API reference is not matched by discovered backend routes server/index.js:296
MED JRN003 Frontend API reference is not matched by discovered backend routes server/index.js:295
MED JRN003 Frontend API reference is not matched by discovered backend routes server/index.js:281
MED JRN003 Frontend API reference is not matched by discovered backend routes server/index.js:280
MED JRN003 Frontend API reference is not matched by discovered backend routes server/index.js:194
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/settings.js:851
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/settings.js:603
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/login.js:144
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/login.js:132
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/documents.js:297
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/dashboard.js:839
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/contacts.js:250
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/contacts.js:246
MED JRN003 Frontend API reference is not matched by discovered backend routes public/pages/budget.js:377
MED JRN003 Frontend API reference is not matched by discovered backend routes public/api.js:7
MED AUC002 [AUC002] Low visible authorization coverage in route inventory: Only 32.2% of discovered …
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/shopping.js:256
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/shopping.js:128
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:1010
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:997
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:869
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:852
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:724
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:626
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/routes/housekeeping.js:609
MED AUC009 [AUC009] Sensitive function route lacks elevated authorization evidence: A route appears … server/auth.js:593
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/routes/documents.js:228
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/routes/housekeeping.js:499
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/index.js:277
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/index.js:275
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:1107
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:930
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:825
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:787
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:772
MED AUC004 [AUC004] Admin route does not show super_admin separation: An administrative route was de… server/auth.js:645
LOW AIC003 Duplicated implementation block across source files test/test-tasks.js:4
LOW AIC003 Duplicated implementation block across source files test/test-tasks.js:3
LOW AIC003 Duplicated implementation block across source files test/test-tasks.js:1
LOW AIC003 Duplicated implementation block across source files test/test-shopping.js:4
LOW AIC003 Duplicated implementation block across source files test/test-shopping.js:3
LOW AIC003 Duplicated implementation block across source files test/test-search.js:4
LOW AIC003 Duplicated implementation block across source files test/test-oidc.js:1
LOW AIC003 Duplicated implementation block across source files test/test-notes-contacts-budget.js:5
LOW AIC003 Duplicated implementation block across source files test/test-multi-assignment.js:3
LOW AIC003 Duplicated implementation block across source files test/test-meals.js:4
LOW AIC003 Duplicated implementation block across source files test/test-installer-static.js:7
LOW AIC003 Duplicated implementation block across source files test/test-installer-prereq.js:113
LOW AIC003 Duplicated implementation block across source files server/services/modules.js:10
LOW AIC003 Duplicated implementation block across source files server/services/google-calendar.js:27
LOW AIC003 Duplicated implementation block across source files server/services/google-calendar.js:26
LOW AIC003 Duplicated implementation block across source files server/services/caldav-sync.js:60
LOW AIC003 Duplicated implementation block across source files server/services/apple-calendar.js:23
LOW AIC003 Duplicated implementation block across source files public/pages/setup.js:8
LOW AUC005 [AUC005] No authorization-focused tests detected: No test files with common authorization…
LOW WEB005 robots.txt does not advertise a sitemap public/robots.txt
LOW WEB002 Public web app has no sitemap sitemap.xml
LOW DKR008 .dockerignore misses sensitive defaults .dockerignore
LOW DKR011 Dockerfile installs recommended OS packages Dockerfile:20
LOW DKR011 Dockerfile installs recommended OS packages Dockerfile:4
LOW WEB008 Public docs site has no llms.txt llms.txt
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:1
LOW AIC002 Source file name looks like an AI patch artifact scripts/restore-backup.js: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 MINED043 [MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr… setup.js:134
INFO MINED043 [MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr… public/reminders.js:94
INFO MINED043 [MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr… public/nav-icons.js:11
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … scripts/generate-icons.js:75
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … public/sw-register.js:13
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … docs/screenshots/build-unraid-composite…:105
Reset to top 5 156 findings available (after auto-suppression of test files + won't-fix)

Issue body (markdown)

## Code-quality scan: `ulsklyc/oikos`

**Score: 56/100 (B-)**  ·  156 findings  ·  scanned 2026-06-05 16:59 UTC  ·  52,490 LOC

| Severity | Count |
|---|---|
| CRITICAL | 5 |
| HIGH | 60 |
| MEDIUM | 56 |
| LOW | 29 |

📊 [Full filterable report](https://repobility.com/scan/c293919d-235d-4152-bd13-8c803fa69eb1/)  ·  ![scorecard](https://repobility.com/scan/c293919d-235d-4152-bd13-8c803fa69eb1/report.png?v=1780678748-s2)

### Top findings

1. **CRITICAL** `generic-api-key` — Detected a Generic API Key, potentially exposing access to various services and sensitive 
   `test/test-api.js:102`
2. **CRITICAL** `SEC001` — Hardcoded Password
   `tools/installer/locales/cli/en.sh:58` · A07:2021 Identification & Authentication Failures
3. **CRITICAL** `SEC001` — Hardcoded Password
   `tools/installer/locales/cli/de.sh:58` · A07:2021 Identification & Authentication Failures
4. **CRITICAL** `SEC001` — Hardcoded Password
   `tools/installer/locales/cli/cs.sh:58` · A07:2021 Identification & Authentication Failures
5. **CRITICAL** `MINED116` — Workflow uses `secrets.CLAUDE_CODE_OAUTH_TOKEN` on a `pull_request` trigger
   `.github/workflows/claude-code-review.yml:38` · ✓ Repobility

---

**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/c293919d-235d-4152-bd13-8c803fa69eb1/_
Already filed
This repo publishes a SECURITY.md policy and the scan contains 26 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 'ulsklyc/oikos' 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.