Skip to content

security: harden container, SSRF/path traversal, cookies e secrets - #1

Merged
TheusHen merged 1 commit into
mainfrom
fix/security-hardening
Sep 5, 2026
Merged

TheusHen merged 1 commit into
mainfrom
fix/security-hardening

Conversation

@TheusHen

@TheusHen TheusHen commented Sep 5, 2026

Copy link
Copy Markdown
Member

Contexto: auditoria encontrou 5 achados CRITICAL/HIGH no trace: container como root, bypass SSRF via userinfo, path traversal com encoding, Cookie Secure desabilitado atras de proxy e placeholder secrets aceitos em prod.

O que muda:

  • Dockerfile: cria usuario trace (groupadd/useradd), chown /app /data, USER trace.
  • internal/api/validation.go: ValidateURL parseia com net/url + net.ParseIP.IsPrivate/IsLoopback (corrige bypass example.com@10.0.0.1); bloqueia ftp/expect/php/data/javascript. ValidatePath decodifica %2e/%00 (3x).
  • internal/config/config.go: CookieSecure default true em production mesmo com PublicURL http; ValidateProduction rejeita placeholder secrets e exige admin password >=12.
  • go.mod/go.sum: klauspost/compress 1.17.9->1.19.2 (OOM), x/crypto 0.54->0.55.

Risco: baixo. go vet OK. Validar TRACE_ENV=production rejeita token devlocal.

- Dockerfile: run as non-root 'trace' user (groupadd/useradd,
  chown /app /data, USER trace) — closes CRITICAL root container
- internal/api/validation.go: ValidateURL now parses host via
  net/url + net.ParseIP.IsPrivate/IsLoopback (fixes userinfo bypass
  http://example.com@10.0.0.1 and missing ftp/expect/php/data schemes);
  ValidatePath decodes %2e/%00 and blocks encoded traversal
- internal/config/config.go: CookieSecure defaults to true in
  production even when PublicURL is http (TLS terminated at proxy);
  ValidateProduction rejects placeholder secrets (changeme/super-secret/
  devlocal) and requires >=12 char admin password; validates
  TRACE_JWT_SECRET/TRACE_BOOTSTRAP_TOKEN placeholders
- go.mod/go.sum: bump klauspost/compress 1.17.9->1.19.2 (OOM fix)
  and golang.org/x/crypto 0.54.0->0.55.0

Fixes: root container, SSRF bypass, path traversal %2e, Cookie Secure,
      placeholder secrets in prod, outdated deps
@TheusHen
TheusHen merged commit c80ce2b into main Sep 5, 2026
2 checks passed
@TheusHen
TheusHen deleted the fix/security-hardening branch September 5, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant