Vulnerabilities in pkg:npm/postiz
PACKAGEGHSA-89v5-38xr-9m4j is a HIGH postiz has multiple ssrf vectors vulnerability (CWE-918: Server-Side Request Forgery (SSRF)) affecting Postiz libraries in the npm ecosystem. The issue involves postiz has multiple ssrf vectors - webhooks, rss feed, url loader. Remediation is available in the latest vendor maintenance releases.
pkg:npm/postiz
Vulnerability advisories affecting package pkg:npm/postiz. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-89v5-38xr-9m4j | - | HIGH | Postiz has Multiple SSRF Vectors - Webhooks, RSS Feed, URL Loader |
| GHSA-vj2p-7pgw-g2wf | - | HIGH | Postiz App has a High-Severity SSRF Vulnerability via Next.js |
GHSA-89v5-38xr-9m4j at a Glance
How to Fix GHSA-89v5-38xr-9m4j
To remediate this vulnerability, upgrade all affected Postiz dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install postiz@Latest secure release
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls postiz
How to Check if You Are Affected
To determine whether your Node.js application is affected by GHSA-89v5-38xr-9m4j, inspect your project dependencies using npm:
npm ls postiz
Analyze the terminal output to locate any version of Postiz in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than the patched release), your application is affected.
Note: The npm ls postiz command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-918: Server-Side Request Forgery (SSRF), where the web server receives a url or similar request from an upstream component and retrieves the contents of this url, but it does not sufficiently ensure that the request is being sent to the expected destination. In Postiz, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
GHSA-89v5-38xr-9m4j Affected Postiz Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
postiz
|
npm |
≤ 2.0.12
|
|
References
Frequently Asked Questions
What is GHSA-89v5-38xr-9m4j?
Which Postiz versions are affected?
What version fixes GHSA-89v5-38xr-9m4j?
Is postiz affected?
What CWE is associated with GHSA-89v5-38xr-9m4j?
How can I check npm dependencies for GHSA-89v5-38xr-9m4j?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-89v5-38xr-9m4j",
"modified" : "2026-03-27T15:47:57Z",
"published" : "2026-03-27T15:47:57Z",
"aliases" : [ ],
"summary" : "Postiz has Multiple SSRF Vectors - Webhooks, RSS Feed, URL Loader",
"details" : "## Summary\n\nPostiz has multiple SSRF vulnerabilities where user-provided URLs are fetched server-side without any IP validation or SSRF protection.\n\n## Vulnerable Code\n\n### 1. Webhook Send Endpoint (Most Critical)\n\n**`apps/backend/src/api/routes/webhooks.controller.ts` lines 58-70:**\n```typescript\nasync sendWebhook(@Body() body: any, @Query('url') url: string) {\n try {\n await fetch(url, { // No URL validation\n method: 'POST',\n body: JSON.stringify(body),\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (err) { }\n return { send: true };\n}\n```\n\nAccepts arbitrary URL via query parameter and fetches directly.\n\n### 2. Stored Webhook Delivery\n\n**`apps/orchestrator/src/activities/post.activity.ts` lines 256-281:**\n```typescript\nasync sendWebhooks(postId: string, orgId: string, integrationId: string) {\n const webhooks = await this._webhookService.getWebhooks(orgId);\n return Promise.all(\n webhooks.map(async (webhook) => {\n await fetch(webhook.url, { // Stored URL, no validation\n method: 'POST',\n body: JSON.stringify(post),\n });\n })\n );\n}\n```\n\n### 3. RSS/XML Feed Parser\n\n**`libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.ts` line 135:**\n```typescript\nasync loadXML(url: string) {\n const { items } = await parser.parseURL(url); // No URL validation\n}\n```\n\n### 4. HTML Content Loader\n\n**`libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.ts` line 185:**\n```typescript\nasync loadUrl(url: string) {\n const loadDom = new JSDOM(await (await fetch(url)).text()); // No validation\n}\n```\n\n## Missing Protections\n\n- No `request-filtering-agent` or SSRF library\n- No private IP range filtering\n- No cloud metadata endpoint blocking\n- No DNS rebinding protection\n- URL validation only via `@IsUrl()` decorator (format only, no IP check)\n\n## Attack Scenarios\n\n1. `POST /webhooks/send?url=http://169.254.169.254/latest/meta-data/` → AWS metadata theft\n2. `POST /autopost/send?url=http://127.0.0.1:6379` → Internal Redis access\n3. Create webhook with `http://10.0.0.1:8080/admin` → Internal service access on post publish\n\n## Impact\n\n- **Cloud metadata theft**: AWS/GCP/Azure credentials\n- **Internal network scanning**: Full access to private IP ranges\n- **Multiple entry points**: Webhooks, RSS feeds, URL loader all vulnerable",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:H/SI:L/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "postiz"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"last_affected" : "2.0.12"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-89v5-38xr-9m4j"
}, {
"type" : "WEB",
"url" : "https://github.com/gitroomhq/postiz-app/commit/0ad89ccd26b1c387c4f3f3544b18c20d33586466"
}, {
"type" : "WEB",
"url" : "https://github.com/gitroomhq/postiz-app/commit/be5d871896e97cb1f5a2c9241f156b6a1e1debe8"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/gitroomhq/postiz-app"
}, {
"type" : "WEB",
"url" : "https://github.com/gitroomhq/postiz-app/releases/tag/v2.21.2"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-918" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-03-27T15:47:57Z",
"nvd_published_at" : null
}
}