Files
boc/aamos-ledger-sprint1-status.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

4.8 KiB

AAMOS Ledger - Sprint 1 Säkerhetshårdning - Statusrapport

Sammanfattning

Sprint 1 påbörjades och stora delar är klara, men några kritiska säkerhetsfixar återstår.

Klart

1. JWT Secrets (delvis)

  • auth.mjs: Hårdkodad secret borttagen. Använder nu process.env.AMOS_JWT_SECRET || process.env.JWT_SECRET
  • index.mjs: Hårdkodad secret borttagen. Använder nu env-variabler
  • SECURITY.md: Dokumentation skapad

2. Internal Tokens

  • auth.mjs: Hårdkodade interna tokens borttagna. Endast process.env.LEDGER_INTERNAL_TOKEN

3. RBAC (delvis)

  • auth.mjs: Full RBAC-implementering med roller: admin, accountant, viewer
  • index.mjs: RBAC på viktiga endpoints:
    • POST /api/ledger/accounts (admin, accountant)
    • POST /api/ledger/journal (admin, accountant)
    • POST /api/ledger/journal/:id/post (admin, accountant)
    • POST /api/ledger/journal/:id/void (admin, accountant)

4. Säkerhetsheaders & Rate limiting

  • helmet installerat och konfigurerat
  • express-rate-limit installerat och konfigurerat (1000 req/15min i prod)
  • CORS begränsat i production

5. Beroenden

  • zod, helmet, express-rate-limit tillagda till package.json

Kvar att göra (KRITISKT)

1. Hårdkodad secret i period-workflow.mjs (KRITISKT)

Fil: /opt/amos/services/aamos-ledger/period-workflow.mjs rad 24

// NU (osäkert):
const _JWT_SECRET = process.env.AMOS_JWT_SECRET || process.env.JWT_SECRET || 'y8Lf__vnWpImX2lxyPo3R0WYFEgCrtmQ3r8FcCwKjAWTNsLBKhaqIrP5oGAdt31E';

// BÖR VARA:
const _JWT_SECRET = process.env.AMOS_JWT_SECRET || process.env.JWT_SECRET;

// Kasta fel om JWT_SECRET saknas i production
if (process.env.NODE_ENV === 'production' && !_JWT_SECRET && !_ledgerPrivKey) {
  throw new Error('AMOS_JWT_SECRET eller JWT_SECRET måste sättas i production');
}

2. RBAC saknas på flera endpoints

Följande endpoints har INTE RBAC-skydd:

Endpoint Metod Status
/api/ledger/customers POST Oskyddad
/api/ledger/journal/:id/upload POST Oskyddad
/api/ledger/journal/:id/receipt POST Oskyddad
/api/ledger/journal/:id/receipts GET Oskyddad
/api/ledger/periods/:period/open POST Oskyddad
/api/ledger/periods/:period/submit-review POST Oskyddad
/api/ledger/periods/:period/approve POST Oskyddad
/api/ledger/periods/:period/reject POST Oskyddad
/api/ledger/periods/:period/close POST Oskyddad
/api/ledger/periods/:period/reopen POST Oskyddad

Rekommenderade roller:

  • POST /api/ledger/customers → requireRole(ROLES.ADMIN, ROLES.ACCOUNTANT)
  • POST /api/ledger/journal/:id/upload → requireRole(ROLES.ADMIN, ROLES.ACCOUNTANT)
  • POST /api/ledger/journal/:id/receipt → requireRole(ROLES.ADMIN, ROLES.ACCOUNTANT)
  • POST /api/ledger/periods/* → requireRole(ROLES.ADMIN) (period-hantering = admin-only)

3. Zod-validering ej implementerad

Zod är importerat men inga valideringsscheman är skrivna.

Behövs för:

  • POST /api/ledger/accounts (account_number, name, account_type, normal_balance)
  • POST /api/ledger/journal (entry_date, description, lines-array)
  • POST /api/ledger/customers (name, org_number, etc.)
  • POST /api/ledger/periods/* (period, fiscal_year, reason)

4. Validering av JWT_SECRET i auth.mjs

auth.mjs kastar inte fel om JWT_SECRET saknas i production när RS256 inte används.

🔧 Fixar som behöver appliceras

Fix 1: period-workflow.mjs

sudo sed -i "s/const _JWT_SECRET = process.env.AMOS_JWT_SECRET || process.env.JWT_SECRET || 'y8Lf__vnWpImX2lxyPo3R0WYFEgCrtmQ3r8FcCwKjAWTNsLBKhaqIrP5oGAdt31E';/const _JWT_SECRET = process.env.AMOS_JWT_SECRET || process.env.JWT_SECRET;\n\n\/\/ Kasta fel om JWT_SECRET saknas i production\nif (process.env.NODE_ENV === 'production' \&\& !_JWT_SECRET \&\& !_ledgerPrivKey) {\n  throw new Error('AMOS_JWT_SECRET eller JWT_SECRET måste sättas i production');\n}/" /opt/amos/services/aamos-ledger/period-workflow.mjs

Fix 2: Lägg till RBAC på period-workflow endpoints

I period-workflow.mjs, lägg till requireRole(ROLES.ADMIN) på alla period-endpoints.

Fix 3: Lägg till RBAC på återstående index.mjs endpoints

Lägg till requireRole(ROLES.ADMIN, ROLES.ACCOUNTANT) på:

  • POST /api/ledger/customers
  • POST /api/ledger/journal/:id/upload
  • POST /api/ledger/journal/:id/receipt

📋 Verifiering

Efter fixar, testa:

cd /opt/amos/services/aamos-ledger
sudo systemctl restart aamos-ledger
sudo journalctl -u aamos-ledger -f

📁 Ändrade filer (från tidigare arbete)

Fil Status
auth.mjs Härdad
index.mjs Delvis härdad
period-workflow.mjs Hårdkodad secret kvar
package.json Zod/helmet/rate-limit tillagda
SECURITY.md Skapad