Confidential · October 2026

Security briefing

What the architecture discovery found, what to confirm in production, and what to do first.

Alexander · Tech Lead

Before we start

What this is, and what it is not

  • BasisCode and configuration onlyA static, read-only review, plus cloud settings read on 14 October. Nothing was tested.
  • UnknownReal exposureIt depends on edge controls we cannot see in the repositories. That is the first thing to confirm.
  • HandlingConfidentialNo secret values are included. Details stay with the people who verify and fix.
Every P0 is a candidate until it is confirmed in production.

Summary

One root cause behind most findings

14P0 candidates, if confirmed in production
133write routes that accept requests without login
1shared key that can act as a user in any tenant
0findings tested against live systems
Authentication is opt-in, and the caller decides which tenant it is. Routes are open unless someone closes them, and the tenant comes from a header or host, not from the verified login.

Confidential. Static review of 19 repositories, snapshot 2026-10-11, refreshed 2026-10-13; cloud configuration read 2026-10-14. Nothing tested against live systems.

01

P0 candidates

P0 · Identity and tokens

Logins can be issued or reused across tenants

IDFindingPotential impact
SEC‑01An endpoint without authentication issues long-lived login tokens for a given usernameAccount takeover in any tenant
SEC‑02Tokens are not bound to a tenant; the tenant comes from the requestA token from one tenant may act in another
SEC‑03One shared API key authenticates as the first user of any tenantFull cross-tenant access if the key leaks
First move: block the token endpoint at the edge, inventory who holds the shared key, then rotate.

P0 · Anonymous access

Data can be changed without logging in

IDFindingPotential impact
SEC‑24Anonymous write APIs on public hosts: planning, requests, quotations, Bus Network syncAnyone can change operational and sales data in any tenant
SEC‑25SMS and email can be sent through a tenant's provider without loginSMS cost abuse; phishing from a customer's sender
SEC‑28Upload and download links for any tenant's file storage, without loginArbitrary uploads; downloads of known files
First move: take the internal scheduler off public hosts and require login on file links. Both are edge or config changes.

P0 · Satellite services

Satellites let the client pick the operator

IDFindingPotential impact
SEC‑04Bus Network takes the company from the request; some routes are protected only by a key in the browserCross-operator data access
SEC‑07A Customer Portal route has no user authenticationDisclosure of a user's organisation access
SEC‑08Customer Portal picks the target operator from the request and calls TEQ with one shared master tokenA user of operator A may act on operator B
SEC‑09The public API proxy forwards partner tokens to a host taken from the requestPartner tokens sent to a host an attacker chooses

P0 · Secrets

Secrets sit in git and in logs

IDFindingPotential impact
SEC‑05Policy-service credentials committed to gitPolicy store and token signing compromised, if values match an environment
SEC‑06Kubernetes secrets printed in CI logs; a database URI logged by the policy serviceAnyone with log access can read secrets
SEC‑10bTokens and secrets printed to CloudWatch by gateway functionsReusable credentials for anyone with log access
First move: rotate, remove the printing, purge logs and git history, and turn on secret scanning.

02

New since 11 October

New · Infrastructure

The infrastructure confirms the gaps

IDFindingPotential impact
SEC‑44Production database reachable from 33 internet address ranges (confirmed live)Direct database access from outside AWS
SEC‑45Infrastructure changes apply on merge with static cloud keys; one self-approvable approvalWeakly reviewed changes to production
SEC‑46Cluster management API open to the internet (confirmed live); no secrets encryption or audit logsLarger attack surface, no trail
SEC‑47Infrastructure state committed to git inside old plan filesResource details, possibly secrets, in history
SEC‑48All environments run in the organisation's main account, with one deploy keyDev access reaches production's account
Checked live: production backups and deletion protection are on, and bastions exist.

New · Partner API, packages and CI

One improvement, five new findings

  • ImprovedPublic API checks scopesThe shared key no longer works there.
  • SEC-41Clients linkable without scopesA tenant can grant lasting API access.
  • SEC-42Long-lived cloud keysIn three services; reach unknown.
  • SEC-43Tokens in git historyTwo GitHub tokens, one Google key.
  • SEC-49CI actions not pinnedOne compromised in 2025 deploys prod.
  • SEC-45, 16Weak prod approvalsSelf-approval allowed, any branch.

New · Cloud access · SEC-50

One CI role can take over the cloud account

  • WhatFull admin, any repositoryA deploy role with administrator rights that every repository's workflows can use.
  • Why it mattersShortest path to everythingOne compromised workflow could control the account that runs production.
  • First moveNarrow it, then remove adminOne role per repository and environment, with only the rights it needs.
Check first: which workflows use it, so nothing breaks. Then change it, after a reviewed dry run.

New · Tenant isolation · SEC-51

Cancelling an order can change another operator's data

  • WhatThe cancel switches operator midwayFor orders with trips shared from another operator, the rest of the cancel runs in that operator's data.
  • Why it mattersNormal use, wrong customerTheir trips, order and payment links can be changed, and their drivers told trips are cancelled.
  • First moveSmall fix, then a data checkFix the code with a test, then look for affected orders and repair them.
A defect, not an attack. It needs no attacker, which is why it may already have happened. The data check tells us.

03

Confirm and contain

Confirm · read-only

Six checks, no testing against production

  1. Edge: which exposed paths are reachable?
  2. Access logs: anonymous hits, last 90 days
  3. Secrets: do leaked keys match? Who reads logs?
  4. Tenants: do user IDs overlap?
  5. Databases: backups, public access, open ports
  6. Orders: cancels that reached another operator

Rotate now

Rotate three sets of credentials now

  • SEC-40 · Ferd web appThird-party API credentials in git historyCommitted in an AI-assistant chat log. Rotate with the provider, then scrub.
  • SEC-05 · Policy serviceCredentials and signing secret in gitRotate, purge from history, check whether they matched an environment.
  • SEC-43 · Shared packagesTwo GitHub tokens and a Google key in historyRevoke the tokens, restrict the key, publish packages from CI.
Cheap and reversible. All three are in git whatever production looks like. Add a rule that chat logs and tokens are never committed, enforced by secret scanning.

High findings

Next in line after the P0s

  • SEC-10, 26Weak object-level checksLogged-in users can act on records that are not theirs.
  • SEC-11, 29, 30Exposed toolingAdmin, translation editor and debug tools, plus a policy bypass.
  • SEC-16, 17, 22Environments and CILong-lived keys, staging and prod share a cluster, no WAF.
  • SEC-34, 35Driver appSMS credentials sent to devices; tokens sent to third parties.
  • SEC-19, 23, 27Secrets in logsTenant secrets in one database; keys and personal data in logs.
  • SEC-36 to 39Apps not yet liveFerd and the map service: fix before launch.

Sequence

Confirm, contain, fix, then make it the default

  1. Days 0–2Review the briefing. Run the six checks.
  2. Days 2–5Edge containment. Start rotating credentials.
  3. Week 2Code fixes in satellites. Plan for safe defaults, log-only first.
  4. OngoingTracked in the roadmap, and as ISO 27001 evidence.
Every first step is reversible. Edge rules can be rolled back, rotation only replaces values, and behaviour changes ship behind flags.

Agree today

Four things to settle before the checks run

  1. Who runs the checks, and by when
  2. Who decides if something is an incident
  3. Who handles GDPR notification if data was accessed (72 hours)
  4. Which vendor leads we need for the satellite fixes
If the checks show unauthorized access, incident and data-protection duties apply. That assessment is outside this technical review.

Thank you

Questions

Alexander · Tech Lead

Ferdia CTO: Security briefing for October 2026

By Alexander Vassbotn Røyne-Helgesen

Ferdia CTO: Security briefing for October 2026

  • 82