PHP2Shell: Read our blog on the critical RCE vulnerabilities affecting 70% of the Internet
Vulnerability DatabaseCVE-2026-102941

CVE-2026-102941: 
Wolfi vulnerability analysis and mitigation

Overview

CVE-2026-102941 is a denial-of-service vulnerability in the gomarkdown/markdown Go library caused by an out-of-bounds slice operation in the parser.IsSafeURL function. The flaw was originally discovered and reported by researcher arpitjain099, first published to the GitHub Advisory Database on July 25, 2026, and formally disclosed on October 16, 2026. All versions of github.com/gomarkdown/markdown prior to 0.0.0-20260724235538-61af6e1e6971 are affected; the vulnerability has been present since 2022. It carries a CVSS v3.1 base score of 7.5 (High) (GitHub Advisory, Feedly).

Technical details

The root cause is an improper ordering of a slice operation and its bounds guard in parser/parser.go within the IsSafeURL function (CWE-125: Out-of-bounds Read). The code evaluates url[:nPath] on line 789 before the nLink >= nPath length check on line 790; when len(url) < nPath and cap(url) < nPath, Go's runtime raises an unrecoverable slice-bounds panic. This affects only the relative-path prefix loop (/, ./, ../) — the adjacent URI scheme loop is already correctly guarded. The panic is reachable via two attack surfaces: (1) calling markdown.ToHTML with the html.Safelink flag enabled on Markdown containing an empty or very short link destination (e.g., [x]()), or (2) directly passing a 0-, 1-, or 2-byte attacker-controlled URL to the exported parser.IsSafeURL function. Because no recover() is present, the panic terminates the calling goroutine without the possibility of graceful error handling (GitHub Advisory, Fix Commit).

Impact

Successful exploitation causes an unrecoverable process crash (denial of service) in any Go application that renders untrusted Markdown using the html.Safelink flag or that passes short attacker-controlled URLs to parser.IsSafeURL. There is no impact on confidentiality or integrity — the vulnerability is purely an availability issue. Services such as documentation platforms, comment systems, or API gateways that process user-supplied Markdown are at risk of complete service disruption from a single malformed input (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code or exploit kit integration has been identified, and there is no evidence of in-the-wild exploitation at the time of disclosure. The EPSS score is 0.0, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities catalog. However, exploitation requires no authentication, no privileges, and no user interaction — a single HTTP request containing a crafted Markdown payload (e.g., [x]()) is sufficient to trigger the panic in a vulnerable service (GitHub Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Identify services that accept and render user-supplied Markdown using the gomarkdown/markdown Go library with the html.Safelink flag enabled (e.g., documentation sites, wikis, comment systems, or REST APIs that return rendered HTML).
  2. Craft malicious payload: Prepare a Markdown document containing an empty or very short link destination, such as [x](), [x](.), or [x](..). These inputs produce 0-, 1-, or 2-byte URL byte slices that trigger the panic.
  3. Submit payload: Send the crafted Markdown to the target service via any available input channel (e.g., HTTP POST body, form field, API endpoint).
  4. Trigger panic: The server-side markdown.ToHTML call invokes IsSafeURL, which attempts url[:nPath] on the short URL before the length guard, causing a slice-bounds panic that crashes the calling goroutine.
  5. Achieve denial of service: Because no recover() is present, the goroutine terminates unrecoverably. Depending on the application's architecture, this may crash the entire process or render the service unavailable (GitHub Advisory, Fix Commit).

Indicators of compromise

  • Logs: Application logs showing Go runtime panic messages such as runtime error: slice bounds out of range [:N] with capacity M originating from parser/parser.go in the IsSafeURL function; sudden process exit or goroutine crash entries in service logs.
  • Network: Repeated HTTP requests to Markdown-rendering endpoints containing link syntax with empty or minimal destinations (e.g., [x](), [x](.), [x](..)); a spike in 500-series error responses or connection resets from the affected service following such requests.
  • Process: Unexpected termination of the Go application process; crash dump files or core dumps generated by the Go runtime following a slice-bounds panic.

Mitigation and workarounds

Upgrade github.com/gomarkdown/markdown to version 0.0.0-20260724235538-61af6e1e6971 or later, which fixes the issue by moving the url[:nPath] slice operation inside the nLink >= nPath length guard in IsSafeURL (Fix Commit). As a temporary workaround for services that cannot immediately upgrade, consider disabling the html.Safelink flag (note: this removes URL sanitization hardening) or validating that link destinations are at least 3 bytes long before passing them to the library. Applications that call parser.IsSafeURL directly should add their own length pre-check (len(url) >= 3) before invoking the function (GitHub Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

golang-github-gomarkdown-markdown

Affected

sid

golang-github-gomarkdown-markdown: 0.0~git20260725.8435af3-1

Fixed

trixie

golang-github-gomarkdown-markdown

Affected

RHEL / CentOS

Affected

OpenShift

Not Affected

Source: This report was generated using AI

Related Wolfi vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-111064HIGH8.2
  • Wolfi logoWolfi
  • elastic-connectors-8.19
NoYesOct 19, 2026
CVE-2026-111063MEDIUM6.3
  • Wolfi logoWolfi
  • dask-kubernetes
NoYesOct 19, 2026
CVE-2026-109619CRITICALN/A
  • PHP logoPHP
  • php74
NoYesOct 21, 2026
CVE-2026-109618CRITICALN/A
  • PHP logoPHP
  • php5.6
NoYesOct 21, 2026
CVE-2026-111943HIGHN/A
  • Grafana logoGrafana
  • ca-certificates
NoYesOct 20, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management