Not every flaw is a drama, and not every good case needs a spectacular finding. This one is the story of a small, concrete mistake in an open-source messenger — and, above all, of a response that shows how coordinated disclosure is supposed to work.
the same key on every device
SKRED stores sensitive settings encrypted on the device. Normally it creates a per-device key in the phone's secure storage (the Android Keystore). When that failed — a known problem on some older devices — a hard-coded fallback key took over. That fallback was the same on every installation.
Why it existed. The intent was benign: still protect data when the device's Keystore fails. But the fallback was not per-device — it was computed deterministically from two values baked into the code, so it was identical everywhere and reconstructible from the open source.
What it means — stated honestly. This was a fallback path, not the normal encryption route, and it affected locally stored settings, not the contents of everyone's messages. Exploiting it required access to the device itself — not a remote attack. The severity lives in the local, device-bound case. That sober framing is the point: a real but clearly bounded flaw.
new: fail closed
fallback key only reads legacy data
In the current state the fallback key is no longer used to encrypt. If the Keystore fails, the app fails closed instead of carrying on with a known key. The old key remains only to decrypt data that already exists, during migration.
A human replies — and fixes.
After the BSI forwarded the report, the vendor's technical lead replied in person. Not a boilerplate answer, but point by point, with real technical substance. He shared additional architecture documentation, pointed to the open-source code base, and began the corrections right away. Alongside the fallback key, the missing certificate pinning was added too — all traceable in the open repository.
This is how it should go.
Coordinated disclosure doesn't live on spectacular holes; it lives on what happens next. SKRED showed how it should go: openness (open source), reachability (a human answers), engagement rather than defensiveness, and prompt, verifiable fixes. That the apps are open is no accident — it is part of the same posture.