Biblioteka league/commonmark w wersjach od 0.6.0 do 2.9.0 jest podatna na atak wyczerpania zasobów CPU poprzez specjalnie spreparowane dane Markdown. Atakujący może spowodować nieproporcjonalnie wysokie zużycie procesora, co skutkuje odmową usługi (DoS).
▸ Pokaż oryginał (EN)
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.
Podatność wynika z kwadratowej złożoności czasowej parsera podczas przetwarzania określonych linii Markdown. Kilka ścieżek parsowania wielokrotnie przeskanowuje rosnące fragmenty linii w celu przeliczania pozycji znaków na pozycje bajtowe. Dodatkowo rozszerzenie Autolink przy każdym wykrytym prefiksie przypominającym adres URL kopiuje i waliduje pozostałą część linii, co wielokrotnie zwiększa ilość wykonywanych operacji. W efekcie stosunkowo niewielkie żądanie zawierające odpowiednio skonstruowany tekst Markdown może wywołać nieproporcjonalne obciążenie procesora serwera.
Atakujący nieposiadający żadnych uprawnień może doprowadzić do wyczerpania zasobów CPU serwera, skutkując odmową usługi (DoS) dla pozostałych użytkowników aplikacji.
Należy zaktualizować bibliotekę league/commonmark do wersji 2.9.0, w której problem został naprawiony. Pakiet dostępny jest przez Composer — zalecane polecenie: composer update league/commonmark.
Biblioteka league/commonmark w wersjach od 0.6.0 do 2.8.x (podatność naprawiona w wersji 2.9.0).
Podatność dotyczy wyłącznie aplikacji, które umożliwiają użytkownikom zewnętrznym przesyłanie treści Markdown do konwersji po stronie serwera. Poprawka dostępna jest w ramach trzech commitów opublikowanych wraz z wydaniem 2.9.0.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H