Mega Sekurak Hacking Party w Krakowie! 20.10.2025 r. Bilety -30%

Podszycie pod pakiet npm i backdoor w serwerze MCP

01 października 2025, 08:59 | Aktualności | 0 komentarzy
Tagi: , , , ,

Systemy agentowe, duże modele językowe oraz już-nie-taka-nowość (chociaż wciąż zyskujące popularność) serwery MCP gościły na łamach sekurak.pl wielokrotnie. Pod jednym z artykułów, gdzie opisywaliśmy możliwe wektory ataków na serwery MCP, można było spotkać głosy sceptycznie podchodzące do tematu niebezpiecznych serwerów. Dlatego tym razem chcielibyśmy przedstawić atak, którego wystąpienie było tylko kwestią czasu. A możliwy był do przeprowadzenia, ze względu na sposób działania systemu dystrybucji pakietów npm. 

TLDR:

  • Badacze z KOI natrafili na przykład projektu – serwera MCP, do którego został dodany backdoor.
  • Paczka miała za zadanie umożliwić agentom AI wysyłanie poczty elektronicznej. 
  • Pomiędzy aktualizacjami, kod serwera został zmodyfikowany w taki sposób, aby wysyłać kopię każdej wiadomości do autora.

MCP czyli Model Context Protocol to opracowany przez firmę Anthropic protokół mający ujednolicić i uprościć udostępnianie dużym modelom językowym dodatkowej funkcjonalności i metod na interakcję ze światem zewnętrznym. Absolutnie nie jest to żadna “nowość”, a rozwiązania integrujące LLMy z usługami były dostępne już wcześniej, jednak zaproponowany protokół wprowadza większą elastyczność i uniwersalność. 

Architektura MCP (źródło)

Dzięki zdolności pobierania danych z zewnętrznych systemów, a także wykonywanie akcji przez udostępnione narzędzia, agenty AI zyskują dodatkowe możliwości. Nic więc dziwnego, że powstaje wiele projektów, które na zasadzie plug&play pozwalają na integrowanie kolejnych usług. 

Badacze z KOI odkryli złośliwą zmianę wprowadzoną w projekcie postmark-mcp (paczka była pobierana średnio 1,5 tys. razy na tydzień). Postmark to usługa podobna do Amazon SES lub SendGrid – pozwalająca na wysyłanie powiadomień i wiadomości e-mail. Projekt postmark-mcp ma za zadanie pomóc w integracji LLMów właśnie z tym systemem wysyłki. Przedstawiona przez badaczy oś czasu, sugeruje, że projekt rozwijany na GitHubie nie wzbudzał podejrzeń przez dłuższy czas i oferował poprawną funkcjonalność, bez dodatkowych ukrytych “niespodzianek”. W rejestrze npm, będącym sercem dystrybucji pakietów w ekosystemie JavaScript, pojawiła się biblioteka o tej samej nazwie. Początkowo wszystko wyglądało w porządku. Paczka dodana przez konto powiązane z wieloma projektami, nie wzbudzające na pierwszy rzut oka podejrzeń. Projekt trafił do npm 15.09.2025. W następnych dniach nastąpił lawinowy wzrost wprowadzanych drobnych poprawek. Nie jest to jednak nic nadzwyczajnego. Jednak jak się okazało, wersja 1.0.16, opublikowana w npm zawierała niechciany dodatek. 

Wprowadzona przez atakującego zmiana nie była specjalnie skomplikowana:

Rysunek 1. Dodatkowa funkcja dodana przez atakującego (źródło)

Kod dodany przez atakującego ma jedno zdanie – dodać pole BCC do wysyłanej wiadomości e-mail. Adres na który kierowane są wiadomości pochodzi z domeny giftshop[.]club. Dzięki temu, ktokolwiek kontrolujący skrzynkę pocztową skojarzoną z tym adresem, jest w stanie uzyskać dostęp do wszystkich informacji przesyłanych z wykorzystaniem rozszerzenia MCP. Nie trudno jest wyobrazić sobie sytuację, w której takie wiadomości zawierają np. tokeny resetujące hasło (że niby nie da się napisać systemu odzyskiwania hasła korzystającego z LLM? phi ;) ) czy inne potencjalnie poufne informacje. 

Jest to książkowy przykład podszycia się pod znane pakiety i dokonania ataku na łańcuch dostaw. Niestety obecnie trudno jest zapobiegać tego typu atakom, zwłaszcza, że systemy dystrybucji pakietów różnych języków (jak np. rzeczony JS czy Python) opierają się w głównej mierze na zaufaniu. 

Obecnie paczka jest już niedostępna, jednak jeśli w swoim systemie/aplikacji znajdziecie pakiet npm postmark-mcp@1.0.16, to należy aplikację uznać za przejętą i niezaufaną i niezwłocznie skonfigurować ją na nowo z poprawnymi zależnościami. Warto podkreślić, że usunięcie pakietu z rejestru npm nie jest jednoznaczne z usunięciem go globalnie ze wszystkich systemów, na których już był zainstalowany. Więc wciąż stanowi zagrożenie. A ponadto zagrożone są dane, które były wysłane przy pomocy tego pakietu.

Jeśli podejrzewacie, że ta wersja zdążyła być wykorzystana do wysyłki wiadomości e-mail, to taką wiadomość również należy traktować jako przejętą – a w związku z tym, należy podjąć odpowiednie kroki w celu zabezpieczenia swoich użytkowników. Wskaźnikiem “skompromitowania” (tak, też nie lubimy false friends i brzydkich kalk językowych) może być też log zawierający informacje o wysyłce wiadomości na adresy w domenie giftshop[.]club. 

Zalecamy też zmianę wszystkich poświadczeń wykorzystywanych do wysyłki wiadomości, do których paczka mogła mieć dostęp.

Konto użytkownika, który dokonał złośliwej aktualizacji, utrzymuje jeszcze 31 innych pakietów: https[:]//www[.]npmjs[.]com/~phanpak, co należy mieć na uwadze. Co ciekawe, badacze ze Snyk’a informują, że repozytorium GitHub, do którego linkuje sam Postmark, miało nie być powiązane z atakiem, jednak po odkryciu backdoora zniknęło z serwisu (teraz zostało już przywrócone). Wygląda to na zbyt dużą reakcję na informację o backdoorze. 

Musimy przyznać, że ataki na łańcuchy dostaw w ekosystemach podobnych do npm, robią się coraz bardziej kreatywne. Sytuacji nie ułatwia fakt, że ta postać tylnej furtki może zostać wychwycona tylko przez analizę kodu lub logów/zachowania aplikacji. Agenty LLM nie będą miały dostępu do pól przesyłanych wiadomości, więc prompt nakazujący sprawdzenie poprawności wypełnienia nagłówków na niewiele by się tutaj zdał. 

Sytuacje takie jak ta, będą pojawiać się coraz częściej wraz ze wzrostem popularności serwerów MCP. Należy pamiętać, że nie jest to jedyny sposób ataku przy pomocy złośliwego serwera obsługującego Model Context Protocol i że ataki na łańcuchy dostaw mogą też próbować wykorzystać sam model.

~Black Hat Logan

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz