Files
0pt/SECURITY.md
adminandClaude Sonnet 5 a14911b263
CI (SIAX Cloud) / security (push) Successful in 24s
Security Scan (SIAX Cloud) / security (push) Successful in 22s
CI (SIAX Cloud) / quality (push) Successful in 39s
CI (SIAX Cloud) / security (pull_request) Successful in 20s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 20s
CI (SIAX Cloud) / quality (pull_request) Successful in 38s
docs(compliance): record dated provenance for evasion-stack keep decision
AGENTS.md and SECURITY.md previously attributed keeping the WAF-bypass/
Tor/FlareSolverr/curl_cffi/cloudscraper stack to an unattributed,
unverified "medvetet användarbeslut" (deliberate user decision) with no
stated author or date -- flagged by a prior audit as unverified provenance.

Replace with an accurate, dated statement: the account owner (Simon
Axelsson) was asked directly via an interactive decision prompt on
2026-08-11, in direct response to a compliance audit's removal proposal
(the surgically-clean removal PR #7, verified 128/128 tests, was closed
unmerged), and explicitly chose to keep the code. No business or legal
rationale beyond "keep it" was given or is invented here.

This is a narrow, scoped exception for the existing 0PT/0pt-motor sourcing
engine. CLAUDE.md §1's general anti-evasion policy text is untouched and
remains in force as written unless/until the account owner says otherwise.

No code changes -- documentation only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:32:13 +02:00

4.9 KiB

Security Policy

0pt (SIAX Core Platform: Data OS) is proprietary software operated by SIAX Technology AB. This document explains how to report a suspected security vulnerability.

Reporting a vulnerability

Do not open a public GitHub issue for a suspected security problem.

Email: security@siax.io (fallback: simon@siax.io)

Include, if possible:

  • A description of the issue and the impact you believe it has.
  • Steps to reproduce, or a proof-of-concept request/response.
  • The route, endpoint, or component affected.
  • Whether the issue is already publicly known or exploited.

Response expectations

  • Acknowledgement: within 2 business days.
  • Initial triage and severity assessment: within 5 business days.
  • Remediation timeline: communicated after triage, based on severity. Confirmed high/critical issues are prioritized ahead of other work.

We will keep you informed of progress until the report is resolved and, where appropriate, credit you in internal release notes (no public bug bounty program exists at this time).

Scope

In scope:

  • The 0pt application and its API routes at 0pt.app.
  • The 0pt engine/orchestrator services in this repository.
  • Infrastructure-as-code and CI/CD configuration in this repository.

Out of scope:

  • Third-party services and dependencies not maintained in this repository (report those to the respective vendor).
  • Denial-of-service testing, spam, or social engineering against SIAX staff or customers.
  • Automated scanning that generates excessive load against production systems without prior coordination.

Note: github.com/sax3l/0pt (this checkout's origin) and git.siax.io/sax3l/0pt (Gitea) are two diverged remotes that share part of this codebase's history — see README "Known issues" for what's known and what isn't about the relationship between them. Which one is deployed to 0pt.app is currently unconfirmed; if your finding is remote-specific, say which remote/branch you tested against.

Known, already-tracked gaps

The following are not news to us — they are open, named gaps as of this pass, not secrets, and reporting them again mainly helps confirm priority rather than surfacing something new:

  • Zitadel bearer verification exists in code (fail-closed), but the deployed instance still answers /api/0pt/* anonymously (gap S1). src/auth/zitadel.ts
    • middleware.ts implement real JWKS-based verification with a fail-closed default (assertAuthConfigSafe() refuses AUTH_ENFORCE=false in production), yet a live probe (2026-08-10) got HTTP 200 without any token. Root cause is unconfirmed — do not treat the public instance as authenticated until an anonymous request receives 401. Additionally, no handler reads the verified tenant headers (x-0pt-verified-tenant): the P0 routes under /api/0pt/* (lakehouse/mappings, sources/rate-policies, sources/[sourceId]/query, documents/capture) accept tenant_id/project_id from the client-supplied request body or query string rather than from a server-bound session — a violation of this platform's own tenant-isolation rule (tenant_id must never be trusted from client input). This is an open, prioritized gap (BACKLOG P0-1/P0-2), not an intentional design.
  • The non-/api/0pt API surface has no authentication at all. Orders, admin metrics, payments (including the escrow release that flips an order to delivered), subscriptions, uploads and DB-grant endpoints are unprotected in code (live-verified 200 anonymously on /api/orders and /api/admin/metrics).
  • The WAF-bypass scraper stack is kept deliberately. services/scrapers/* (waf_bypass.py: FlareSolverr, Tor, cloudscraper, curl_cffi, proxy rotation, fake identities) and services/infra/docker-compose.data-stack.yml (flaresolverr/tor containers) contradict this repo's own compliance docs. A cleanup PR that surgically removed this stack (PR #7, verified clean, 128/128 tests) was closed unmerged by the account owner. The account owner, Simon Axelsson, was asked directly via an interactive decision prompt on 2026-08-11 whether to keep or remove this code, and explicitly chose to keep it. No business or legal justification beyond "keep it" was recorded — none is invented here. This is a narrow, scoped exception for the existing 0PT/0pt-motor sourcing engine; it does not change CLAUDE.md §1's general anti-evasion policy, which remains in force as written unless/until the account owner says otherwise. Out of scope for deletion — see docs/compliance/GOLDEN-STANDARD-REPORT.md control C6.
  • Beyond those items, other authentication gaps on internal API routes may still exist and are tracked internally pending an intentional, reviewed fix; reporting any you find is still welcome and helps confirm priority.

Disclosure

Please give us a reasonable opportunity to investigate and remediate an issue before any public disclosure. We aim to coordinate disclosure timing with reporters wherever possible.