CVE-2026-115931 (GCVE-0-2026-115931)

Vulnerability from cvelistv5 – Published: 2026-10-23 22:02 – Updated: 2026-10-24 14:28
VLAI
Title
Arbitrary file read and backend crash through unrestricted provider method calls
Summary
Postiz lets a signed-in user ask the backend to run a function on one of their connected channels. The backend did not restrict which functions can be requested, so a user could call internal helper functions that were never meant to be reachable from the web interface. One of those helpers reads a file from the server's disk. A user who connects a channel whose stored token is a file path can have the backend return the contents of any file it can read, including its environment, which holds the secret used to sign login sessions, the database address and the credentials of connected services. Another helper makes the backend process exit with a single request. Self-registration is open by default, so no existing account and no action by another user is needed.
Assigner
postiz CNA under the mitre root
CNA scorecard – unranked: 8 records in the last 180 days, 10 needed details
Impacted products
Vendor Product Version CPE status
GitroomHQ postiz-app Affected: 2.23.0 , < 2.25.2 (semver)
guessed Create a notification for this product.
Date Public
2026-10-23 22:00
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "packageName": "postiz-app",
          "product": "postiz-app",
          "repo": "https://github.com/gitroomhq/postiz-app",
          "vendor": "GitroomHQ",
          "versions": [
            {
              "lessThan": "2.25.2",
              "status": "affected",
              "version": "2.23.0",
              "versionType": "semver"
            }
          ]
        }
      ],
      "configurations": [
        {
          "lang": "en",
          "value": "The default configuration is affected and no setting has to be changed. Self-registration is open unless DISABLE_REGISTRATION is set to true; with registration closed, any existing user can still exploit the issue."
        },
        {
          "lang": "en",
          "value": "The image built from the project\u0027s Dockerfile.dev runs the process as root, so every file root can read is exposed. The process\u0027s own environment is readable regardless of the user it runs as."
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Anthropic, PBC"
        },
        {
          "lang": "en",
          "type": "coordinator",
          "value": "Enno Gelhaus"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Nevo David"
        }
      ],
      "datePublic": "2026-10-23T22:00:00.481Z",
      "descriptions": [
        {
          "lang": "en",
          "value": "Postiz lets a signed-in user ask the backend to run a function on one of their connected channels. The backend did not restrict which functions can be requested, so a user could call internal helper functions that were never meant to be reachable from the web interface.\n\nOne of those helpers reads a file from the server\u0027s disk. A user who connects a channel whose stored token is a file path can have the backend return the contents of any file it can read, including its environment, which holds the secret used to sign login sessions, the database address and the credentials of connected services. Another helper makes the backend process exit with a single request. Self-registration is open by default, so no existing account and no action by another user is needed."
        }
      ],
      "exploits": [
        {
          "lang": "en",
          "value": "Exploitation was demonstrated end to end against an unmodified build of Postiz at commit 3a7d28b7ad96, using only a self-registered account: the contents of a file placed outside the application\u0027s directories and the exact JWT secret the backend was started with were both returned in full. Terminating the backend with one request was demonstrated separately."
        }
      ],
      "impacts": [
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "Any registered user can read any file the backend process can read, with the result returned as bytes so binary files work."
            }
          ]
        },
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "The backend\u0027s environment is readable, which exposes the JWT signing secret, the database and Redis connection strings and the credentials and API keys of connected providers when they are passed as environment variables."
            }
          ]
        },
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "With the JWT signing secret an attacker can sign a session for any user, including a user in another organization or an instance super administrator, and can decrypt data the application stores encrypted with the same secret."
            }
          ]
        },
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "A single request ends the backend process, and it can be repeated after every restart."
            }
          ]
        },
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "Other provider functions become callable by any member of an organization that owns a channel, some of which return access tokens for the connected account that other routes keep server side."
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.9,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "format": "CVSS"
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-470",
              "description": "CWE-470",
              "lang": "en",
              "type": "CWE"
            },
            {
              "cweId": "CWE-73",
              "description": "CWE-73",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-24T14:28:58.123Z",
        "orgId": "4cdc9741-f887-419a-a2fd-acbbd2729276",
        "shortName": "postiz"
      },
      "references": [
        {
          "name": "Postiz",
          "tags": [
            "product"
          ],
          "url": "https://github.com/gitroomhq/postiz-app"
        },
        {
          "name": "v2.25.2",
          "tags": [
            "release-notes"
          ],
          "url": "https://github.com/gitroomhq/postiz-app/releases/tag/v2.25.2"
        },
        {
          "name": "9383f5b",
          "tags": [
            "patch"
          ],
          "url": "https://github.com/gitroomhq/postiz-app/commit/9383f5be4d310c346e33a3748a9a7ded64c96fed"
        },
        {
          "name": "GAdvisory",
          "tags": [
            "vendor-advisory"
          ],
          "url": "https://gadvisory.org/advisories/PSA-2026-JNXM56"
        }
      ],
      "timeline": [
        {
          "lang": "en",
          "time": "2026-10-23T19:45:00.000Z",
          "value": "Anthropic has disclosed a thorough report of this vulnerability including a working PoC to Postiz"
        },
        {
          "lang": "en",
          "time": "2026-10-23T20:00:00.000Z",
          "value": "Postiz has reproduced the vulnerability and is working on a fix"
        },
        {
          "lang": "en",
          "time": "2026-10-23T21:33:00.000Z",
          "value": "Postiz has pushed a fix for this vulnerability and verified it"
        },
        {
          "lang": "en",
          "time": "2026-10-23T22:00:00.000Z",
          "value": "Postiz has created a release and published the advisory"
        }
      ],
      "title": "Arbitrary file read and backend crash through unrestricted provider method calls",
      "workarounds": [
        {
          "lang": "en",
          "value": "Set DISABLE_REGISTRATION=true. The attacker needs an ordinary account, so closing self-registration limits exposure to people who already hold one. This reduces reach, it does not close the issue."
        }
      ]
    }
  },
  "cveMetadata": {
    "assignerOrgId": "4cdc9741-f887-419a-a2fd-acbbd2729276",
    "assignerShortName": "postiz",
    "cveId": "CVE-2026-115931",
    "datePublished": "2026-10-23T22:02:21.717Z",
    "dateReserved": "2026-10-23T21:19:33.246Z",
    "dateUpdated": "2026-10-24T14:28:58.123Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-115931",
      "date": "2026-10-25",
      "epss": "0.00485",
      "percentile": "0.41439"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "packageName": "postiz-app",
                "product": "postiz-app",
                "repo": "https://github.com/gitroomhq/postiz-app",
                "vendor": "GitroomHQ",
                "versions": [
                  {
                    "lessThan": "2.25.2",
                    "status": "affected",
                    "version": "2.23.0",
                    "versionType": "semver"
                  }
                ]
              }
            ],
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Postiz lets a signed-in user ask the backend to run a function on one of their connected channels. The backend did not restrict which functions can be requested, so a user could call internal helper functions that were never meant to be reachable from the web interface.\n\nOne of those helpers reads a file from the server\u0027s disk. A user who connects a channel whose stored token is a file path can have the backend return the contents of any file it can read, including its environment, which holds the secret used to sign login sessions, the database address and the credentials of connected services. Another helper makes the backend process exit with a single request. Self-registration is open by default, so no existing account and no action by another user is needed."
          }
        ],
        "id": "CVE-2026-115931",
        "lastModified": "2026-10-24T15:17:33.760",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 9.9,
                "baseSeverity": "CRITICAL",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "CHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.1,
              "impactScore": 6.0,
              "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-10-23T23:17:43.263",
        "references": [
          {
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
            "url": "https://gadvisory.org/advisories/PSA-2026-JNXM56"
          },
          {
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
            "url": "https://github.com/gitroomhq/postiz-app"
          },
          {
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
            "url": "https://github.com/gitroomhq/postiz-app/commit/9383f5be4d310c346e33a3748a9a7ded64c96fed"
          },
          {
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
            "url": "https://github.com/gitroomhq/postiz-app/releases/tag/v2.25.2"
          }
        ],
        "sourceIdentifier": "4cdc9741-f887-419a-a2fd-acbbd2729276",
        "vulnStatus": "Received",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-73"
              },
              {
                "lang": "en",
                "value": "CWE-470"
              }
            ],
            "source": "4cdc9741-f887-419a-a2fd-acbbd2729276",
            "type": "Secondary"
          }
        ]
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.