← Back to CVE Explorer

CVE-2026-53607

Full vulnerability record from the local CVENow database.

Description

ApostropheCMS is an open-source Node.js content management system. In versions up to and including 4.30.0, when `prettyUrls: true` is enabled on `@apostrophecms/file` (a documented SEO feature for serving uploaded files at clean URLs), the public pretty-URL handler builds the upstream URL using the raw `Host` HTTP request header. That URL is then `fetch`'ed and the response body + headers are streamed straight back to the requester. Because `Host` is fully attacker-controlled, an unauthenticated remote attacker can pivot the apostrophe process to issue outbound HTTP requests against any host it can reach on the private network. The path component is constrained to `/uploads/attachments/<cuid>-<slug>.<ext>` (built from a local-DB lookup), which keeps the impact narrow: cross-instance data exfiltration is neutralized by cuid uniqueness, but blind-SSRF residuals remain (network-topology mapping via response-code / timing differences and verbose proxy/WAF 404 body disclosure). As of time of publication, no known patched versions exist.

Severity
LOW
CVSS score
3.7 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-06-12 21:16:24.247000
Last modified
2026-10-25 23:10:00.167000
View original CVE JSON
{
  "id": "CVE-2026-53607",
  "sourceIdentifier": "[email protected]",
  "published": "2026-06-12T21:16:24.247",
  "lastModified": "2026-10-25T23:10:00.167",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "ApostropheCMS is an open-source Node.js content management system. In versions up to and including 4.30.0, when `prettyUrls: true` is enabled on `@apostrophecms/file` (a documented SEO feature for serving uploaded files at clean URLs), the public pretty-URL handler builds the upstream URL using the raw `Host` HTTP request header. That URL is then `fetch`'ed and the response body + headers are streamed straight back to the requester. Because `Host` is fully attacker-controlled, an unauthenticated remote attacker can pivot the apostrophe process to issue outbound HTTP requests against any host it can reach on the private network. The path component is constrained to `/uploads/attachments/<cuid>-<slug>.<ext>` (built from a local-DB lookup), which keeps the impact narrow: cross-instance data exfiltration is neutralized by cuid uniqueness, but blind-SSRF residuals remain (network-topology mapping via response-code / timing differences and verbose proxy/WAF 404 body disclosure). As of time of publication, no known patched versions exist."
    },
    {
      "lang": "es",
      "value": "ApostropheCMS es un sistema de gestión de contenido Node.js de código abierto. En versiones hasta la 4.30.0 inclusive, cuando ’prettyUrls: true’ está habilitado en ’@apostrophecms/file’ (una característica SEO documentada para servir archivos subidos en URLs limpias), el gestor público de pretty-URL construye la URL ascendente utilizando la cabecera de solicitud HTTP ’Host’ en bruto. Esa URL es entonces ’fetch’eada y el cuerpo + las cabeceras de la respuesta se transmiten directamente de vuelta al solicitante. Debido a que ’Host’ está completamente controlado por el atacante, un atacante remoto no autenticado puede pivotar el proceso de apostrophe para emitir solicitudes HTTP salientes contra cualquier host al que pueda llegar en la red privada. El componente de la ruta está restringido a /uploads/attachments/[cuid]-[slug].[ext] (construido a partir de una búsqueda en la base de datos local), lo que mantiene el impacto limitado: la exfiltración de datos entre instancias se neutraliza por la unicidad de cuid, pero quedan residuos de SSRF ciego (mapeo de la topología de red a través de diferencias en el código de respuesta / temporización y divulgación verbosa del cuerpo 404 del proxy/WAF). A la fecha de publicación, no existen versiones parcheadas conocidas."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "apostrophecms",
          "product": "apostrophe",
          "versions": [
            {
              "version": "<= 4.30.0",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N",
          "baseScore": 3.7,
          "baseSeverity": "LOW",
          "attackVector": "NETWORK",
          "attackComplexity": "HIGH",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "NONE",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.2,
        "impactScore": 1.4
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-06-15T18:35:31.782532Z",
          "id": "CVE-2026-53607",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-918"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-34pj-2622-jvxq",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-34pj-2622-jvxq",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}