This is a peephole in the equipment room door, not a master key
CVE-2025-0224 is an unauthenticated remote information disclosure issue in multiple Provision-ISR CCTV recorders: SH-4050A-2, SH-4100A-2L(MM), SH-8100A-2L(MM), SH-16200A-2(1U), SH-16200A-5(1U), and NVR5-8200PX, affecting versions reported as up to 20241220. Public descriptions point at exposure through the /server.js path, with a public proof-of-concept noted by VulDB/NVD.
The vendor/CNA MEDIUM 5.3 score is technically defensible in a vacuum because the bug is remote, easy, and needs no auth. Operationally, though, this lands lower for most enterprises: it is confidentiality-only, requires the recorder to be reachable over its web path, and the affected population is a niche surveillance appliance class that is often segmented or NATed rather than broadly exposed like VPNs, email gateways, or identity services.
3 steps from start to impact.
Find a reachable recorder
httpx, nmap, or internet search engines for exposed device UIs. The practical goal is simple: identify a Provision-ISR web interface that answers over HTTP/HTTPS or is reachable through a remote-management path.- The recorder's management interface or equivalent web path is reachable from the attacker position
- The device is one of the affected Provision-ISR models and still on vulnerable firmware
- Many CCTV/NVR deployments live behind NAT, on a dedicated VLAN, or are only reachable through a local console
- Enterprises that force remote access through VPNs or jump hosts break the unauthenticated-remote premise
Pull /server.js anonymously
curl or a trivial PoC to request /server.js. Per the public record, that path can disclose information without authentication, turning the bug into a low-effort reconnaissance primitive.- Anonymous HTTP(S) access to
/server.jsis allowed - No upstream control blocks or rewrites the request
- Reverse proxies, ACLs, and basic network filtering can make the vulnerable path unreachable
- Some deployments use cloud/P2P workflows rather than directly publishing the recorder UI
/server.js; off-the-shelf scanners may miss it unless a custom Nuclei template or targeted check exists.Use the leak for follow-on targeting
- The leaked content contains actionable device or environment details
- The attacker has another path to exploit the information afterward
- The bug's blast radius is bounded by what the file reveals; there is no published direct integrity or availability impact
- If the recorder is isolated from business systems, the value of the leak drops sharply
The supporting signals.
| In-the-wild status | No public evidence of active exploitation campaigns surfaced in the accessible sources I checked, and CISA KEV does not list CVE-2025-0224. |
|---|---|
| Proof-of-concept availability | Public PoC/advisory exists. NVD references the NetSecFish advisory, and VulDB states that *technical details and also a public exploit are known*. |
| EPSS | Very low either way. Your intel says 0.00209; CVEDetails showed 0.07% (~22nd percentile) at its crawl snapshot. EPSS is time-variant, but both snapshots say the same thing operationally: low expected exploitation pressure. |
| KEV status | Not KEV-listed as checked against the CISA Known Exploited Vulnerabilities catalog. |
| CVSS vector readout | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N means easy remote reachability with no auth, but the impact is only low confidentiality loss—no integrity or availability component. |
| Affected versions | Public records say the affected models are vulnerable up to 20241220. The submission trail also mentions older firmware strings including 1.2.6.0R0.B180303h.1... for impacted models. |
| Fixed version signal | Provision-ISR currently publishes newer firmware for at least the NVR5-8200PX+(MM) family, including v1.4.12_82272_RD251031, but I did not find a vendor advisory explicitly mapping that build to this CVE, so treat it as newer available firmware, not confirmed CVE fix evidence. |
| Exposure surface | The NVR documentation explicitly lists remote-facing protocols/features including DDNS, P2P, and RTSP, and the vendor markets Provision-ISR Cloud / Safari P2P access. That increases the odds of remote management being enabled somewhere, even if not directly internet-exposed. |
| Scanning / exposure telemetry | No reliable public Shodan/Censys/GreyNoise counts for this specific CVE or model appeared in accessible sources. That absence lowers confidence in any claim of large-scale exposure; I would not inflate severity based on guessed internet population. |
| Disclosure / reporter | NVD shows publication on 2025-01-05 with source attribution to VulDB; VulDB attributes the submission to netsecfish. |
noisgate verdict.
The decisive factor is exposure gating: this only matters when a niche CCTV recorder's web path is reachable to the attacker, and in many enterprise deployments that means a prior networking mistake or a deliberately exposed surveillance segment. Once reached, the impact still stays confidentiality-only with no demonstrated control or disruption path from this CVE alone.
Why this verdict
- Downward pressure: confidentiality-only bug — the published impact is an unauthenticated info leak, not RCE, auth bypass, config tampering, or service kill.
- Downward pressure: attacker must reach the recorder UI — in practice that usually means direct internet exposure, permissive NAT/UPnP, or an already-internal foothold; each of those narrows the real victim pool materially.
- Downward pressure: weak threat signal — no KEV listing, no public campaign reporting in the checked sources, and EPSS remains near the floor even across differing snapshots.
Why not higher?
If this were tied to broad internet exposure, active exploitation telemetry, or a clean chain from leak to device takeover, it would climb fast. But today the public record shows a recon aid on a relatively narrow appliance set, not a high-volume enterprise intrusion primitive.
Why not lower?
I am not calling this IGNORE because it is still remote, unauthenticated, and publicly documented, with a named path and PoC signal. For organizations that do expose surveillance gear—or that protect sensitive physical spaces—the leaked device intelligence can absolutely support follow-on attacks.
What to do — in priority order.
- Remove direct internet reachability — Block inbound access to recorder management interfaces from the public internet and force remote viewing/admin through VPN or a controlled jump path. For a LOW verdict there is no SLA (treat as backlog hygiene), but if any of these units are public-facing, do this in the next routine network change rather than waiting for firmware work.
- Disable unnecessary remote features — Review and turn off
UPnP, unusedP2P, and any unnecessaryDDNSor direct web publishing so the vulnerable path cannot be reached anonymously. For LOW, there is no SLA (treat as backlog hygiene); bundle it into the next surveillance-platform hardening cycle. - Inventory and segment the recorder fleet — Identify affected models, confirm firmware/build levels, and keep CCTV/NVR devices on a dedicated management or surveillance VLAN with tightly scoped ACLs. For LOW, there is no SLA (treat as backlog hygiene), but this is the control that most effectively reduces blast radius if another camera/NVR flaw appears later.
- Endpoint AV/EDR on user workstations doesn't help much; the vulnerable asset is an embedded recorder appliance, not a Windows endpoint.
- Password rotation alone does not fix this issue because the published attack path is unauthenticated.
- Internal patching of general-purpose servers does nothing if the NVR itself remains directly reachable over HTTP(S).
Crowdsourced verification payload.
Run this from an auditor workstation or jump host that can reach the recorder's web UI. Invoke it as bash verify-cve-2025-0224.sh https://10.20.30.40 or bash verify-cve-2025-0224.sh http://nvr.example.local; it needs no credentials and no special privileges beyond network access to the target.
#!/usr/bin/env bash
# verify-cve-2025-0224.sh
# Basic remote exposure check for CVE-2025-0224 on Provision-ISR DVR/NVR devices.
# Exit codes:
# 0 = VULNERABLE
# 1 = PATCHED
# 2 = UNKNOWN / error / could not determine
set -u
if [ "$#" -ne 1 ]; then
echo "UNKNOWN"
exit 2
fi
TARGET="$1"
CURL_OPTS=(--silent --show-error --insecure --location --max-time 10)
# Normalize target URL.
if [[ ! "$TARGET" =~ ^https?:// ]]; then
TARGET="http://$TARGET"
fi
TARGET="${TARGET%/}"
TMP_BODY="$(mktemp 2>/dev/null || echo /tmp/cve20250224_body.$$)"
TMP_HDR="$(mktemp 2>/dev/null || echo /tmp/cve20250224_hdr.$$)"
trap 'rm -f "$TMP_BODY" "$TMP_HDR"' EXIT
# Step 1: probe the published path anonymously.
HTTP_CODE=$(curl "${CURL_OPTS[@]}" -D "$TMP_HDR" -o "$TMP_BODY" -w "%{http_code}" "$TARGET/server.js" 2>/dev/null || true)
BODY_SIZE=$(wc -c < "$TMP_BODY" 2>/dev/null || echo 0)
CTYPE=$(grep -i '^content-type:' "$TMP_HDR" 2>/dev/null | tail -n1 | tr -d '\r' | cut -d' ' -f2-)
# Heuristic: anonymous 200/206 plus non-trivial JS/text body strongly suggests the exposed file is reachable.
if [[ "$HTTP_CODE" =~ ^(200|206)$ ]] && [ "$BODY_SIZE" -gt 128 ]; then
if grep -Eqi '(javascript|text/plain|application/octet-stream)' <<< "$CTYPE" || grep -Eqi '(function|var |const |let |server|http|rtsp|ddns|p2p)' "$TMP_BODY"; then
echo "VULNERABLE"
exit 0
fi
fi
# Step 2: try to find a newer firmware/build indicator on the landing page.
ROOT_BODY="$(mktemp 2>/dev/null || echo /tmp/cve20250224_root.$$)"
trap 'rm -f "$TMP_BODY" "$TMP_HDR" "$ROOT_BODY"' EXIT
ROOT_CODE=$(curl "${CURL_OPTS[@]}" -o "$ROOT_BODY" -w "%{http_code}" "$TARGET/" 2>/dev/null || true)
# Vendor pages currently show newer firmware strings such as RD251031 / v1.4.12_82272_RD251031.
# If the device UI leaks a clearly newer build marker, mark as PATCHED; otherwise stay conservative.
if [[ "$ROOT_CODE" =~ ^(200|401|403)$ ]] && grep -Eqi '(RD251031|v1\.4\.12_82272_RD251031)' "$ROOT_BODY"; then
echo "PATCHED"
exit 1
fi
# If /server.js is not reachable anonymously but we cannot confirm build level, do not overclaim.
echo "UNKNOWN"
exit 2
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.