← Back to CVE Explorer

CVE-2026-75628

Full vulnerability record from the local CVENow database.

Description

Punk::OAuth2 versions before 0.03 for Perl allow an attacker-chosen off-site redirect after login because same_origin_path accepts a backslash or tab in the return parameter. oauth2_login reads the return parameter from the initiation request, runs same_origin_path over it, and stores the survivor in the session flow record as the post-login redirect target. That check rejects a value that does not begin with a slash, one with a slash as its second byte, and one containing CR or LF. A backslash and a tab pass. The URL Standard treats a backslash as equivalent to a slash for special schemes, so `/\evil.example` parses with the authority `evil.example`. It also strips ASCII tab before parsing, so a tab between two leading slashes leaves `//evil.example`. A crafted link to the application's own login route lands the victim on the attacker's site after a genuine authentication. The redirect carries no authorization code or access token.

Severity
MEDIUM
CVSS score
5.7 (v3.1)
Vulnerability status
Deferred
Source identifier
9b29abf9-4ab0-4765-b253-1875cd9b441e
Published
2026-08-20 01:16:53.803000
Last modified
2026-10-27 10:10:00.240000
View original CVE JSON
{
  "id": "CVE-2026-75628",
  "sourceIdentifier": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
  "published": "2026-08-20T01:16:53.803",
  "lastModified": "2026-10-27T10:10:00.240",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Punk::OAuth2 versions before 0.03 for Perl allow an attacker-chosen off-site redirect after login because same_origin_path accepts a backslash or tab in the return parameter.\n\noauth2_login reads the return parameter from the initiation request, runs same_origin_path over it, and stores the survivor in the session flow record as the post-login redirect target. That check rejects a value that does not begin with a slash, one with a slash as its second byte, and one containing CR or LF. A backslash and a tab pass. The URL Standard treats a backslash as equivalent to a slash for special schemes, so `/\\evil.example` parses with the authority `evil.example`. It also strips ASCII tab before parsing, so a tab between two leading slashes leaves `//evil.example`.\n\nA crafted link to the application's own login route lands the victim on the attacker's site after a genuine authentication. The redirect carries no authorization code or access token."
    },
    {
      "lang": "es",
      "value": "Las versiones de Punk::OAuth2 anteriores a la 0.03 para Perl permiten un redireccionamiento externo (fuera del sitio) elegido por el atacante después del inicio de sesión porque same_origin_path acepta una barra invertida o una tabulación en el parámetro return.\n\noauth2_login lee el parámetro return de la solicitud de inicio, ejecuta same_origin_path sobre él y almacena el superviviente en el registro de flujo de la sesión como el objetivo de redireccionamiento posterior al inicio de sesión. Esa verificación rechaza un valor que no comienza con una barra, uno con una barra como su segundo byte, y uno que contiene CR o LF. Una barra invertida y una tabulación pasan. El Estándar URL trata una barra invertida como equivalente a una barra para esquemas especiales, por lo que ’/\\evil.example’ se analiza con la autoridad ’evil.example’. También elimina la tabulación ASCII antes del análisis, por lo que una tabulación entre dos barras iniciales deja ’//evil.example’.\n\nUn enlace manipulado a la propia ruta de inicio de sesión de la aplicación lleva a la víctima al sitio del atacante después de una autenticación genuina. El redireccionamiento no lleva ningún código de autorización ni token de acceso."
    }
  ],
  "affected": [
    {
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
      "affectedData": [
        {
          "defaultStatus": "unaffected",
          "collectionURL": "https://cpan.org/modules",
          "packageName": "Punk-OAuth2",
          "modules": [
            "Punk::OAuth2"
          ],
          "programFiles": [
            "include/pox/pox_util.h",
            "lib/Punk/Plugin/OAuth2.pm"
          ],
          "programRoutines": [
            {
              "name": "Punk::OAuth2::same_origin_path"
            }
          ],
          "packageURL": "pkg:cpan/Punk-OAuth2",
          "versions": [
            {
              "version": "0",
              "lessThan": "0.03",
              "versionType": "custom",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:N/A:N",
          "baseScore": 5.7,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "LOW",
          "userInteraction": "REQUIRED",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "NONE",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.1,
        "impactScore": 3.6
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-28T15:11:05.001417Z",
          "id": "CVE-2026-75628",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-601"
        }
      ]
    },
    {
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-601"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://datatracker.ietf.org/doc/html/rfc9700#section-4.11.1",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://metacpan.org/release/LNATION/Punk-OAuth2-0.02/source/include/pox/pox_util.h#L94",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://metacpan.org/release/LNATION/Punk-OAuth2-0.03/changes",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://url.spec.whatwg.org/#concept-basic-url-parser",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://url.spec.whatwg.org/#relative-slash-state",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "http://www.openwall.com/lists/oss-security/2026/08/20/1",
      "source": "af854a3a-2127-422b-91ae-364da2661108"
    }
  ]
}