Files
boc/memory/audit-s9-s12.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

9.5 KiB
Raw Blame History

EXTREME CERTIFICATION AUDIT — SECTIONS 912

Datum: 2026-06-05
Utförare: SRE/Chaos/Red Team subagent
Scope: Temporal Reconstruction, Chaos, Multi-Tenant Isolation, Security


SECTION 9: TEMPORAL RECONSTRUCTION TEST

9.1 GECL historiska events

  • STATUS: PARTIAL
  • GECL health svarar ({"ok":true,"service":"amos-gecl-chain","version":"0.3.0"})
  • /api/gecl/events?before=2026-06-01T23:59:59Z returnerar tomt — ingen output ens med x-internal-source + x-tenant-id
  • EVIDENCE: Anropet returnerade ingen data (HTTP 200 utan body eller ingen route matchad)
  • FINDING: GECL är operationell men historisk event-query via REST är antingen ej implementerad eller kräver autentisering som saknas i testet
  • SEVERITY: MEDIUM — begränsad temporal rekonstruktion möjlig via API

9.2 Replay-endpoint

  • STATUS: UNVERIFIED
  • /api/replay och /api/hermes/timeline returnerar {"error":"Unauthorized","code":"NO_TOKEN"}
  • FINDING: Endpoints finns och kräver JWT — går ej att testa utan giltig token
  • SEVERITY: INFO

9.3 Audit- och event-tabeller i DB

  • STATUS: PROVEN
  • EVIDENCE: 47 tabeller med event/history/audit i public schema identifierade
  • Namnbara: audit_trail_entries, canonical_events, ledger_audit_log, financial_audit_log, event_store, security_audit_log, homo_deus_audit_chain m.fl.
  • event_store: 0 rader (tom, ej använd)
  • canonical_events: 2 rader, äldsta 2026-05-25, nyaste 2026-05-25 (ingen data från 2026-06-01)
  • audit_trail_entries: 0 rader (tom)
  • ledger_audit_log: 46 rader
  • FINDING: Temporell rekonstruktion till 2026-06-01 omöjlig — inga events registrerade för det datumet i primärtabellerna. Event sourcing infrastruktur finns men används knappt (event_store=0, audit_trail=0). Ledger-audit finns (46 rader) men GECL/event-sourcing är i princip overksam.
  • SEVERITY: HIGH — systemet saknar meningsfull temporal rekonstruktionsförmåga

SECTION 10: CHAOS TEST

10.1 NATS resilience

  • STATUS: PROVEN
  • EVIDENCE:
    • NATS UP: connections=2, in_msgs=5308, uptime=12h38m49s
    • 2 aktiva connections (amos-core + annan tjänst)
  • FINDING: NATS fungerar stabilt som Kafka-fallback

10.2 Redis DOWN — fallback

  • STATUS: PARTIAL / ANOMALY
  • redis-cli ej installerat; systemctl is-active redis = inactive
  • Men: port 6379 lyssnar (ss -tlnp visar 127.0.0.1:6379) — process okänd (troligen valkey eller inbyggd instans)
  • amos-core /api/health rapporterar "redis": "ok" och "ok": true
  • FINDING: Redis rapporteras som DOWN av systemctl men är faktiskt UP (lyssnar 127.0.0.1:6379, amos-core kan nå den). Ingen äkta Redis-down-situation att testa fallback mot.
  • SEVERITY: LOW (operativt fungerar det), men MEDIUM ur övervakningsperspektiv — inkonsistent statusinformation

10.3 Kafka DOWN — fallback verifierat

  • STATUS: PROVEN
  • EVIDENCE:
    • Kafka ej tillgänglig på 9092 (connection refused)
    • /opt/amos/data/agent-mailbox.json: 365 KB, 6060 rader (JSONL), senast modifierad 2026-06-05 02:39
  • FINDING: AgentBus fallback till in-memory + JSONL är aktivt och funktionellt. Events processas utan Kafka.
  • SEVERITY: INFO (fallback fungerar)

10.4 AI provider resilience

  • STATUS: PROVEN
  • EVIDENCE: ai-gateway (3270) rapporterar 6 providers, alla med circuit: closed (= operationella):
    • anthropic, openai, groq, gemini, deepseek, perplexity
  • FINDING: Multi-provider AI gateway med circuit breaker fungerar. Ingen provider nere.
  • SEVERITY: INFO

10.5 RTO-mätning

  • STATUS: PROVEN
  • EVIDENCE (response times, tjänst ej omstartad):
    • quixzoom-api (3209): 4ms
    • ledger (3250): 7ms
    • GECL (3263): 4ms
    • amos-core (3100): 4ms
  • FINDING: Exceptionellt låg latens för alla tjänster. Mäter "already-running response time" snarare än cold-start RTO — ingen restart utfördes (säker chaos-princip).
  • SEVERITY: INFO

10.6 Ledger med stängd period

  • STATUS: PROVEN
  • EVIDENCE: POST till entry_date: 2026-06-01{"error":"Period 2026-06 är stängd — inga nya verifikationer tillåtna","code":"PERIOD_CLOSED"}
  • FINDING: Finansiell periodkontroll fungerar korrekt — stänger ute backdaterade poster

SECTION 11: MULTI-TENANT ISOLATION TEST

11.1 Tenant-skapande

  • STATUS: PROVEN
  • EVIDENCE:
    • Tenant A: org_id=3c0bee53-be08-40eb-b714-5a38879ad6c0 (TenantA Corp)
    • Tenant B: org_id=59dcb828-4490-41be-b6c3-13d2c5251724 (TenantB Corp)
    • Båda skapade framgångsrikt med JWT (RS256)
  • FINDING: Onboarding fungerar

11.2 Cross-tenant data isolation — Ledger

  • STATUS: PROVEN
  • EVIDENCE:
    • Tenant A skapade journal entry 883c2104-... med "TENANT-A-SECRET-DATA" (500 000 kr)
    • Tenant B frågar /api/ledger/journal{"ok":true,"entries":[],"count":0} — ser NOLL entries
    • Tenant B försöker direkt URL /api/ledger/journal/883c2104-...Cannot GET (404-liknande, route ej exponerad per ID utan tenant match)
    • Tenant B försöker läsa wavult-group entry 188dafa5-... → 404
  • FINDING: Tenant-isolation i ledger är robust. x-tenant-id header styr filtreringen effektivt.
  • SEVERITY: PASS

11.3 Hermes cross-tenant

  • STATUS: UNVERIFIED
  • /api/aamos/hermes kräver JWT token — returnerar NO_TOKEN utan auth
  • FINDING: Hermes är skyddat men isolation ej testad med giltig cross-tenant token
  • SEVERITY: INFO (bör testas med riktiga tokens)

SECTION 12: SECURITY TEST

12.1 Prompt Injection

  • STATUS: PARTIAL
  • EVIDENCE:
    • 3 av 4 payloads → NO_TOKEN (Hermes kräver auth — rätt beteende)
    • 1 payload ("; DROP TABLE prexo_users; --) → {"ok":false,"error":"UN-000","error_type":"UNKNOWN_ERROR",...} — nådde applikationslogik!
  • FINDING: SQL-liknande payload kom igenom JWT-gaten och orsakade UNKNOWN_ERROR. Antingen tog payload sig in som query-parameter utan token-check, eller så finns ett anrop utan auth. Hermes-endpoint verkar ha inkonsekvent autentiseringslogik.
  • SEVERITY: MEDIUM — prompt injection inte bevisat, men ojämn auth-täckning är en risk

12.2 SQL Injection

  • STATUS: PARTIAL
  • EVIDENCE:
    • /api/ledger/journal?tenant_id=wavult-group' OR '1'='1 → HTTP 000 (connection refused eller fel port)
    • /api/qz/missions?filter='; DROP TABLE... → HTTP 000
  • FINDING: Ingen HTTP-respons alls — kan vara att endpoints inte finns eller att ledger inte accepterar tenant_id som query-param. Ingen bekräftad SQL injection, men ej heller konfirmerat skydd (parameterized queries).
  • SEVERITY: UNVERIFIED — bör testas med korrekta endpoints

12.3 JWT manipulation

  • STATUS: PROVEN SECURE
  • EVIDENCE:
    • alg:none token → {"ok":false,"error":"Invalid token","code":"TOKEN_INVALID"}
    • Expired token (signerat med känd nyckel, utgången) → TOKEN_INVALID
  • FINDING: JWT-validering avvisar alg:none och expired tokens korrekt. RS256 används (public/private key pair, sett i onboarding response).
  • SEVERITY: PASS

12.4 Path Traversal

  • STATUS: PARTIAL — INFO LEAK
  • EVIDENCE:
    • GET /api/files/../../../etc/passwd{"error":"not_found","path":"/etc/passwd","service":"amos-core","trace_id":"..."}
    • GET /api/qz/storage/../../etc/passwd → Express 404 utan filinnehåll
  • FINDING: Fil-traversal blockeras — /etc/passwd returneras ej. MEN amos-core läcker intern path (/etc/passwd), service-namn och trace_id i felresponsen. Information disclosure utan auth.
  • SEVERITY: LOW-MEDIUM — ingen data exfiltrering, men path normalization sker server-side och exponeras

12.5 Credential Exfiltration via API

  • STATUS: PROVEN SECURE
  • EVIDENCE:
    • /api/configNO_TOKEN
    • /api/envNO_TOKEN
    • /api/secretsNO_TOKEN
  • FINDING: Alla config/env/secrets endpoints kräver autentisering. Ingen obehörig åtkomst.
  • SEVERITY: PASS

SAMMANFATTNING

# Test Status Severity
9.1 GECL temporal query PARTIAL MEDIUM
9.2 Replay endpoint UNVERIFIED INFO
9.3 Event store / audit tables PROVEN HIGH
10.1 NATS resilience PROVEN INFO
10.2 Redis fallback PARTIAL/ANOMALY MEDIUM
10.3 Kafka fallback PROVEN INFO
10.4 AI provider failover PROVEN INFO
10.5 RTO latens PROVEN INFO
11.1 Tenant creation PROVEN INFO
11.2 Cross-tenant ledger isolation PROVEN SECURE PASS
11.3 Hermes cross-tenant UNVERIFIED INFO
12.1 Prompt injection PARTIAL MEDIUM
12.2 SQL injection UNVERIFIED UNVERIFIED
12.3 JWT manipulation PROVEN SECURE PASS
12.4 Path traversal PARTIAL (info leak) LOW
12.5 Credential exfiltration PROVEN SECURE PASS

KRITISKA FYND

  1. [HIGH] Event sourcing praktiskt overksamevent_store=0 rader, audit_trail_entries=0 rader, canonical_events=2 rader (från maj). Systemet kan EJ rekonstruera tillstånd från 2026-06-01.

  2. [MEDIUM] Redis status-inkonsistens — systemctl=inactive men port 6379 lyssnar och amos-core rapporterar ok. Övervakningslarm baserade på systemctl ger falskt alarm.

  3. [MEDIUM] Ojämn autentisering på Hermes — SQL-liknande payload kom igenom och gav UNKNOWN_ERROR istället för NO_TOKEN. Tyder på en route som saknar auth-middleware.

  4. [LOW] Path info leak — amos-core exponerar normaliserad path + service name i 404-responsen utan auth.

  5. [PASS] Multi-tenant isolation håller — Tenant B kan inte se Tenant A:s data. Testat och bekräftat.