Security: SSRF risk in user-controlled service URLs #111

Closed
opened 2026-06-06 11:50:07 +00:00 by jmiller · 1 comment
Owner

Audit Finding

Severity: Medium

Issue:
WebhookService, MastodonService, GhostService, BlueskyService accept user-provided URLs in credentials and pass directly to curl_init() without validation. An admin could configure URLs targeting internal infrastructure (169.254.169.254, localhost).

Fix: Add URL validation to reject private/internal IP ranges. Set CURLOPT_PROTOCOLS to restrict to HTTP/HTTPS.

Files: WebhookService.php, MastodonService.php, GhostService.php, BlueskyService.php

## Audit Finding **Severity:** Medium **Issue:** WebhookService, MastodonService, GhostService, BlueskyService accept user-provided URLs in credentials and pass directly to `curl_init()` without validation. An admin could configure URLs targeting internal infrastructure (`169.254.169.254`, `localhost`). **Fix:** Add URL validation to reject private/internal IP ranges. Set `CURLOPT_PROTOCOLS` to restrict to HTTP/HTTPS. **Files:** `WebhookService.php`, `MastodonService.php`, `GhostService.php`, `BlueskyService.php`
Author
Owner

Branch created: feature/111-security-ssrf-risk-in-user-controlled-se

git fetch origin
git checkout feature/111-security-ssrf-risk-in-user-controlled-se
Branch created: [`feature/111-security-ssrf-risk-in-user-controlled-se`](https://git.mokoconsulting.tech/MokoConsulting/MokoJoomCross/src/branch/feature/111-security-ssrf-risk-in-user-controlled-se) ```bash git fetch origin git checkout feature/111-security-ssrf-risk-in-user-controlled-se ```
Sign in to join this conversation.
Type
Status
Priority
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoJoomCross#111