Description
PrivateBin is an online pastebin where the server has zero knowledge of pasted data. Prior to 2.0.5, Request::getRequestUri() in lib/Request.php passes $_SERVER['REQUEST_URI'] through FILTER_SANITIZE_URL, which does not remove quotation marks, angle brackets, or apostrophes, and Controller::_init() stores the attacker-controlled value in Controller::$_urlBase. Controller::_jsonld() in lib/Controller.php then uses str_replace() to insert that value without JSON escaping into js/types.jsonld, js/paste.jsonld, and the other JSON-LD templates used by /?jsonld= and /?pasteid. A raw quotation mark delivered by an HTTP client, proxy, or structured-data crawler that does not normalize the request target can break out of the JSON string and inject arbitrary key-value data into a CORS-open application/ld+json response. The jsonld branch in Controller::__construct() returns before _setCacheHeaders(), so the response also lacks X-Content-Type-Options: nosniff, Content Security Policy, X-Frame-Options, and Referrer-Policy. Direct script execution was not demonstrated, but manipulated responses can affect structured-data consumers or combine with less strict clients. This issue is fixed in version 2.0.5.
Published: 2026-08-28
Score: 0 Low
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

PrivateBin provides a JSON‐LD endpoint that incorporates the raw REQUEST_URI value without escaping, allowing an attacker to insert raw quotation marks into the JSON string. This input–output flaw (CWE‑116) enables the injection of arbitrary key–value pairs into the application/ld+json response, which can result in data tampering, unintended client‑side behavior such as cross‑site scripting, or other malicious use of the crafted structured data. Although direct script execution was not demonstrated, the altered responses can affect consumers that parse the JSON and may be combined with less strict clients to produce more severe outcomes.

Affected Systems

Products from the PrivateBin organization running PrivateBin prior to version 2.0.5 are affected. The vulnerability was addressed by the maintainers and fixed in release 2.0.5.

Risk and Exploitability

No CVSS score is publicly available for this issue and the EPSS metric is not provided. The vulnerability does not require authentication and can be triggered by any externally reachable HTTP request that delivers a specially crafted REQUEST_URI containing characters such as quotation marks. Because the injected JSON is delivered to clients that consume structured data, an attacker can modify the data seen by browsers, crawlers, or other automated agents. The absence of protective headers such as X‑Content‑Type‑Options, Content‑Security‑Policy, X‑Frame‑Options, and Referrer‑Policy further increases the risk that the injected payload could be executed or misinterpreted by vulnerable consumers.

Generated by OpenCVE AI on August 28, 2026 at 23:51 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade PrivateBin to version 2.0.5 or later
  • Implement stricter filtering or escaping of REQUEST_URI before inclusion in JSON responses
  • Add headers such as X‑Content‑Type‑Options: nosniff, Content‑Security‑Policy, X‑Frame‑Options, and Referrer‑Policy to all responses containing application/ld+json data

Generated by OpenCVE AI on August 28, 2026 at 23:51 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-xrjc-c68j-hp7w PrivateBin has reflected JSON injection in backend responses via unescaped REQUEST_URI
History

Sat, 29 Aug 2026 00:00:00 +0000

Type Values Removed Values Added
First Time appeared Privatebin
Privatebin privatebin
Vendors & Products Privatebin
Privatebin privatebin

Fri, 28 Aug 2026 22:00:00 +0000

Type Values Removed Values Added
Description PrivateBin is an online pastebin where the server has zero knowledge of pasted data. Prior to 2.0.5, Request::getRequestUri() in lib/Request.php passes $_SERVER['REQUEST_URI'] through FILTER_SANITIZE_URL, which does not remove quotation marks, angle brackets, or apostrophes, and Controller::_init() stores the attacker-controlled value in Controller::$_urlBase. Controller::_jsonld() in lib/Controller.php then uses str_replace() to insert that value without JSON escaping into js/types.jsonld, js/paste.jsonld, and the other JSON-LD templates used by /?jsonld= and /?pasteid. A raw quotation mark delivered by an HTTP client, proxy, or structured-data crawler that does not normalize the request target can break out of the JSON string and inject arbitrary key-value data into a CORS-open application/ld+json response. The jsonld branch in Controller::__construct() returns before _setCacheHeaders(), so the response also lacks X-Content-Type-Options: nosniff, Content Security Policy, X-Frame-Options, and Referrer-Policy. Direct script execution was not demonstrated, but manipulated responses can affect structured-data consumers or combine with less strict clients. This issue is fixed in version 2.0.5.
Title PrivateBin: Reflected JSON injection in backend responses via unescaped REQUEST_URI
Weaknesses CWE-116
References
Metrics cvssV3_1

{'score': 0, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N'}


Subscriptions

Privatebin Privatebin
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-28T20:23:50.477Z

Reserved: 2026-06-17T16:59:42.760Z

Link: CVE-2026-55891

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-28T22:16:51.957

Modified: 2026-08-28T22:16:51.957

Link: CVE-2026-55891

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-29T00:00:15Z

Weaknesses
  • CWE-116

    Improper Encoding or Escaping of Output