Vulnerabilitate în RubyGems.org care permite substituirea pachetelor străine

O vulnerabilitate critică a fost descoperită în depozitul de pachete RubyGems.org (CVE-2022-29176), care permite, fără autorizare adecvată, înlocuirea unor pachete externe din depozit prin inițierea retragerii (yank) unui pachet legitim și încărcarea în locul acestuia a unui alt fișier cu același nume și număr de versiune.

Pentru exploatarea cu succes a vulnerabilității, sunt necesare îndeplinirea a trei condiții:

  • Atacul poate fi efectuat doar asupra pachetelor a căror nume conțin simbolul cratimei.
  • Atacatorul trebuie să aibă capacitatea de a publica un pachet gem cu o parte a numelui înainte de simbolul cratimei. De exemplu, dacă atacul este direcționat împotriva pachetului „rails-html-sanitizer”, atacatorul trebuie să publice în depozit propriul său pachet „rails-html”.
  • Pachetul vizat de atac trebuie să fi fost creat în ultimele 30 de zile sau să nu fi fost actualizat în ultimele 100 de zile.

Vulnerabilitatea a fost cauzată de o eroare în handlerul acțiunii „yank”, care interpreta partea numelui după cratimă drept numele platformei, permițând inițierea ștergerii pachetelor străine, corespunzătoare părții numelui până la simbolul cratimei. În special, în codul handlerului pentru operațiunea „yank”, pentru căutarea pachetelor s-a folosit apelul 'find_by!(full_name: "#{rubygem.name}-#{slug}")', în condițiile în care parametrul „slug” era transmis de proprietarul pachetului pentru a determina versiunea care urma să fie ștearsă. Proprietarul pachetului „rails-html” putea specifica, în locul versiunii „1.2.3”, „sanitizer-1.2.3”, ceea ce ar fi Dus la aplicarea operațiunii asupra pachetului străin „rails-html-sanitizer-1.2.3”.

Problema a fost identificată de un cercetător în domeniul securității în cadrul unei programe active de recompense pe HackerOne pentru descoperirea problemelor de securitate în proiecte open-source cunoscute. Problema a fost remediată în RubyGems.org pe 5 mai și, conform declarațiilor dezvoltatorilor, până acum nu au identificat urme de exploatare a vulnerabilității în jurnalele din ultimele 18 luni. Cu toate acestea, un audit superficial a fost realizat până acum și se preconizează efectuarea unei verificări mai amănunțite în continuare.

Pentru a verifica proiectele dvs., este recomandat să analizați istoricul operațiunilor din fișierul Gemfile.lock. Activitatea malicioasă se manifestă prin modificări care păstrează numele și versiunea sau prin schimbarea platformei (de exemplu, atunci când pachetul gemname-1.2.3 este actualizat la gemname-1.2.3-java). Ca metodă de protecție împotriva înlocuirii ascunse a pachetelor în sistemele de integrare continuă sau în timpul publicării proiectelor, dezvoltatorii sunt sfătuiți să folosească Bundler cu opțiunile „--frozen” sau „--deployment” pentru a fixa dependențele.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster