Skip to content
Heist/ feed
Back to feed
High

league/commonmark: Quadratic-time denial of service when parsing crafted Markdown

Type: advisorySources: OSV

league/commonmark is a PHP library for parsing and rendering CommonMark Markdown. From 0.6.0 until 2.9.0, specially crafted Markdown lines can cause the parser to have quadratic time complexity when converting, because several parsing paths repeatedly rescan growing portions of a line to translate between character positions and byte positions, and the Autolink extension can also copy and validate the remaining line at every URL-like prefix, allowing an attacker who can submit Markdown for conversion to consume disproportionate CPU time with a comparatively small request. This issue is fixed in 2.9.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-71488
Confirmed fixed CVEs
Not specified
Updated in this feed
5 Nov 2026, 01:51 UTC · Revision 1

Source evidence

league/commonmark: Quadratic-time denial of service when parsing crafted Markdown

core-osv · Original source

Published 6 Aug 2026, 20:37 UTC

league/commonmark is a PHP library for parsing and rendering CommonMark Markdown. From 0.6.0 until 2.9.0, specially crafted Markdown lines can cause the parser to have quadratic time complexity when converting, because several parsing paths repeatedly rescan growing portions of a line to translate between character positions and byte positions, and the Autolink extension can also copy and validate the remaining line at every URL-like prefix, allowing an attacker who can submit Markdown for conversion to consume disproportionate CPU time with a comparatively small request. This issue is fixed in 2.9.0.

osv:CVE-2026-71488
Complete source record
{
  "id": "0dc7a14280a75a008c7f0c11f1470313884c28793a8248c3a664c5eb0fd2dda8",
  "url": "https://osv.dev/vulnerability/CVE-2026-71488",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "league/commonmark: Quadratic-time denial of service when parsing crafted Markdown",
    "summary": "league/commonmark is a PHP library for parsing and rendering CommonMark Markdown. From 0.6.0 until 2.9.0, specially crafted Markdown lines can cause the parser to have quadratic time complexity when converting, because several parsing paths repeatedly rescan growing portions of a line to translate between character positions and byte positions, and the Autolink extension can also copy and validate the remaining line at every URL-like prefix, allowing an attacker who can submit Markdown for conversion to consume disproportionate CPU time with a comparatively small request. This issue is fixed in 2.9.0.",
    "evidence": "osv:CVE-2026-71488",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-71488",
      "aliases": [
        "CVE-2026-71488",
        "GHSA-2q4p-g7hv-5rgv"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/thephpleague/commonmark",
              "type": "GIT",
              "events": [
                {
                  "introduced": "c352207aab15706a1ca9c25e5bd30c847899a0c9"
                },
                {
                  "fixed": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529"
                },
                {
                  "fixed": "a6ef6cdc308dfa39a34239c35818e75892a0e6a8"
                },
                {
                  "fixed": "a70979ea0d7d3377bd7127536748454a922bf5eb"
                },
                {
                  "fixed": "c97b02e5e652b992033b93ba5d6182f706343fc6"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0.6.0"
                      },
                      {
                        "fixed": "2.9.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "a6ef6cdc308dfa39a34239c35818e75892a0e6a8"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "a70979ea0d7d3377bd7127536748454a922bf5eb"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "c97b02e5e652b992033b93ba5d6182f706343fc6"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "2.9.0"
                  }
                ]
              }
            }
          ],
          "versions": [
            "2.8.3",
            "2.8.2",
            "2.8.1",
            "2.8.0",
            "2.7.0",
            "2.6.0",
            "2.5.0",
            "2.4.0",
            "2.3.0",
            "2.2.0",
            "2.1.0",
            "2.0.2",
            "2.0.1",
            "2.0.0",
            "2.0.0-rc2",
            "2.0.0-rc1",
            "2.0.0-beta3",
            "2.0.0-beta2",
            "2.0.0-beta1",
            "0.18.1",
            "0.17.4",
            "0.17.2",
            "0.17.0",
            "0.16.0",
            "0.15.7",
            "0.15.6",
            "0.15.5",
            "0.15.4",
            "0.15.3",
            "0.15.2",
            "0.15.1",
            "0.15.0",
            "0.14.0",
            "0.13.4",
            "0.13.3",
            "0.13.2",
            "0.13.1",
            "0.13.0",
            "0.12.0",
            "0.11.3",
            "0.11.2",
            "0.11.1",
            "0.11.0",
            "0.10.0",
            "0.9.0",
            "0.8.0",
            "0.7.1",
            "0.7.0",
            "0.6.1",
            "0.6.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-71488.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:41.550349284Z",
      "provider": "osv",
      "references": [
        "https://github.com/thephpleague/commonmark/releases/tag/2.9.0",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71488.json",
        "https://github.com/thephpleague/commonmark/security/advisories/GHSA-2q4p-g7hv-5rgv",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-71488",
        "https://github.com/thephpleague/commonmark/commit/a6ef6cdc308dfa39a34239c35818e75892a0e6a8",
        "https://github.com/thephpleague/commonmark/commit/a70979ea0d7d3377bd7127536748454a922bf5eb",
        "https://github.com/thephpleague/commonmark/commit/c97b02e5e652b992033b93ba5d6182f706343fc6"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-1050",
          "CWE-407"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71488.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-71488",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 509231,
  "published_at": "2026-08-06T20:37:17.488+00:00"
}