Flock-camera's zitten vol beveiligingslekken en hard-coded inloggegevens

Hackers van een collectief genaamd stegan0gram hebben de data verzameld. "Waarom zouden we [Flock-camera's] alleen maar vernietigen als we ze kunnen reverse-engineeren en de geheimen kunnen ontdekken van degenen die ons bespioneren?" vertelde een van de hackers aan 404 Media en Wired in een interview. "We hebben hardware in het veld bevrijd, onschadelijk gemaakt en zijn vervolgens overgegaan tot reverse engineering van de camera's en de bijbehorende zonne-energieapparatuur."

Hieronder volgen enkele van de geheimen die ik tot nu toe heb gevonden.

De camera draait op een verouderde, end-of-life versie van Android

Flock-camera's draaien op een aangepaste versie van Android. De specifieke build die deze Flock-camera gebruikte op het moment dat de firmware werd geëxtraheerd, dateert van 5 juni 2025.

Ondanks dat dit een relatief recente build is, draaide de Flock-camera op Android 8.1. Deze versie van Android werd uitgebracht in 2017 en kreeg officieel geen ondersteuning meer van Google na 2021. En hoewel Google tot 2021 beveiligingsfixes voor Android 8.1 publiceerde, is het Android-patchniveau van deze camera 2018-06-05. Deze camera mist dus Android-beveiligingsupdates van de afgelopen acht jaar.

Android draait op de Linux-kernel. Deze Flock-camera draaide op Linux 3.18.71, uitgebracht in 2017. De 3.18-serie werd ondersteund tot mei 2019 (eindigend bij 3.18.140) — deze camera loopt dus 69 releases achter op zelfs die oude versie. Deze kernel is meer dan negen jaar verouderd.

Hier zijn enkele publiekelijk bekende kwetsbaarheden waar deze camera waarschijnlijk vatbaar voor is, en die componenten beïnvloeden die in deze camera zitten. Ik heb de camera niet fysiek in mijn bezit om deze hacks te testen en te bevestigen, maar wat ik wel weet is dat het patchniveau van deze Flock-camera voorafgaat aan al deze kwetsbaarheden, ondanks dat er al jaren patches beschikbaar zijn:

  • CVE-2021-1905 Qualcomm Adreno GPU – use-after-free: Elke code die op de Flock-camera draait, inclusief onbevoegde apps, kan het kernelgeheugen corrumperen via de GPU-driver en volledige controle over het apparaat overnemen. Gepatcht in mei 2021.
  • CVE-2018-9568 ("WrongZone") – kernel socket type confusion: Een programma dat op de camera draait, kan de socket-afhandeling van de kernel over IPv6 in de war brengen en zichzelf escaleren naar root-rechten. Gepatcht in december 2018. (Er is publieke exploit-code voor deze kwetsbaarheid beschikbaar.)

In een verklaring aan 404 Media en Wired zei een woordvoerder van Flock:

"Flock neemt beveiliging serieus en hanteert een openbaar Vulnerability Disclosure Policy zodat beveiligingsonderzoekers potentiële kwetsbaarheden rechtstreeks aan ons kunnen melden. We hebben via dat proces geen meldingen ontvangen en op basis van de beperkte verstrekte informatie hebben we onvoldoende details om de claims te beoordelen. Als de betrokkenen legitieme kwetsbaarheden hebben geïdentificeerd, moedigen we hen aan hun technische bevindingen via ons meldingsproces in te dienen, zodat ons beveiligingsteam deze kan beoordelen en eventuele passende maatregelen kan nemen."

Lachwekkend.

Waar ik dit in de data vond

Als je dit wilt volgen, heeft DDoSecrets de dataset hier gepubliceerd.

De Android-versie en het patchniveau staan op meerdere plaatsen, maar de makkelijkste plek om dit te vinden is in de systeempartitie. Als je partitions/24_system.img (1,5 GB) downloadt en uitpakt, vind je een bestand genaamd build.prop met deze regels:

ro.build.version.sdk=27
ro.build.version.release=8.1.0
ro.build.version.security_patch=2018-06-05
ro.build.date=Thu Jun  5 20:05:57 UTC 2025

De Linux-versie is te vinden in de boot-partitie. Als je partitions/21_boot.img (32 MB) downloadt en uitpakt, vind je het kernel-image in een bestand genaamd kernel. Je kunt de Linux-versie vinden met:

tail -c +16496 kernel | zcat 2>/dev/null | grep -am1 'Linux version'

Uitvoer: Linux version 3.18.71-perf-gaf770dc (android@e593ce924ef6) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Thu Jun 5 20:15:45 UTC 2025

Inloggegevens voor de live productie-infrastructuur van Flock

Voordat ik hier dieper op inga, wil ik één ding benadrukken: het is illegaal om verbinding te maken met de servers van Flock met gebruik van gelekte inloggegevens zonder hun toestemming.

De Android-firmware van deze Flock-camera bevat 20 verschillende Flock-apps, waarvan er 19 allemaal een bibliotheek delen genaamd com.flocksafety.android.common.lib. Als je de bibliotheek decompileert, is er een interessante methode in de CameraSettings-klasse:

public final String getHpnotiqApiKey() {
    return "HaJ3FgupAm8RrDJW3MHgT9X7Ft27eVaD";
}

Dit is een API-sleutel, hard-coded rechtstreeks in de app. Flock beheert een backend-service op hpnotiq.flocksafety.com. Wanneer de camera nieuwe inloggegevens nodig heeft, stuurt hij een API-verzoek naar hpnotiq dat er zo uitziet:

POST https://hpnotiq.flocksafety.com/api/v3/devices/credentials
x-api-key: HaJ3FgupAm8RrDJW3MHgT9X7Ft27eVaD
macAddress=F46ADD5746FB

Let op dat het MAC-adres van deze specifieke Flock-camera F4:6A:DD:57:46:FB is. Vermoedelijk kun je deze hard-coded API-sleutel gebruiken om inloggegevens te verkrijgen voor elke willekeurige Flock-camera, op basis van het MAC-adres.

De API lijkt te reageren met een Auth0 client ID en secret. Auth0 is een identiteitsbeheersbedrijf in eigendom van Okta. De camera slaat deze inloggegevens vervolgens in platte tekst (plaintext) op.

Ter informatie, dit zijn de inloggegevens, die mogelijk nog steeds live en actief zijn (ik weet het eerlijk gezegd niet zeker omdat ik ze niet heb geprobeerd):

{
"clientId":"CPkOAuOKFwNhPavKO01Htxbn6yIwASro",
"clientSecret":"ZRExGjbVjBB1wx04RmsMeWKbpMO5zQxLKNZg25D-1LUKbfQbmByajx-8lyB6LwSV"
}

Deze gegevens kunnen vervolgens worden gebruikt om bearer tokens te genereren door ze naar https://device-login.flocksafety.com/oauth/token te sturen. Je krijgt dan een kortstondige FlockAuth0Token terug, waarmee je als deze camera geauthenticeerd kunt communiceren met de backend-servers van Flock.

Waar ik dit in de data vond

De API-sleutel bevindt zich in de systeempartitie. Download partitions/24_system.img (1,5 GB), pak deze uit en je vindt 19 Flock-apps onder app/: flock-sambuca, flock-collins, flock-phone-home, enz., elk met een APK. Decompile er een en zoek naar CameraSettings in com.flocksafety.android.common.lib. De gedeelde bibliotheek is in alle 19 apps gebundeld, dus de sleutel zit in elke app.

flock-sambuca is de app die de sleutel gebruikt voor het verkrijgen van inloggegevens. De Auth0ServiceManager-klasse bouwt het verzoek op, en de URL's voor zowel hpnotiq.flocksafety.com als device-login.flocksafety.com staan in de string-resources van die APK (resources/res/values/strings.xml).

De Auth0 client ID en secret staan op een andere partitie. Download partitions/27persist.img (32 MB) en pak deze uit. Het bestand staat op flock/auth0/auth0cred. Dit is de /persist partitie van de camera, die niet versleuteld is en bedoeld is om een fabrieksreset te overleven.

Het MAC-adres en de 2.264 aanroepen naar hpnotiq komen uit de logs van de camera in partitions/53media.img (18 GB). Deze bevinden zich in een versleutelde container, hoewel de sleutel hiervoor op dezelfde partitie staat in een bestand genaamd expand1fcdafef903c40cab3aff81bec914d01.key. Eenmaal ontgrendeld zijn de logs gzipped tarballs onder media/0/media/crashpack/.

Deze specifieke camera bevond zich in een buitenwijk van Milwaukee

De logs van de Flock-camera bevatten 155 keer de GPS-coördinaten van de locatie, allemaal binnen ongeveer 100 meter van elkaar. Ik vermoed dat dit normale GPS-jitter is voor een ontvanger die nooit beweegt. De coördinaten die het vaakst voorkomen zijn 43.10151313, -88.05270186. Als je dit in Google Maps zoekt, kom je terecht in een buitenwijk ten noordwesten van Milwaukee.

Ik ben nog nooit in de omgeving van Milwaukee geweest, maar het lijkt erop dat deze Flock-camera zich bevindt in een stad genaamd Wauwatosa, op N Mayfair Rd, vlakbij Webster Park.

Met behulp van Google Street View ben ik over N Mayfair Rd gelopen op zoek naar een Flock-camera. Het lijkt erop dat de GPS iets afwijkt; de camera hangt aan de westkant van de straat, nabij een parkeerplaats voor het park. Het zonnepaneel op de lantaarnpaal bij het "No Parking"-bord is de Flock-camera.

Daar is hij dan: Flock-camera serienummer 23091220026 met MAC-adres F4:6A:DD:57:46:FB!

Wie had kunnen vermoeden dat dit kleine cameraatje, dat al zijn tijd besteedt aan het bespioneren van onschuldige mensen die voorbijrijden, op een dag in handen zou vallen van hackers van het stegan0gram-collectief?

Waar ik dit in de data vond

Download partitions/53_media.img (18 GB), pak deze uit, mount het (nauwelijks) versleutelde bestandssysteem en bekijk vervolgens de logs in media/0/media/crashpack/. Pak een van de logbestanden uit — het maakt niet uit welke. Daarin staan veel logs met bestandsnamen zoals ciroc.2026-*.log. Gebruik grep om te zoeken naar "Location" en je ziet de GPS-coördinaten:

cat ciroc.2026-01-27.3.log | grep Location

Uitvoer: 01-28 08:22:31.304 INFO [Binder:15841] QCamera2: Location: 43.10151313, -88.05270186 01-28 08:32:32.240 INFO [Binder:15843] QCamera2: Location: 43.10151313, -88.05270186

Ik hoop dat deze rapportage gemeenteraadsleden overal zal aanmoedigen om hun contracten met Flock en andere ALPR-leveranciers op te zeggen, en te stoppen met het geven van meer surveillance-instrumenten aan de politie ten koste van de privacy van iedereen.

Micah Lee 16 september 2026