Атаката на зависимост позволява изпълнение на код в PayPal, Microsoft, Apple, Netflix, Uber и 30 други компании

Преди няколко дни излезе изненадващо прост метод, който позволява атакуване на зависимости в приложения които са разработени с помощта на вътрешни хранилища на пакети. Изследователите, които идентифицираха проблема те успяха да стартират вашия код на вътрешните сървъри на 35 компании, включително PayPal, Microsoft, Apple, Netflix, Uber, Tesla и Shopify.

Хаковете са извършени като част от програмите Bug Bounty, в координация с атакуваните компании, а извършителите вече са получили 130.000 XNUMX долара бонуси за идентифициране на уязвимости.

Методът се основава на факта, че много компании използват стандартни зависимости от хранилища на NPM, PyPI и RubyGems във вътрешните си приложения, както и вътрешни зависимости, които не се разпространяват публично или се изтеглят от собствените им хранилища.

Проблемът е, че мениджърите на пакети като npm, pip и gem те се опитват да изтеглят вътрешните зависимости на компаниите, дори от публичните хранилища. За атака, просто дефинирайте имената на пакетите с вътрешни зависимости и създайте свои собствени пакети със същите имена в публичните хранилища на NPM, PyPI и RubyGems.

Проблемът не е специфичен за NPM, PyPI и RubyGems и се проявява и в други системи като NuGet, Maven и Yarn.

Идеята за предложения метод се появи, след като изследовател случайно забеляза, че в публично достъпен код, публикуван на GitHub, много компании не премахват споменаването на допълнителни зависимости от техните манифестни файлове използвани във вътрешни проекти или при внедряване на разширени функционалности. Подобни следи са открити в JavaScript кода за уеб услуги, както и в проектите на Node.JS, Python и Ruby на много компании.

Основните течове бяха свързани с вграждането на съдържанието от файловете package.json в публично достъпния код на JavaScript по време на процеса на изграждане, както и с използването на действителни елементи на път в извикванията require (), които могат да се използват за преценка на имената на зависимости.

Сканирането на няколко милиона корпоративни домейна разкри няколко хиляди имена на пакети на JavaScript които не бяха в хранилището на NPM. След като състави база данни с вътрешни имена на пакети, изследователят реши да проведе експеримент за хакване на инфраструктурата на компании, участващи в програмите Bug Bounty. Резултатите бяха изненадващо ефективни и изследователят успя да пусне своя код на много компютърни компютри и сървъри, отговорни за изграждането или тестването, базирани на системи за непрекъсната интеграция.

Когато изтеглят зависимости, мениджърите на пакети npm, pip и gem инсталират основно пакети от първичните публични хранилища NPM, PyPI и RubyGems, които се считат за по-висок приоритет.

Наличието на подобни пакети със същите имена в хранилищата на частни компании беше игнорирано, без да показва предупреждение или да причинява сривове които биха могли да привлекат вниманието на администраторите. В PyPI приоритетът за изтегляне е повлиян от номера на версията (независимо от хранилището е изтеглена най-новата версия на пакета). В NPM и RubyGems приоритетът зависи само от хранилището.

Изследователят е поставил пакети в хранилищата на NPM, PyPI и RubyGems, които пресичат имената на намерените вътрешни зависимости, добавяйки код към скрипта, който се изпълнява преди инсталирането (предварително инсталиран в NPM), за да събере информация за системата и да изпрати получената информация на външният хост.

За да се предаде информация за успеха на хакването, заобикаляне на защитни стени, блокиращи външен трафик, методът за организиране на скрити комуникации по канал през DNS протокола. Кодът, който се изпълнява, разрешава хоста в атакуващия домейн под контрола на атакуващия домейн, което дава възможност за събиране на информация за успешни операции на DNS сървъра. Информацията за хоста, потребителското име и текущия път беше предадена.

75% от всички записани изпълнения на код са свързани с изтегляния на пакети NPM, главно поради факта, че в JavaScript има значително повече имена на вътрешни модули, отколкото имена на зависимости в Python и Ruby.

Fuente: https://medium.com/


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.