{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/49451?format=json","vulnerability_id":"VCID-q94j-hfzp-jqc8","summary":"PyMdown Extensions has a ReDOS bug in its Figure Capture extension\nThe original issue came through PyMdown Extensions' normal issue tracker instead of the typical security flow: https://github.com/facelessuser/pymdown-extensions/issues/2716. Because this came through the normal issue flow, it was handled as a normal issue. In the future, PyMdown Extensions will ensure such issues, even if prematurely made public through the normal issue flow, are redirected through the typical security process.\n\nThe regular expression pattern in question is as follows:\n\n```py\nRE_FIG_NUM = re.compile(r'^(\\^)?([1-9][0-9]*(?:.[1-9][0-9]*)*)(?= |$)')\n```\n\nThe POC was provided by @ShangzhiXu\n\n```py\nimport re\nimport time\n\nregex_pattern = re.compile(r'^(\\^)?([1-9][0-9]*(?:.[1-9][0-9]*)*)(?= |$)')\n\nfor i in range(50, 500, 50):\nlong_string = '1' * i + 'a'\nstart_time = time.time()\nmatch = re.match(regex_pattern, long_string)\nend_time = time.time()\nprint(f\"long_string execution time: {end_time - start_time:.6f} s\")\n```\n\nThe issue with the above pattern is that `.` was used, which accepts any character when we meant to use `\\.`. The fix was to update the pattern to:\n\n```py\nRE_FIG_NUM = re.compile(r'^(\\^)?([1-9][0-9]*(?:\\.[1-9][0-9]*)*)(?= |$)')\n```\n\nRelevant PR with fix: https://github.com/facelessuser/pymdown-extensions/pull/2717","aliases":[{"alias":"CVE-2025-68142"},{"alias":"GHSA-r6h4-mm7h-8pmq"}],"fixed_packages":[{"url":"http://public2.vulnerablecode.io/api/packages/73005?format=json","purl":"pkg:pypi/pymdown-extensions@10.16.1","is_vulnerable":false,"affected_by_vulnerabilities":[],"resource_url":"http://public2.vulnerablecode.io/packages/pkg:pypi/pymdown-extensions@10.16.1"}],"affected_packages":[],"references":[{"reference_url":"https://github.com/facelessuser/pymdown-extensions","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/facelessuser/pymdown-extensions"},{"reference_url":"https://github.com/facelessuser/pymdown-extensions/commit/b50d15a56850ed1408a284bba81cc019c6bd72e8","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/facelessuser/pymdown-extensions/commit/b50d15a56850ed1408a284bba81cc019c6bd72e8"},{"reference_url":"https://pypi.org/project/pymdown-extensions/10.16.1","reference_id":"","reference_type":"","scores":[],"url":"https://pypi.org/project/pymdown-extensions/10.16.1"},{"reference_url":"https://nvd.nist.gov/vuln/detail/CVE-2025-68142","reference_id":"CVE-2025-68142","reference_type":"","scores":[],"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-68142"},{"reference_url":"https://github.com/advisories/GHSA-r6h4-mm7h-8pmq","reference_id":"GHSA-r6h4-mm7h-8pmq","reference_type":"","scores":[],"url":"https://github.com/advisories/GHSA-r6h4-mm7h-8pmq"},{"reference_url":"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-r6h4-mm7h-8pmq","reference_id":"GHSA-r6h4-mm7h-8pmq","reference_type":"","scores":[],"url":"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-r6h4-mm7h-8pmq"}],"weaknesses":[{"cwe_id":1333,"name":"Inefficient Regular Expression Complexity","description":"The product uses a regular expression with an inefficient, possibly exponential worst-case computational complexity that consumes excessive CPU cycles."},{"cwe_id":937,"name":"OWASP Top Ten 2013 Category A9 - Using Components with Known Vulnerabilities","description":"Weaknesses in this category are related to the A9 category in the OWASP Top Ten 2013."},{"cwe_id":1035,"name":"OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities","description":"Weaknesses in this category are related to the A9 category in the OWASP Top Ten 2017."}],"exploits":[],"severity_range_score":null,"exploitability":null,"weighted_severity":null,"risk_score":null,"resource_url":"http://public2.vulnerablecode.io/vulnerabilities/VCID-q94j-hfzp-jqc8"}