Vendor Disclosure Email - Herospeed Technology Limited
To: support@herospeed.net CC: security.research@uniaogeek.com.br (researcher) Subject: Security Vulnerability Report - Herospeed NVR N-series (4 Critical/High Findings) Date: 2026-05-15 Embargo Expires: 2026-08-13 (90 days)
To: support@herospeed.net
Subject: Security Vulnerability Report - Herospeed NVR N-series (4 Critical/High Findings)
Importance: High
Dear Herospeed Technology Security Team,
My name is André Henrique, a security researcher at Uniao Geek
(https://github.com/Uniao-Geek). I am writing to report four security
vulnerabilities affecting your NVR N-series product line (N3009, N3016,
N3109, N3332, F30) running firmware versions v2.0.4 (2023) through
v2.0.8 (2025).
This disclosure follows responsible disclosure practices. I am notifying
you simultaneously with a submission to CERT/CC VINCE, as is standard
coordinated vulnerability disclosure practice. I request a 90-day embargo
period (until 2026-08-13) to allow patch development.
═══════════════════════════════════════════════════════════
AFFECTED PRODUCTS
═══════════════════════════════════════════════════════════
The following firmware images were obtained from herospeed.net and
analyzed via static binary analysis and QEMU ARM emulation:
- N3009_32NR_ALH1P4: V2.0.4.230818_R2 (9CH, ALIIOT platform)
- N3009_32NR_BVH1P4: V2.0.6.240826_R5 (9CH, BV variant)
- N3016_32NR_ALH1P8: V2.0.4.230817_R4 (16CH)
- N3016_32NR_BVH1P8: V2.0.6.240826_R5 (16CH)
- N3109_32NR_BVH1P4A0: V2.0.6.240823_R7 (9CH, alt hardware)
- N3332_32NR_ALH2P0A4: V2.0.4.230825_R2 (32CH)
- NVR_F30_BV: V2.0.8.250609_R1 (F30 series, 2025)
Platform: SiGmaStar MC6830 ARM Cortex-A7, Boa/0.94.13 HTTP server
(libweb.so), Linux BusyBox.
═══════════════════════════════════════════════════════════
VULNERABILITY SUMMARY
═══════════════════════════════════════════════════════════
FINDING 1 - CRITICAL (CVSS 9.8): Hardcoded Root Password Hash
The DES crypt hash "12ZpTwfyH6/Bs" for the root account is present
identically in ALL 7 analyzed firmware images from 2023 to 2025.
This hash appears in /etc/passwd as:
root:12ZpTwfyH6/Bs:0:0::/root:/bin/sh
Busybox telnetd is available in all firmware versions. Combined with
any code execution vulnerability, this provides immediate root access.
FINDING 2 - CRITICAL (CVSS 9.1): Unauthenticated Credential Metadata
The /api/session/login-capabilities endpoint returns per-user salt,
challenge nonce, and sessionID without any prior authentication.
This enables offline SHA-256 KDF credential reconstruction without
triggering any lockout or rate-limiting mechanism.
Proof (curl command, no credentials required):
curl -s -X POST http://DEVICE_IP/api/session/login-capabilities \
-H "Content-Type: application/json" \
-H "Api-Version: v4.0.0" \
-d '{"action":"get","data":{"username":"admin"}}'
Response includes: salt, challenge, sessionID - all without auth.
FINDING 3 - HIGH (CVSS 8.8): Upgrade Package Shell Execution RCE
Vector A (v2.0.4): update.sh sources the "version" file from the
upgrade package using the shell "." operator without sanitisation:
. $version_remote_file
Any shell command in the version file executes as root.
Vector B (v2.0.6 - NOTE: This is in your PATCHED version):
Your v2.0.6 patch introduced a NEW, MORE EXPLICIT execution path.
update.sh now contains:
detect_shell=/tmp/update/version
if head -n 1 "$detect_shell" | grep -q '^#!/bin'; then
cp ${detect_shell} /tmp/retreat.sh
chmod -R 777 /tmp/retreat.sh
/tmp/retreat.sh ← DIRECT EXECUTION OF UPLOADED SCRIPT
fi
A "version" file starting with "#!/bin/sh" is explicitly executed.
This is not a partial fix - it introduces a cleaner attack vector.
An authenticated attacker uploads a crafted firmware to:
POST /api/upgrade/upgrade-file
The upgrade pipeline then executes the injected commands as root.
FINDING 4 - MEDIUM (CVSS 6.5): XVR Legacy Interface Credential Disclosure
The /vb.htm?selectalluserlist endpoint (accessible with Basic HTTP auth
using any valid account) returns all user credentials with passwords
encoded in Base64. This is simpler to exploit than the SHA-256 KDF API
and enables direct credential recovery:
Response: "1=default_id, 2=admin, 3=MTIzNDU=, ..." where field 3
is the admin password base64-encoded (e.g., "MTIzNDU=" = "12345").
═══════════════════════════════════════════════════════════
PROOF OF CONCEPT
═══════════════════════════════════════════════════════════
A full end-to-end PoC script is attached (HEROSPEED_E2E_POC.py) which
demonstrates all four vulnerabilities. The script has been validated
against emulated Herospeed NVR firmware (QEMU ARM user-mode chroot).
To demonstrate FINDING 2 (no auth required, safe to test):
python3 HEROSPEED_E2E_POC.py --target DEVICE_IP --phase 1
═══════════════════════════════════════════════════════════
ESTIMATED EXPOSURE
═══════════════════════════════════════════════════════════
Independent security researcher c3l3r1on (Poland) identified 100,000+
exposed devices in Europe via FOFA (query: body="longseSha256"). Our
conservative global estimate is 50,000+ internet-exposed NVR devices
sharing these vulnerabilities.
Shodan queries for verification:
https://www.shodan.io/search?query=http.html%3A%22longseSha256%22
https://www.shodan.io/search?query=http.html%3A%22LsNXVRPlugin%22
═══════════════════════════════════════════════════════════
REMEDIATION RECOMMENDATIONS
═══════════════════════════════════════════════════════════
1. CRITICAL - Remove the hardcoded root hash from all firmware.
Generate device-unique root credentials at factory.
2. CRITICAL - Require authentication before returning any data from
/api/session/login-capabilities (return an error for unauthenticated
requests, or remove the salt/challenge from the unauthenticated response).
3. HIGH - Rewrite update.sh to validate upgrade package integrity before
sourcing or executing the version file. Use an allowlist of permitted
variable names; do NOT use "." (source) or execute the file directly.
Remove the retreat.sh execution mechanism entirely.
4. MEDIUM - Disable or remove the /vb.htm legacy XVR interface from NVR
firmware. If retained for compatibility, require session-based auth and
never return passwords in any encoding.
5. Replace DES crypt in /etc/passwd with SHA-512 crypt or bcrypt.
═══════════════════════════════════════════════════════════
TIMELINE AND COORDINATION
═══════════════════════════════════════════════════════════
2026-05-15: This email sent to support@herospeed.net
2026-05-15: Concurrent submission to CERT/CC VINCE
2026-08-13: Embargo expires (90 days from today)
I am requesting:
1. Acknowledgment of receipt within 5 business days
2. A vendor tracking number for this report
3. Expected patch timeline within 30 days of acknowledgment
4. Coordination on CVE assignment (via CERT/CC CNA)
If I do not receive acknowledgment by 2026-05-22, I will proceed with
CERT/CC-coordinated public disclosure on 2026-08-13.
I am happy to provide additional technical details, test artifacts,
or firmware samples to assist in reproducing and patching these issues.
Sincerely,
André Henrique
Security Researcher | Uniao Geek
Email: security.research@uniaogeek.com.br
GitHub: https://github.com/mrhenrike
ORCID: https://orcid.org/0009-0006-0688-4973
Research IDs: HSLS-2026-001, HSLS-2026-002, HSLS-2026-003, HSLS-2026-004
Embargo: 2026-05-15 to 2026-08-13 (90 days)
CERT/CC VINCE: Submitted concurrently
Attachments to include in the email
| File | Description |
|---|---|
HEROSPEED_E2E_POC.py | End-to-end proof of concept script (Python 3) |
HEROSPEED_LONGSEE_RESEARCH_REPORT.md | Full technical research report |
HEROSPEED_Vulns_HSLS2026_UniaoGeek.zip | ZIP with all files for VINCE upload |
Follow-up communication template (14 days after no response)
Subject: RE: Security Vulnerability Report - Herospeed NVR N-series (FINAL NOTICE before CERT/CC)
Dear Herospeed Security Team,
This is a follow-up to my initial responsible disclosure email sent on
2026-05-15 regarding four security vulnerabilities in your NVR N-series
product line (HSLS-2026-001 through HSLS-2026-004, CVSS 9.8 CRITICAL).
I have not received any acknowledgment or response after 14 business days.
As stated in my initial email, I will proceed with CERT/CC-coordinated
public disclosure on 2026-08-13. CERT/CC VINCE has already been notified
and is actively coordinating on this case.
This is a final notice. To avoid uncoordinated public disclosure of
critical vulnerabilities affecting 50,000+ internet-exposed devices,
I strongly encourage you to acknowledge this report immediately.
André Henrique
security.research@uniaogeek.com.br
CERT/CC VINCE Case: [VU#XXXXXX - to be updated after assignment]