CVE-2022-4993

Kritik

Təsvir

Perl üçün HTML::FormHandler-in 0.410000 versiyasından əvvəlki versiyaları, hücum edənin seçdiyi metodun çağırılmasına (method dispatch) və resursların tükənməsinə şərait yaradır, çünki _apply_actions və add_error funksiyaları sorğu məlumatlarından qurulmuş xəta mesajı mətnini Locale::Maketext mötərizə notasiyalı şablonu kimi istifadə edir. add_error özünün birinci arqumentini dil dəstəyinə (language handle) Locale::Maketext mesaj açarı kimi ötürür və standart dəstəyin leksikonu `_AUTO` parametrini təyin etdiyi üçün leksikon girişi olmayan sətir axtarılmaq əvəzinə mötərizə notasiyalı şablon kimi kompilyasiya edilir. Mötərizə qrupunda ilk token dil dəstəyi üzərində çağırılan metodu adlandırır, digər tokenlər isə onun arqumentləridir. Kitabxananın müəllifi tərəfindən yazılmayan üç növ mətn bu nöqtəyə çatır. _apply_actions, xəbərdarlıq mətnini `$error_message`-də saxlayan bir `$SIG{__WARN__}` idarəçisi quraşdırır və tutulan xəbərdarlıq uğurlu hərəkətdən sonra da qalır; beləliklə, rəqəm çevirməsi (numeric transform) olan sahə `Argument "[sprintf,%50000000d,0]" isn't numeric` ifadəsini şablona çevirir; xəbərdarlıq göndərilmiş dəyəri olduğu kimi dırnağa alır, buna görə də qrup düzgün formalaşır və çağırılır. `$error_message ||= $tobj->validate($new_value)` ifadəsi tip məhdudiyyətinin (type constraint) öz uğursuzluq mesajını götürür ki, bu da rədd edilən dəyəri mötərizə və vergül formasında qismən dumper vasitəsilə render edir (Moose yüklənə bildikdə Devel::PartialDump, həmişə isə Type::Tiny-nin öz dumperi ilə); beləliklə, birdən çox dəfə göndərilmiş və massiv kimi gələn parametrlərlə `apply => [ Str ]` verilmiş bir sahə, heç bir mötərizə simvolu daşımayan sorğudan `Reference ["a","b"] did not pass type constraint "Str"` şablonunu alır. Coercion və ya transform istisnası da eyni yolla bura çatır. Bunlardan əlavə, mesajı sahə dəyərini ehtiva edən bir validator həmin dəyəri birbaşa şablona yerləşdirir və add_error mesaj siyahısını birinci arqument olan arrayref-in məzmunu ilə əvəzləyir (`@message = @{$message[0]} if ref $message[0] eq 'ARRAY'`), buna görə də massiv kimi gələn dəyər eyni sorğudan arqument slotlarını doldurur. `[0]` kimi yanlış formalaşmış qrup kompilyasiyanın xətaya səbəb olmasına yol açır və HTML::FormHandler::I18N::maketext və add_error hər biri bunu die kimi yenidən qaldırır, nəticədə process() xəta atır. sprintf adlandıran düzgün formalaşmış qrup, hücum edən tərəfindən seçilmiş sahə genişliyi ilə CORE::sprintf-ə çatır. Etibarsız sahəyə tip məhdudiyyəti və ya transform tətbiq edən hər hansı çağıran, yaxud validatoru etibarsız sahə dəyərini add_error-a ötürən tərəf, process()-dən idarə olunmayan istisnanın atılmasına və ya bir sorğuda ixtiyari miqdarda yaddaş ayrılmasına səbəb ola bilər. Dil dəstəyi alt-sinfi yan təsirləri olan (side effecting) ictimai metodlar təyin edən tətbiqlərdə isə həmin metodlar hücum edənin seçdiyi arqumentlərlə çağırıla bilər. Dump edilmiş tip məhdudiyyəti mesajı istisna ilə məhdudlaşdırılıb, çünki hər iki dumper qeyri-rəqəm elementləri dırnağa aldığı üçün metod slotu heç vaxt hücum edənin seçdiyi ad olmur. Daxili mesajlar dəyəri arqument slotunda olan sabit şablonları ötürür və orada dəyər inert qalır, daxili sahə tipləri isə açıq mesaj geri çağırışları (callbacks) əlavə edir, ona görə də bunların heç biri təsirlənmir.

CiddilikKritik
CVSS9.1
İstismar ehtimalı—
MəhsulHtml-formhandler
Dərc13 avq 2026
İlk görülmə13 avq 2026

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
HTML-FormHandlerv < 0.4100000.410000

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.