W repozytorium Rust crates.io wykryto złośliwy pakiet rustdecimal

Twórcy języka Rust ostrzegli, że w repozytorium crates.io zidentyfikowano pakiet rustdecimal zawierający złośliwy kod. Pakiet bazował na legalnym pakiecie rust_decimal i był dystrybuowany przy użyciu podobieństwa nazw (typesquatting) przy założeniu, że użytkownik nie zauważy braku podkreślenia podczas wyszukiwania lub wybierania modułu z listy.

Warto zauważyć, że ta strategia okazała się skuteczna i pod względem liczby pobrań fikcyjny pakiet tylko nieznacznie ustąpił oryginałowi (~111 tys. pobrań rustdecimal 1.23.1 i 113 tys. oryginalnego rust_decimal 1.23.1) . Jednocześnie większość pobrań dotyczyła nieszkodliwego klonu, który nie zawierał złośliwego kodu. Szkodliwe zmiany zostały dodane 25 marca w wersji rustdecimal 1.23.5, która została pobrana około 500 razy, zanim problem został zidentyfikowany i pakiet został zablokowany (zakłada się, że większość pobrań złośliwej wersji dokonały boty) oraz nie został wykorzystany jako zależność od innych pakietów znajdujących się w repozytorium (możliwe, że złośliwy pakiet był zależny od aplikacji końcowych).

Szkodliwe zmiany polegały na dodaniu nowej funkcji Decimal::new, której implementacja zawierała zaciemniony kod umożliwiający pobranie z zewnętrznego serwera i uruchomienie pliku wykonywalnego. Przy wywołaniu funkcji sprawdzana była zmienna środowiskowa GITLAB_CI i jeżeli została ustawiona to z serwera zewnętrznego pobierany był plik /tmp/git-updater.bin. Pobrany moduł obsługi złośliwego oprogramowania działał na systemach Linux i macOS (platforma Windows nie była obsługiwana).

Założono, że złośliwa funkcja zostanie uruchomiona podczas testów na systemach ciągłej integracji. Po zablokowaniu rustdecimal administratorzy crates.io przeanalizowali zawartość repozytorium pod kątem podobnych szkodliwych wstawek, ale nie zidentyfikowali problemów w innych pakietach. Właścicielom systemów ciągłej integracji opartych na platformie GitLab zaleca się, aby projekty testowane na ich serwerach nie korzystały z pakietu rustdecimal w swoich zależnościach.

Źródło: opennet.ru

Dodaj komentarz