Skip to content
Heist/ feed
Back to feed
Medium

Mechanize sends credential headers to a different scheme or port after a redirect

Type: advisorySources: OSV

The Mechanize library is used for automating interaction with websites. Prior to 2.14.1, Mechanize::HTTP::Agent#response_redirect treats redirects as same-origin when the host matches without consistently comparing scheme and port. A same-host HTTPS-to-HTTP redirect can send Authorization and Cookie headers over cleartext, while a same-host redirect to another port can send a caller-supplied Cookie header to a different service. Cookies in Mechanize#cookie_jar remain scoped separately; the issue affects caller-supplied headers and can disclose credentials without affecting integrity or availability. This issue is fixed in version 2.14.1.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-107714
Confirmed fixed CVEs
Not specified
Updated in this feed
8 Nov 2026, 03:21 UTC · Revision 1

Source evidence

Mechanize sends credential headers to a different scheme or port after a redirect

core-osv · Original source

Published 8 Oct 2026, 21:26 UTC

The Mechanize library is used for automating interaction with websites. Prior to 2.14.1, Mechanize::HTTP::Agent#response_redirect treats redirects as same-origin when the host matches without consistently comparing scheme and port. A same-host HTTPS-to-HTTP redirect can send Authorization and Cookie headers over cleartext, while a same-host redirect to another port can send a caller-supplied Cookie header to a different service. Cookies in Mechanize#cookie_jar remain scoped separately; the issue affects caller-supplied headers and can disclose credentials without affecting integrity or availability. This issue is fixed in version 2.14.1.

osv:CVE-2026-107714
Complete source record
{
  "id": "f027ceab65f4a44a7278add2b2737d2d20d2d4fc6004aa1746a60e92c27ae3fa",
  "url": "https://osv.dev/vulnerability/CVE-2026-107714",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Mechanize sends credential headers to a different scheme or port after a redirect",
    "summary": "The Mechanize library is used for automating interaction with websites. Prior to 2.14.1, Mechanize::HTTP::Agent#response_redirect treats redirects as same-origin when the host matches without consistently comparing scheme and port. A same-host HTTPS-to-HTTP redirect can send Authorization and Cookie headers over cleartext, while a same-host redirect to another port can send a caller-supplied Cookie header to a different service. Cookies in Mechanize#cookie_jar remain scoped separately; the issue affects caller-supplied headers and can disclose credentials without affecting integrity or availability. This issue is fixed in version 2.14.1.",
    "evidence": "osv:CVE-2026-107714",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-107714",
      "aliases": [
        "CVE-2026-107714",
        "GHSA-5jgv-wc2m-xv99"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/sparklemotion/mechanize",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "a40941e3a29720850e5b6158340d78e239b4f9a5"
                },
                {
                  "fixed": "02a1235842d6eda8d4a5a3d8f13aba2cecf52e4f"
                },
                {
                  "fixed": "2f97fe358a91928e5e48221f2ec5cb50fa1a43ba"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.14.1"
                      }
                    ],
                    "source": "DESCRIPTION"
                  },
                  {
                    "range": [
                      {
                        "fixed": "02a1235842d6eda8d4a5a3d8f13aba2cecf52e4f"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "2f97fe358a91928e5e48221f2ec5cb50fa1a43ba"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "a40941e3a29720850e5b6158340d78e239b4f9a5"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v2.14.1"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v2.14.0",
            "v2.13.0",
            "v2.12.2",
            "v2.12.1",
            "v2.12.0",
            "v2.11.0",
            "v2.10.1",
            "v2.10.0",
            "v2.9.2",
            "v2.9.1",
            "v2.9.0",
            "v2.8.5",
            "v2.8.4",
            "v2.8.3",
            "v2.8.2",
            "v2.8.1",
            "v2.8.0",
            "v2.7.7",
            "v2.7.6",
            "v2.7.5",
            "v2.7.4",
            "v2.7.4.beta3",
            "v2.7.4.beta2",
            "v2.7.4.beta1",
            "v2.7.3",
            "v2.7.2",
            "v2.7.1",
            "v2.7.0",
            "v2.6.0",
            "v2.5.1",
            "v2.5",
            "v2.4",
            "v2.3",
            "v2.2.1",
            "v2.2",
            "v2.1.1",
            "v2.1",
            "v2.1.pre.1",
            "v2.0.1",
            "v2.0",
            "v2.0.pre.2",
            "v2.0.pre.1",
            "REL_1.0.0",
            "REL_0.9.2",
            "REL_0.9.1",
            "REL_0.8.4",
            "REL_0.8.3",
            "REL_0.8.2",
            "REL_0.8.0",
            "REL_0.7.8",
            "REL_0.7.7",
            "REL_0.7.6"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-107714.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:53.205490411Z",
      "provider": "osv",
      "references": [
        "https://github.com/sparklemotion/mechanize/releases/tag/v2.14.1",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107714.json",
        "https://github.com/sparklemotion/mechanize/security/advisories/GHSA-5jgv-wc2m-xv99",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-107714",
        "https://github.com/sparklemotion/mechanize/commit/02a1235842d6eda8d4a5a3d8f13aba2cecf52e4f",
        "https://github.com/sparklemotion/mechanize/commit/2f97fe358a91928e5e48221f2ec5cb50fa1a43ba",
        "https://github.com/sparklemotion/mechanize/pull/676"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-200",
          "CWE-319",
          "CWE-522"
        ],
        "cna_assigner": "GitHub_M",
        "unresolved_ranges": [
          {
            "extracted_events": [
              {
                "range": [
                  {
                    "fixed": "2.15.0"
                  }
                ],
                "source": "AFFECTED_FIELD",
                "strategy": "StringRangeExpression"
              }
            ]
          }
        ],
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107714.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-107714",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 522162,
  "published_at": "2026-10-08T21:26:16.092+00:00"
}