Znany moduł Lottie-Player przez kilka godzin zawierał nieautoryzowany kod wyświetlający na witrynach korzystających z tego rozszerzenia popup umożliwiający połączenie portfela kryptowalutowego docelowego użytkownika. Twórcy Lottie-Player, firma Design Barn Inc, o problemie dowiedzieli się poprzez issue założone przez użytkownika MrAhmedSayedAli w serwisie GitHub.
Jak można zauważyć, czytając odpowiedzi w tym wątku, skala problemu była stosunkowo duża. Co więcej, złośliwy kod utrudniał korzystanie z tzw. narzędzi deweloperskich w przeglądarkach (np. DevTools). Zmiany skutecznie dodano aż do trzech wersji modułu, tj. 2.0.5, 2.0.6 i 2.0.7 (wszystkie opublikowano wczoraj w godzinach wieczornych). Podatne wersje zostały już usunięte z repozytorium npm. Można jednak zapoznać się z tą zawartością, ponieważ została „zarchiwizowana” przez pochodzącego z Polski programistę i udostępniona w tym miejscu. Aktualnie najnowszą wersją jest 2.0.8, która stanowi kopię wersji 2.0.4.
Atak rozpoczął się od uzyskania należącego do programisty Lottie-Player tokenu pozwalającego na dodawanie paczek do repozytorium npm. W opublikowanym wątku znajdziemy „Incident Response”, w którym czytamy, iż firma wraz z pomocą zewnętrznego podmiotu prowadzi analizę ataku.
Sam Lottie-Player jest używany do wyświetlania na stronach animacji przygotowanych w formacie Lottie (opartym na JSON). Dostępny jest przykład prezentujący możliwości tego modułu: https://codesandbox.io/p/sandbox/y2nxyvomyj. To bardzo popularne rozwiązanie, co widać na wykresie liczby pobrań w okresie ostatniego roku.
Popularne są również memy dotyczące node_modules, czyli katalogu zawierającego pobrane z repozytorium npm gotowe paczki umożliwiające łatwiejsze dodawanie funkcjonalności w aplikacjach. O ile praktyka korzystania ze sprawdzonych i znanych rozwiązań jest zdecydowanie pozytywna, bo pozwala na szybszy rozwój oprogramowania, to jednak w każdej sytuacji wymagana jest pewna rozwaga. Przykładem może być moduł is-odd sprawdzający, czy podana liczba jest nieparzysta — samodzielne przygotowanie takiej funkcji nie jest skomplikowane.
Można zapytać, dlaczego złośliwy kod pojawił się na tak wielu witrynach. Powodem było stosowanie najnowszej możliwej wersji paczki, oznaczonej latest. Podatne serwisy zawierały odwołanie do tej wersji, wyglądające w ten sposób:
Podczas ładowania strony z tym skryptem nastąpi przekierowanie do faktycznej najnowszej wersji. Pomijając kwestie bezpieczeństwa, należy zwrócić też uwagę na kompatybilność, ponieważ wprowadzone w module zmiany niekoniecznie będą poprawnie działały z naszą aplikacją. Z tego powodu zwykle lepiej definiować konkretną i wiarygodną wersję. Zdarza się też, iż najnowsze wersje zawierają po prostu błędy uniemożliwiające normalną pracę.