CVE-2026-54888
ŚrednieCVSS 6.9Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 6 — wyżej niż 6% wszystkich znanych CVE
Streszczenie
Podatność w bibliotece mdex (oraz mdex_native) umożliwia atak DoS poprzez dostarczenie głęboko zagnieżdżonego dokumentu Markdown. Rekurencyjne funkcje konwertujące nie sprawdzają maksymalnej głębokości, co prowadzi do przepełnienia stosu C i awarii całego węzła BEAM.
Ocena ryzyka
Atakujący bez uwierzytelnienia może doprowadzić do zatrzymania wszystkich procesów Elixir/Erlang na węźle, powodując całkowitą niedostępność usługi. Awaria jest nieuchwytna i nie może być obsłużona przez maszynę wirtualną Erlanga.
Rekomendacja
Należy niezwłocznie zaktualizować mdex do wersji 0.12.3 lub nowszej, a mdex_native do wersji 0.2.3 lub nowszej. Jeśli aktualizacja nie jest możliwa, ogranicz dostęp do funkcji przetwarzających Markdown tylko dla zaufanych użytkowników.
Oryginalny opis (angielski, źródło NVD)
Uncontrolled Recursion vulnerability in leandrocp mdex allows denial of service via deeply nested Markdown input. mdex converts between an Elixir %MDEx.Document{} struct and Comrak's internal AST using two mutually recursive Rust functions, ex_document_to_comrak_ast and comrak_ast_to_ex_document, in the NIF source file document.rs. Neither function enforces a maximum nesting depth, so the recursion depth is bounded only by the structure of the input. An attacker who can get a Markdown document rendered (for example through MDEx.parse_document!/1 or MDEx.to_html/1) can supply a document with thousands of nested block quotes, which drives unbounded recursion across the NIF boundary and exhausts the native C stack. Because the resulting stack overflow is an uncatchable SIGSEGV raised inside a NIF, it cannot be contained by the Erlang runtime. It terminates the operating system process running the BEAM, killing every Elixir and Erlang process on the node, not just the caller that triggered the render. No authentication or special privileges are required. The vulnerable conversion code was extracted from mdex into the separate mdex_native package starting in mdex 0.12.3. This issue affects mdex from 0.3.0 before 0.12.3 and mdex_native from 0.1.0 before 0.2.3.

