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>
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.tsmiddleware.tsimplement real JWKS-based verification with a fail-closed default (assertAuthConfigSafe()refusesAUTH_ENFORCE=falsein 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) accepttenant_id/project_idfrom 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/0ptAPI surface has no authentication at all. Orders, admin metrics, payments (including the escrowreleasethat flips an order todelivered), subscriptions, uploads and DB-grant endpoints are unprotected in code (live-verified 200 anonymously on/api/ordersand/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) andservices/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 changeCLAUDE.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 — seedocs/compliance/GOLDEN-STANDARD-REPORT.mdcontrol 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.