Так, что понял из статьи - чувак базированный, системный, настроил жёсткий контроль в фирме и радеет за Китай, ок, понятно. Дальше чистое имхо:
1. Китай не Россия, браки(в основном) там базируются на равных сословных условиях, типа: вот насколько богат, семья жены богата на том же уровне, я исхожу из рода руководителей региона, у семьи жены тоже родственники из правительства. Основа - выгода, либо равная, либо чуть превышающая, иначе дисбаланс. Там ведь жена уходит в семью мужа(если исходить из фотки, то она ещё и красивая, а значит выбор из кандидатов у неё был большой, но выбрала она именно его), то и его семья должна соответствовать. То есть, судя логики, он из непростой семьи, но ему на протяжении жизни много раз не везло, но своим цепким характером смог вытянуть фирму в топы поднебесной. 2. Драматически описывают, но навернул хуйни в перспективной работе и за это он вышел сухим из воды. "устроился замдиректором по закупкам в Shenzhen Nanyou Group" - ебать, а вас тоже берут заместителем директора после армейки? 3. "Он взял и замутил встречу с аж генеральным секретарём КПК Цзян Цзэминем" - Могу поверить, что человек заготовил речь и долго практиковался, чтобы быть очень убедительным, но встреча, ещё и тет-а-тет? Вы серьёзно? Это как чувак, что держит шаурму на рынке, встретился бы с министром уровня Мишустина наедине. Ситуация, прямо скажем, маловероятная. Опять помогает не видимая рука. Есть ещё моменты, но и так уже понятно, что есть, что.
Из всего этого следует, что Жэнь Чжэнфэй - на самом деле, крутой чувак, у него были и взлёты и падения, болезни и смерти родных, но он не унывал и достиг многого.
Но от этой выстиранной истории всё равно несёт дерьмом - то как: "Молодые инженеры Хуавэй пахали по шестнадцать часов кряду в адской духоте. Душный офис одновременно служил им и кухней, где бурлили чаны с лапшой, и складом"(1991), а потом "Команды в крупных городах выдавали оглушительно тухлые результаты просто потому, что их боссы сидели на своих постах чисто за прошлые заслуги. Поэтому Чжэнфэй кикнул их всех"(1996). Как вам? Норм? Это не тянет на доброго самаритянина, а вот на барыгу вполне. Да, в общем то, со стороны бизнеса сделал, всё правильно, но вот на гражданина в белом пальто не тянет. Или вот: "Чтобы ушатать предателей из Harbour Networks, Чжэнфэй организовал внутри Хуавей секретный спецотряд чтобы поставить шарашку Ли Инаня на колени" и "Вдогонку его обязали отработать в компании два полных года без какого-либо права на увольнение. Жэнь усадил его в кабинет со стеклянными прозрачными стенами прямо на виду у всего планктона" - Да это же чистое унижение и месть. Достойный "герой".
Чжэнфэй - привилегированный человек из непростой семьи, породнившись с ещё одним возвышенным родом он рассчитывал на карьеру военного, скорее всего подвязки были, но не выгорело, порезали финансирование. Перешёл в коммерцию, тут крупный косяк вспорол, отделался испугом, в моменте, жена видя происходящую петрушку, вернулась в дом к родителям.
Наш герой не унывал, хватался за всё, что мог ухватить, почувствовал золотую жилу в телекоме(или подсказали?), благодаря цепкости и чудесным речам уверил работников на изнурительный труд(о, как меня умиляет эта "матрасная культура") , ради будущей морковки - акций компании(может и правда, что то от этого выиграли, тогда рад за них). А через пяток лет, когда дела пошли в гору, выкинул на мороз или понизил.
Родственники с стороны жены(помирились уже) или своей стороны, организовали встречу с генсеком, который поверил, выделил госконтракты и дешёвые кредиты. Когда случился кризис доткомов, вместо закрытия финансовых дыр организации, начал охоту на ведьм за своим бывшем сотрудником(который скорее всего и разработал успешную технологию для компании), обанкротил его компанию(где менеджеры предлагали своё оборудование, ставил такой ценник, чтобы выбрали именно Хуавей, не смотря на убыток), взял его на поруки и выставил на посмешище в виде обезьянки в вольере. Жил работой и когда умерла мама и серьёзно заболел, осознал ради чего, вообще, всё затевалось когда то.
Развернулся на мир со своим оборудованием(по заветам партии), начал развивать мобильное направление, передал своей семье рычаги управления в компании.
Почему его не сместили с 1% акций компании? Умеет делиться и красиво разговаривать, знаком с высшими чинами партии, прогнозируемый и верный(как и его семья), люди у власти не любят слишком амбициозных(история с Джек Ма(Ма Юнь) показательна), по этому никто не берётся выхватывать брозды управления. Ну вырвут они, так партия ограничит помощь компании и что делать потом? Все хотят быть при бабле и дальше)
Не такая красивая история получается, да?))) Косплеит И́нгвара Кампрада, но кто поверит, что он, сейчас, будучи очень богатым, не имеет дорогого автомобиля и личной вневедомственной охраны? Даже если Китай очень безопасная страна? Все эти выходы в народ от принцесс, королевских особ и премьер-министров не более, чем политический спектакль. Для богатых и влиятельных особ, выход без охраны попросту опасен, Касперские не дадут соврать. Завершая свою мысль скажу, что не вижу сплошь негатив в этом человеке, его есть за что превознести и за что поругать, как и любого другого человека, просто не нужно вешать лапшу, в мире куча других, настоящих героев.
Каждый раз, когда читаете про Китай и китайцев пропускайте всё через один уникальный фильтр...
Китайцев с рождения воспитывают в парадигме, что "приоритет № 1 в жизни - благо Китая". Тебя родили на благо Китая, ты живёшь на благо Китая и умереть тоже желательно на благо Китая.
И вот когда начинаешь смотреть через эту призму, то очень многие вещи в Китае становятся предельно логичными и единственно возможными.
И смертная казнь за коррупцию и игры в социализм, а потом и капитализм...
Ошибаются все. Китай - это Китай. Он не социалистический, он не капиталистический. Это Китай.
Если это будет на благо Китая там организуют что угодно. Прикроются любой идеологией. Покажут что угодно.
Пока. Это. На. Благо. Китая.
Для понимания уровня этой концепции. В США были расследования ФБР в которых доказывалось, что если в руки китайской организованной преступности попадали важные для Китая данные... То они передавались в китайские спецслужбы. То есть даже китайский преступник живущий за границей думает о благе Китая...
Если глубоко вчитываться в публичные выступления китайских "капиталистов" (да и "социалистов" тоже), то там будет очень много того, что идёт в разрез с "классикой" соответствующего "течения". "Социалист" или "коммунист" в Китае радостно будет отстаивать эксплуатацию и частную собственность на средства производства, если это идёт на благо Китая. "Капиталист" отдаст всё, в т.ч. последние трусы, если это идёт на благо Китая.
То, что мы видим из вне... Это декорации. Нам показывают то, что мы хотим в них видеть. Не больше и не меньше.
Аж целых 9 долбаных лет Жэнь Чжэнфэй честно ишачил в инженерных войсках Китая, и все шло вроде-как вообще по красоте. Но в 1983-м партийная руководящая грядка вдруг жахнула конкретную перетряску всей воейнки, и весь его строительно-инженерный корпус, где он годами строил карьеру, тупо взяли и задизбандили.
В один миг его погоны и форма превратились в никому не нужные тряпки, и мужику пришлось нырять в гражданку в рыбацкий городок Шэньчжэнь, где уже давно батрачила его баба.
Эту же историю, но в нейтральной подаче, можно почитать тут или посмотреть видео.
Вид на рыбацкую деревню в Шэньчжэне и оба берега реки Шэньчжэнь в начале 1980-х годов
А самое интересное то, что этому городишке буквально только-только что прилепили статус Особой Экономической Зоны, поэтому барыжничество и коммерция уже перли там с какой-то внатури дичайшей скоростью.
Шэньчжэнь
Небоскребы там будто выпрыгивали из земли словно бамбук после радиоактивного ливня, будто кто-то украл у Бога чит-коды на строительство. Шэньчжэнь задумывали как чисто наглухо запечатанный шлюз между социалистичеким Китаем и протухшим внешним миром. Этаким пылесосом чтобы высасывать кэш и технологии из Гонконга, который тогда все еще сидел под британской крышей и поэтому продолжал фурычить по законам чисто капитализма.
Эта буферная зона позволяла заморским инвестициям и всяким западным продвинутым технологичным приблудам сначала аккуратно впрыскиваться в строго контролируемый вот этот типа загон, чтобы капиталистическая моральная зараза случайно вдруг не просочилась в священный и великий Китай.
Пекин тогда со всей дури кипишевал, что вместе с западным баблом и железом на них расплескается всякая вот эта шняга, которую чинуши клеймили духовной гнилью: буржуазная идеология, частная собственность, всякие профсоюзы и забастовки, свободные СМИ, попса, казино и шлюхи. Короче полный букет капиталистической грешной заразы.
Антизападный плакат
Поэтому эту Особую Зону буквально внатури наглухо отгородили от остальных провинций колючей проволокой, а на каждом выходе посадили суровых вояк-проверальщиков, чтобы они чекали каждую мышь. Обычный рандомный челик из соседней провинции не мог просто так взять и припереться в Шэньчжэнь.
Вооруженные сотрудники пограничной полиции проверяют документы прохожих на маршруте второго эшелона патрулирования
Чжэнфэй знатно ахриневал от увиденного в этом городе и от его дикого вайба, потому что обычные работяги там заколачивали аж в два раза больше капусты, чем ему отпрыскивали как военному инженеру. Он впервые в жизни забурился в настоящий супермаркет и впервые отхлебнул Пепси, которая как раз сходила с конвейера первой совместной фабрики с америкосами.
Для Чжэнфэя это был даже не город, а какой-то потусторонний мир, слепленный из одних сплошных чудес. Но за всем этим детским кайфом где то в глубине его души вдруг заныкалась лютая тревога, ведь перед чуваком открылась совершенно новая реальность, и он не понимал наверняка, вывезет ли он вообще такой дикий темп.
Он даже мысленно втирал сам себе, что люди его возраста — это самые днищенские и неадаптированные старые бестолочи, потому что они вообще ни черта не шарили в компах и не могли связать двух слов по-английски. Репа у них была тормозной. А Шэньчжэнь принадлежал чисто молодняку. Это было место, где можно было поднять целые миллионы буквально из воздуха, но только если ты умел быстро перепрошить свою башку и если у тебя хватало духу не очковать перед новым.
Чжэнфэй устроился замдиректором по закупкам в Shenzhen Nanyou Group. Хотя у него вообще не было никакого опыта в этой теме, он урвал эту должность благодаря своей женушке, чьи связи имели ого-го какой вес в городе.
Вроде как его жена на фотке, но это не точно, даже в китайском интернете спорят и не знают точно!
И в один прекрасный день к Чжэнфэю подкатил какой-то торгаш, который затарил у компании партию импортных телеков и электронных девайсов, и не отбашлял ни копейки и тупо испарился вместе со всем товаром.
Чжэнфэй ему поверил. Он как последний дятел подписал все бумажки еще до того, как получил фул-оплату, и в итоге компания въехала в убыток аж на целых 2 миллиона юаней.
Shenzhen Nanyou Group
В итоге в 1987 году его с позором вышвырнули с работы. В коммунистическом Китае это было куда хуже обычного увольнения, потому что косяки такого масштаба намертво впечатывали в личное дело. На практике это означало, что он практически просрал любой более-менее реальный шанс еще хоть раз еще запрыгнуть на какую-то руководящую должность в госсекторе.
Первый Макдональдс в Шэньчжэне в 1990 году
Вдогонку у него еще и отжали государственное жилье и обязали выплатить около 200 тыщ юаней, чтобы хотя бы частично перекрыть ущерб, который он набедокурил. Идти было тупо некуда, поэтому Чжэнфэй с двумя отпрысками переселился в разваливающийся барачный клоповник, который был размером от силы около десятка квадратных метров. На этой микроскопической площади ютились его пожилые предки вместе с братьями и сестрами. Спали они прямо на полу, а хавчик готовили на балконе, потому что больше делать это было попросту негде.
Его Жена, ясен пень, свалила от него, ведь он в глазах всех окружающих опустился на самое днище. Ведь она-то была дочерью аж самого Мэна Дунбо, высокопоставленного чинуши, который когда-то был даже аж целым вице-губернатором провинции Сычуань. Кстати если бы не этот влиятельный шишка-тесть Чжэнфей наверняка оказался бы на нарах.
Мэн Думбо
Оказавшись раздавленным на самом дне жопы, Чжэнфэй взял и 15 сентября 1987 года зарегал в Шэньчжэне собственную контору, имея в кармане стартовый капитал всего в 21 тыщ юаней, которые он насуетил и наскреб у пятерых каких-то знакомых, которые какого-то лешего взяли согласились вместе с ним вписаться в эту дикую авантюру. Назвал он эту лавочку Huawei, что означало вроде как «Китайский успех», но это не точно.
Первый офис Huawei в Шэньчжэне
Первое время контора банчила вообще всем подряд. В ход шли и воздушные шарики, и системы пожарки, и даже толкали какие-то БАДы. Но потом Жэнь совершенно случайно где-то как-то пронюхал, что спрос на малюсенькие частные телефонные станции тогда вдруг начал расти просто с какой-то бешеной скоростью. Эта ниша буквально вдруг закипела.
Это газетная статья первой половины 1990-х годов под заголовком Телефонная лихорадка в столице - объём установок за 3 года превысил показатели за предыдущие 10 лет
Huawei тут же подорвалась перепродавать простые телефонные коммутаторы. Конкуренция на этой поляне тогда была просто лютая, однако сама индустрия мутировала тогда настолько стремительно, что железяки превращались в тухлый неликвид практически мгновенно. Поэтому вот эта вот сумасшедшая динамика, как ни парадоксально, как раз открыла окно возможностей для такого ноунейма, как Huawei.
Компания запартнерилась с гонконгским поставщиком Hongnian, который стал подарком судьбы, потому что давал жирную маржу и, что самое главное, разрешал башлять им уже после реализации товара. Для бизнеса, который постоянно висел на волоске от безденежья и буквально задыхался без кэша, такие роскошные условия оплаты стали настоящим спасительным кругом.
Ранняя команда
Huawei давай со всей дури впаривать телефонные станции всяким офисам, госучреждениям, больничкам, отелям и заводам. В итоге за считанные месяцы после старта молодая контора уже тупо захлебывалась от этого гигантского наплыва новых заказов.
А в 1989 году Huawei взяла и начала уже сама собирать свой собственный коммутатор BH01 из чужих комплектующих. Эта бандура была размером примерно с микроволновку, тянула всего 24 телефонные линии, а качество у нее было, если без прикрас, просто сказочно тухлым.
Дочь Жэнь Чжэнфэя Мэн Ваньчжоу и BH01
Кореша Жэня активно убалтывали его не лезть в производство. Потому что в те годы в Шэньчжэне каждый нормальный челик, который хотел поднять серьезные бабки, либо спекулировал акциями, либо занимался перепродажами, а производство это уже огромный риск.
Но как оказалось простая перепродажа тоже была рискованной, потому что в 1991 году тот самый гонконгский поставщик взял и в один миг бортонул Huawei все поставки. По одной версии, там просто сменились хозяева, а по другой они прозрели, и начали видеть в Huawei будущего грозного конкурента и решили придушить угрозу до того, как она наберет силу.
фото команды разработчиков Huawei во время деловой поездки в США в 1994 году.
И вот ту Huawei внезапно оказалась в дикой ситуевине. Клиентульки по-прежнему выстраивалась в очередь, а продавать-то уже было тупо нечего. Склад опустошился за считанные дни. Тот стабильный поток баблишка, который шел с перепродаж станций и кормил команду из нескольких десятков человек, просто испарился за одну ночь. Чтобы хоть как-то заткнуть дыры по аренде и зэпэ, Жэнь Чжэнфэй в полной панике побежал занимать бабки у нелегальных ростовщиков под конские проценты, рискуя всем своим будущим чисто чтобы выиграть для компании еще немного времени.
Каждый юань тогда был буквально на вес золота. Чжэнфэй вместо нормального транспорта как последний бичара педалировал по городу на старом убитом велике. А когда нужно было перетереть с поставщиками, он коннектился с ними через уличный таксофон, потому что содержание собственной телефонной линии стало для конторы непозволительной роскошью.
Молодые инженеры Хуавэй пахали по шестнадцать часов кряду в адской духоте. Душный офис одновременно служил им и кухней, где бурлили чаны с лапшой, и складом, где по углам были разбросаны целые горы печатных плат и всякой электронной требухи. Кондеров, естественно, вообще не было, только пара каких-то полудохлых вентиляторов, которые вяло гоняли горячий воздух по кругу. И когда жарища становилась совсем невыносимой, пацанчики просто заскакивали под ледяной душ, и сразу обратно к своим столам.
Тестят коммутатор
Чжэнфэй превратил Хуавэй в самый настоящий военный лагерь, где инженеры как преданные солдаты ишачили днём и ночью, независимо от окружающих условий. Когда кого-то накрывала лютая усталость, он просто рушился на матрас, отрубался на несколько часиков, а потом вдруг резко подрывался обратно продолжать пахать, будто ничего и не было. Из этой бешеной движухи вылупилась в итоге та самая знаменитая «матрасная культура» Huawei. Один инженер вообще доишачился аж до того, что у него начала отслаиваться роговица глаза, и ему пришлось срочно падать на операционный стол.
Матрасная культура сохранилась в Huawei и по сей день
И вот в 1991-м они выкатили первый полностью уже самостоятельно ими спроектированный коммутатор Huawei BH03. В отличие от всех предыдущих, он фурычил уже на собственной архитектуре и своем софте и тянул аж целых 48 телефонных линий. Именно он принёс компании первые по-настоящему жирные бабки. Продажи в итоге оттопырились примерно до ста мультов юаней. И во многом именно он вытащил Huawei из банкротства. Только вот этот BH03 был аналоговым, а вся телеком-индустрия на бешенных скоростях мчалась уже в цифровую эпоху.
Аналоговая шняга годилась разве что для мелких деревенских сетей да скромных контор, потому что коннектила максимум от 24 до 48 абонентов. А чтобы пробиться в мегаполисы и заграбастать жирные госконтракты, требовалось кое-что помощнее. Поэтому в Huawei решили с нуля состряпать уже цифровой коммутатор, способный держать тысячи телефонных линий.
Однако прототип постоянно ловил жесткие технические затупы и глюки, а у команды тупо не хватало скиллов, чтобы быстро размотать все эти косяки. Система намертво висла по причинам, которые никто не мог одуплить. Звонки сбрасывались прямо посередине базара. А печатные платы во время тестов и вовсе натурально вспыхивали ярким пламенем.
Тем временем Чжэнфэй уже выгреб из карманов абсолютно все юани до копейки, а счета компании продолжали стремительно улетать в глубокий минус. Сотрудники неделями сидели без зэпэ. Чжэнфэй заложил последнее имущество и набрал долгов под дикие 30% годовых чисто чтобы проект хоть как-то держался на плаву. На одном из собраний Чжэнфэй встал перед своими инженерами и вывалил им лютый тэйк: «Если этот проект загнется, я просто выброшусь из окна. Ну а вы пацаны уже сами думайте, куда вам дальше двигаться».
Маленький Чжэнфэй с родителями
Он даже ввел тему, по которой пол зэпэ сотрудникам выдавали акциями. Чжэнфэй верил, что совладение зарядит людей мотивацией получше любых бабок. Чтобы каждый инженер четко выкупал, что любой триумф или провал Huawei — это его личный расклад, и эта вера в итоге заставила их биться бодро за результат куда жестче, чем просто за наличман.
Чтобы смыть остатки канифоли и флюса после ручной пайки первых плат для цифрового коммутатора, инженеры Huawei прямо в раковине офисного толчка отшаркивали каждую плату спиртом и обычными зубными щетками. Сам коммутатор ожил в самый последний возможный момент. И наконец-то в 1993 году Huawei выкатила модель C&C08.
Это был ультрасовременный цифровой АТС, способный коннектить аж до 2 000 телефонных линий, и при этом он стоил примерно аж в трое дешевле конкурентов.
И все равно китайский рынок телекома плотно контролили такие гиганты, как Ericsson и Motorola. Одной лишь низкой цены было недостаточно, потому что высокопоставленные чинуши уже были уболтаны мощными западными корпоратами. Откаты там превратились в нативную норму. Чиновникам устраивали роскошные загранпоездки и дарили люксовые тачилы, а их отпрысков на халяву отправляли учиться в Европу и США.
Жень Чжэнфэй ответил на эту суровую реальность знаменитой военной доктриной Мао Цзэдуна о взятии городов через деревни. Вместо того чтобы сразу лезть с разбега на самые жирные рынки, он запульнул своих продаванов по глухим деревням, где крысы шныряли по стойкам с оборудованием и перегрызали кабели с пугающей регулярностью, и где нестабильное электричество в миг ушатывало всю электронику.
Инженеры Huawei давай перепиливать железо ровно под эти адские условия. Они состряпали сверхпрочные корпуса, усиленно заизолировали кабели и впиндюрили супер мощные стабилизаторы напряжения, чтобы железо выживало даже при самых лютых скачках сети, а не сгорало к чертям. Благодаря этим переделкам деревенские станции Huawei продолжали фурычить даже в самых экстремальных природных условиях.
Всякий раз, когда сотрудники мотались в эти забытые Богом деревеньки, они часто прям своими руками латали протекающие крыши и даже укрепляли стены местных АТС, чисто чтобы оборудование Huawei не сдохло сразу после установки. В те времена железо Huawei ломалось куда чаще, чем хотелось. Клиентосина в открытую чмырила инженеров Huawei, а иногда некоторые даже орали прямо на самого Женя на глазах у всех.
В 1982 году компания Pepsi создала свое первое китайско-американское совместное предприятие в Китае — завод по производству безалкогольных напитков «Иньлэ» в Шэньчжэне. (Флаер с церемонии открытия) 2
Но никто не огрызался в ответку. Никто не искал отмазок. Наоборот даже! Они извинялись, фиксили проблемы и возвращались пахать дальше. А вот их западные конкуренты вели себя зачастую кардинально иначе, типа если что-то пошло не так, то значит полюбасу виновата сама клиентулька.
Жень также верил, что как только сотрудники затариваются собственной хатой, они сразу теряют хватку. Поэтому он активно убалтывал своих пацанов откладывать покупку квартир и что лучше вкидывать свои сбережения в акции Huawei. В итоге многие продолжали батониться в общагах даже после того, как поднимали достаточно лавэ на собственную хату.
Хотя партизанская завоевательная движуха Huawei по сельским глубинкам уже начала давать ахиренный выхлоп, правила игры были вообще ни разу не честными. Забугорные неповоротливые корпораты кайфовали от жирных налоговых льгот и мощного подсоса от своих правительств, пока китайские стартапы сосали лапу без единого шанса на хоть сколько-то похожую халяву.
Крупнейшие государственные телеком-гиганты страны продолжали сливать самые жирные контракты в руки всяким Эриксонам и Сименсам. А молодую контору из Шэньчжэня они вообще даже за компанию не считали.
Но Жэнь Чжэнфэй вертел такую реальность на одном месте. Он взял и замутил встречу с аж генеральным секретарём КПК Цзян Цзэминем и глядя аж прямо в глаза втер ему, мол, держава без собственных переключателей и софта ничем не отличается от страны без армии. В его понимании сидеть на игле зарубежного телеком-железа угрожало национальной безопасности.
Цзян Цзэмин
И этот расклад реально торкнул генсека. В ноябре 1994 года China Merchants Bank взял и отколупнул Huawei льготный кредит где-то аж на 40 миллионов юаней. Для Huawei такая сумма была просто каким-то космосом. Но главный прикол был вообще даже не в бабках. Судьбу компании перевернул именно доступ к госзакупкам, потому что Пекин окончательно одуплился и решил жестко импортозамещать зарубежное железо на своё родное.
И сразу после этого госкомпания China Telecom и провинциальные почтовики подорвались оформлять у Huawei гигантские заказы на телефонные АТС. В итоге на контору хлынули миллиардные контракты. Забугорные гиганты один за другим начали сливать свое доминирование, которое годами удерживали внутри Китая.
Выручка Huawei взлетела от каких-то жалких десятков миллионов юаней до космических 1,5 миллиарда уже к 1995 году, а сама контора росла просто нереально бешеными темпами, удерживая ежегодный рост выше даже 100 процентов.
Офисное здание штаб-квартиры Huawei, расположенное в Шэньчжэне, Китай.
Но в какой-то момент компания заплыла жиром. Штат Huawei разросся почти до тыщи рыл, и система управления, которая прежде ровно фурычила на личном контроле Чжэнфэя, вдруг треснула по швам.
Ветераны-олды, которые когда-то тащили компанию на своих горбах, потихоньку превращались в перезрелый балласт. Разрыв в продажах между разными регионами стал настолько вопиющим, что закрывать на него глаза было уже невозможно. Один региональный менеджер мог вчистую размотать городского по показателям. Команды в крупных городах выдавали оглушительно тухлые результаты просто потому, что их боссы сидели на своих постах чисто за прошлые заслуги.
Поэтому Чжэнфэй кикнул их всех. В 1996 году он уволил аж 30 процентов региональных начальников продаж. Понятное дело, он вышвырнул на мороз не всех. Многих просто сослал на дно иерархии. Чжэнфэй постоянно втирал своим людям, что главный враг Huawei — это вовсе не какие-нибудь Эриксоны и Сименсы, а сама Huawei.
Вручение непригодных печатных плат и топ-менеджерам и инженерам в качестве антинаград за ошибки в разработках и убытки в 2000 году в Шэньчжэне
Он часто возвращался к старой поговорке про то, что проточная вода никогда не тухнет, а дверная петля в постоянном движении не точится короедами. Ибо только непрерывное обновление, по его мнению, могло сохранить силу и движуху внутри компании. С этого момента планктону строго-настрого запретили протирать штаны в одном регионе слишком долго. Их заставляли регулярно кочевать с места на место, чтобы они выпрыгивали из зоны комфорта и адаптировались вечно.
А еще Жэнь настойчиво задвигал, что понижение в должности вовсе никакой не позор, а наоборот настоящая прокачка. Для того, кого однажды опрокинули на дно, повторное восхождение на вершину делает в разы сильнее одноразовых героев.
Птица, которая не сгорела заживо в огне, становится фениксом, и эта сумасшедшая эра требует сумасшедших героев, орал он. В итоге эта стратегия сработала вообще по красоте. В период с 1996 по 1998 год Huawei аж удвоила свои продажи, и со свистом обскакала всех местных конкурентов. С легендарным коммутатором C&C08 вкупе с мощным подсос-подгоном от правительства забурились уже даже на международную арену.
Памятный камень у входа на территорию штаб-квартиры Huawei в Шэньчжэне
Уже к 2000 году годовая выручка Huawei раздулась уже за астрономические 20 миллиардов юаней, и компания лыбилась во всю пасть от собственного величия. Но тут неожиданно лопнул пузырь доткомов. И вся экспансия резко накрылась медным тазом, потому что мировая телекоммуникационная индустрия улетела в глубокий и затяжной коматоз, который потом обозвали «IT-зимой».
Телеком-операторы по всему глобусу экстренно свернули закупки железа, и буквально в один миг рынок, который до этого качал оглушительный взлет Huawei, тупо ушел в глухой анабиоз.
Чтобы хоть как-то удержать компанию на плаву и не отбросить ласты, Чжэнфэй взял и толкнул с молотка дочерку Huawei Electric, которая клепала блоки питания для евошней телеком-империи. Ее сбагрили конторе Emerson за 750 мультов зеленых. Только вот эти деньги выплачивались не сразу, а отпрыскивались мелкими порциями. Да и хватило их не на долго.
При этом в том же году Чжэнфэя предал самый близкий человек. Вундеркинд и вице-президент Huawei, Ли Инань, просто взял и свалил из компании, утянул за собой пачку ключевых инженеров, замутил конкурирующую контору Harbour Networks и внаглую начал копировать хуавеевское железо, и параллельно отжимать самых жирных клиентулек компании.
Ли
А ведь Ли притопал в Huawei, когда был еще сопливым студентом. Уже в свои 23 года он закарабкался в кресло главного инженера, а уже к 26 пробился аж до целого вице-президента. Жэнь Чжэнфэй относился к нему реально как к родному сыну и даже готовил себе в преемники. Поэтому эта подляна стала для него целой личной трагедией.
Следом, не успел он одуплиться, прилетел еще один лютый удар. В 2001 году его 80-летнюю мать насмерть сбила какая-то колымага в Куньмине. Бедолагу Чжэнфэя сожрало лютое чувство вины, потому что до самых последних дней мамаша продолжала экономить каждую копейку и жить в режиме жесткой экономии, потому что думала, что ее сын все еще висит в долгах по самые уши.
Отец и Мать Чжэнфэя
Когда все это дерьмо обрушилось одновременно, Чжэнфэй словил конкретную депрессуху. Он соскакивал посреди ночи в слезах и панике, не понимая, где ему наскрести бабла, чтобы выдать зэпэ голодной ораве сотрудников. По его собственным воспоминаниям, он раз за разом гонял мыслишки даже о суициде. Не один раз он ловил себя мысли, что хочет выпрыгнуть из окна своего кабинета.
В этот же самый период еще и врачи огорошили его тем, что диагностировали у него рак. Ему пришлось пережить аж две операции по удалению опухолей кожи, и вдогонку тяжелейшую операцию на сердце.
Чжэнфэй уже даже дал добро на то, чтобы слить Huawei конторе Motorola за 7.5 миллиарда баксов в 2003 году. Переговоры уже почти срослись.
Переговоры с Моторола
И тут, в самый последний момент, в Motorola сменился гендир, и сделка с треском развалилась, потому что новый босс посчитал ценник абсурдно завышенным. В его глазах Huawei была не более чем ноунейм-шарашкой из провинции, которая выезжает только за счет бедных стран с бичовскими экономиками.
Хотя именно эти бичовские рынки, особенно Африка, Юго-Восточная Азии и Ближний Восток, помогли Huawei пережить всю эту «IT-зиму». Huawei в итоге выжила потому что банчила реальным железом, а не этими всякими виртуальными услугами и сервисами интернет-стартапов.
Чтобы ушатать предателей из Harbour Networks, Чжэнфэй организовал внутри Хуавей секретный спецотряд чтобы поставить шарашку Ли Инаня на колени. И где бы ни всплывали адепты Harbour, Хуавей с особым цинизмом сбивала там цены на оборудование на дно, работая себе в убыток, лишь бы отжать контракты.
Harbour в итоге с треском обанкротилась, а Ли Инань был вынужден вернуть Хуавей инженеров, железо, патенты и всю софтину.
Вдогонку его обязали отработать в компании два полных года без какого-либо права на увольнение. Жэнь усадил его в кабинет со стеклянными прозрачными стенами прямо на виду у всего планктона. Этим Чжэнфэй превратил бывшего бунтаря в живое напоминание о том, что бывает с каждым, кто решит кинуть контору.
В момент поглощения Harbour, Жэнь встретился с Ли тет-а-тет и пояснил, что у него никогда не было цели уничтожить его как человека. А вот ушатать его бизнес надо было обязательно, чисто в воспитательных целях, чтобы больше никому не охота было повторить подобное.
А в 2005-м Банк развития Китая, который подмят под пекинские власти, откупорил компании просто, ну, нереальную кредитную линию аж на 10 миллиардов долларов для захвата зарубежных рынков. Масштаб этой движухи реально шокировал, потому что эта сумма была примерно аж в два раза больше, чем весь чистый выхлоп Хуавей за весь 2004 год. И уже очень скоро Хуавей заключила жирные контракты в ЮАР, Иордании, Аргентине, Таиланде и в куче других стран.
В том же году журнал Time впиндюрил Жэнь Чжэнфэя в список 100 самых влиятельных челов планеты. Издание изобразило его как вождя, который осознанно копирует Мао Цзэдуна, который жаждал опрокинуть господство запада. Чжэнфэй, тоже, прославился тем, что в открытую бросил вызов технологическому господству США.
Молодость Чжэнфэя пришлась на 1950-е годы, когда в Китае смотрели на Советский Союз как на вообще бомбический пример для подражания.
В школе он учил русский язык и кайфовал от советских романов, включая даже ВЕЛИЧАЙШУЮ книжульку «Как закалялась сталь».
Чжэнфэй считал что народы Китая и России станут процветать и жить вместе вообще кучеряво и что процветание, мол, это право по рождению не только Запада. Он даже поздравил Владимира Путина после того как его впервые избрали верховным батькой всея Руси.
Поэтому проблемы Huawei на Западе становились все жестче и жестче. Потому что Huawei даже уже на западных рынках и начала отжимать жирные куски, особенно в Европе. Поэтому Чжэнфэй решил забуриться на рынок смартфонов. Это позволяло слеганца сгладить суровый имидж Huawei за бугром. Ведь смартфоны выглядели куда менее опасно, чем всякие там антенны, коммутаторы или подводные кабели, из-за которых как раз госдеп со всей дури кипишевал, по поводу типа шпионажа и типа всяких угроз национальной безопасности.
В итоге в 2013-м Huawei выкатила бренд смартфонов Honor. И уже к 2015-му его поставки оттопырились до 40 миллионов трубок, а выхлоп составил аж 6 миллиардов. Покупашки получали производительность, вполне сравнимую с премиальными флагманами, башляя при этом обычный ценник.
А потом, в декабре 2018-го, по указке США канадские копы повязали дочку Чжэнфэя, Мэн Ваньчжоу, которая восседала тогда на посту финансового директора Huawei. Ее выцепили прямо во время пересадки в аэропорту Ванкувера. Американские прокуроры пришили ей предъяву, мол, она помогала Huawei обходить санкции против Ирана через дочернюю фирму Skycom.
Мэн Ваньчжоу на форуме «Россия зовет»
И в следующем году правительство США занесло Huawei в санкционный список, втирая всем, что компания якобы несет вообще мощную угрозу американской нацбезопасности. У них очко жим-жим от одной только мысли, что оборудование Huawei Пекин будет юзать для шпионажа.
Эти санкции наглухо отрезали Huawei от ключевых американских технологий, включая сервисы Google вроде YouTube и Google Play. За пределами Китая продавать смартфоны Huawei стало нереально тяжело. Продажи по всей Европе эпично обвалились где-то аж на целых 40%. Чтобы спасти Honor, Huawei слила этот бренд за 15 лярдов баксов какому-то независимому консорциуму, поскольку под новой крышей бренд снова получал доступ к иностранным компонентам.
Американские санкции вдогонку даже TSMC запретили клепать для Huawei 5G-процессоры Kirin.
Но не смотря на санкции в 2020 Huawei в какие-то моменты даже обгоняла Samsung и Apple по продажам смартфонов на мировом рынке .
Спустя четыре года, после начала беспросветной технологической изоляции Huawei берёт и выкатывает смартфонище Mate 60 Pro с полноценным 5G и со спутниковой связью. 5G обеспечивал процессор Kirin 9000S. Это был прям свой собственный чип по 7-нанометровому техпроцессу, который спаяли прям внутри Поднебесной и с минимальной зависимостью от западного оборудования.
Модель стала символом технологического возвращения Huawei. За первые 6 недель серия Mate 60 разошлась на 1,6 млн штук. При этом спрос был настолько высоким, что девайсы постоянно заканчивались.
Вы не поверите, оказалось, что ещё в лохматом 2004-ом Чжэнфэй беспалево создал секретное подразделение HiSilicon по разработке чипов, и пристегнул к нему пачку скиловых инженеров. Это была армия судного дня.
И кстати смартфоны Huawei фурычат на собственной операционке HarmonyOS и собственным магазином AppGallery, чтобы была независимая экосистема.
Чжэнфэй стал для китайцев национальным гером. Книги с его изречениями продаются миллионными тиражами как пособия по выживанию в бизнесе и жизни. При этом он владеет жалким 1% акций Huawei. То есть по факту компанией на 100% владеют сами сотрудники через профсоюзный комитет Huawei Investment Holdings. Когда его однажды спросили не очкует ли он, что его тупо свергнут с трона с его тощей котлетой размером в 1%, Чжэнфэй ответил, что если и свергнут, то и замечательно, значит, контора наконец-то повзрослела.
Кстати, он сам ушел еще в 2011, и оставил после себя трех преемников, которые каждые полгода меняют друг друга, чтобы защитить компанию от рисков концентрации власти в одних руках, чтобы каждый батька играл вдолгую, ради всеобщего блага, а не ради погони за сиюминутной наживой. И если один вождь вдруг что-то напортачит, другой может оперативно все пофиксить.
Чжэнфэй по жизни шел с понятием, что трушный бизнес должен рулиться целыми институтами и прочными системами, а не хотелками какого-то одного единственного царька-батюшки. Чжэнфэй дистанцируется от влияния и богатства. Он даже ездит на метро и стоит в очередях среди обычных людей. Китайцы хотят чтобы в их стране было 100 Чжэнфэев.
До сих пор у него нет ни личного водителя, ни машины. Он по-прежнему стоит в очереди за такси и ездит на метро один.
Чжэнфэй выстроил такую корпоративную внутрянку, от которой у внешних ньюфагов тыква набекрень съезжает, потому что подлизывание задницы боссу там не просто не прокатывает, а вообще жёстко чмырится. Сотрудники, пытавшиеся лизнуть боссу в ущерб клиенту, мгновенно огребали люлей, а вот те, кто наоборот, клал на комфорт начальника ради решения проблемы клиента, как раз и выхватывали все самые сочные повышения.
Этот принцип проявился во всей красе, когда главный экономист Morgan Stanley Стивен Роуч приперся в штаб-квартиру Huawei во главе целой делегации инвесторов, руливших примерно 3 триллионами баксов, Чжэнфэй тупо бортонул эту встречу и отправил вместо себя одного из вице-президентов. Чжэнфэй пояснил свой жест так, что мол «Роуч нам не клиент. Я буду перетирать с любым клиентом, каким бы мелким он ни был, а инвестиционная делегация наше оборудование не покупает.» Эту же тему он требовал от каждого работника:
— «Повернись к клиенту лицом, а к начальнику жопой».
Уважаемые читатели, помогите мне пожалуйста. Чтобы сделать эту историю я прочитал 5 книг. Я люблю Пикабу, но к сожалению контент тут не монетизируется так, как монетизируется в каналах, подпишитесь в Max или Telegram, так вы поможете мне продолжать писать для вас истории о компаниях и брендах.
С момента последней статьи сделали много. Так как я условился, что теперь буду выпускать информацию об апдейтах в виде коротких постов, то вот: - Отполирован macOs агент и функционал с FileVault блоком. - Логирование действий под временной админкой. - EN локализация. - Процесс установки/удаления/преустановки агентов отполирован. - Самое главное: удаленное подключение к устройству пользователя прям из WebUI.
Подробнее о проекте и функционале в доках репозитория на гитхабе и в постах: Пост про сам проект, первые шаги и финальный функционал первого Public Release! Пост про разработку enterprise версии. В скором времени подготовлю статью про процесс разработки удаленного подключения, какие были архитектурные решения, сам процесс и финальный результат! Если вам интересно подробнее узнать про какую то функцию или архитектурное решение, то пишите, рад буду пообщаться на тему проекта.
P.S. Чуть задержался с постом про upd., поэтому дата вчерашняя
Продолжение моей эпопеи с self-hosted MDM решением
В прошлый раз я писал, как из за ограничений и необходимости админить смешанный парк корп устройств, появился собственный MDM. Несмотря на то что предыдущий пост вышел совсем недавно, упорная работа над проектом шла параллельно, поэтому готов представить вам продолжение. Параллельно буду прикреплять скрины нового веб интерфейса, чтобы можно было почувствовать разницу.
Dashboard
Изменения
С тех пор в базовой версии изменилось немного, чуть обновил дизайн, добавил необходимый функционал с массовой миграцией с других MDM, групповой энролмент, удаление ПО из веб интерфейса, поправил пару десяток багов и чуть подлотал безопасность. Но теперь о главном: появилась пилотная организация, которая захотела поставить его у себя, а вместе с ней - запрос enterprise версии и чеклист функционала, котрый в больнишстве своем и так был в роадмапе, но добавилось и еще пару новых фич, а главное, что они должны были быть ЖБ, поэтому я и мой коллега, приступили к работе. Итоговый функционал, который мы подготовили к enterprise 1.0: SSO, второй фактор, изоляция подразделений, выгрузка в SIEM, отчётность, бэкапы, LDAP, синхрон с AD, FileVault блокировка мака, тенанты, INFRA like a code. Интересным оказалось другое: почти каждая из этих функций, будучи написанной, вскрывала дефект не в себе, а в стыке со старым кодом. Ниже про то, что при этом сломалось и как чинилось.
Коротко: что появилось
Чтобы дальше было понятно, о чём речь, вот список без подробностей. Мультитенантность - несколько организаций или подразделений на одном сервере, у каждого свои устройства, группы, скрипты и политики. Каталог пользователей: синхронизация людей из LDAP или Active Directory и вход в панель доменным паролем. Корпоративный вход - OIDC, SAML, второй фактор по TOTP, автоматическое заведение и увольнение администраторов через SCIM. Эскроу ключей восстановления FileVault на macOS и принудительная блокировка диска. Экспорт журнала и событий в SIEM, архивирование журнала перед чисткой по сроку хранения, дашборд соответствия, сопоставление установленного ПО с базой уязвимостей. Аудит с хеш-цепочкой. Удалённая перезагрузка машины и группы с отсрочкой для сотрудника. Удаление программ с устройства из панели. Бэкап по расписанию с проверкой восстановления. Конфигурация парка как код, в YAML, в гите.
Journal
Изоляция, которой не было
Первым большим куском была мультитенантность. Постановка звучит просто: администратор одного подразделения не должен видеть устройства другого. Простой и неправильный способ - добавить колонку tenant_id и не забывать фильтровать по ней в каждом запросе. Ключевое слово тут «не забывать». Один пропущенный WHERE - и это уже не баг выдачи, а утечка между организациями. Хуже того: пропущенный WHERE в коде, который напишут через полгода, ничем не отличается от обычной невнимательности, а последствия у него другие.
Поэтому изоляция ушла в базу - построчные политики PostgreSQL, причём с FORCE ROW LEVEL SECURITY, чтобы политика действовала и на владельца таблицы. Роль, под которой ходит сервер, лишена права обходить RLS. Смысл в том, что теперь запрос, написанный завтра и забывший про тенанта, вернёт не чужие строки, а ничего.
Звучит хорошо. Дальше начинается интересное.
Пустая строка вместо «не задан»
Тенант передаётся в базу через кастомный параметр сессии, который выставляется в начале транзакции: set_config с флагом «на время транзакции». Политика читает его и сравнивает с колонкой. Всё честно ровно до того момента, когда транзакция заканчивается.
Оказалось, что такой параметр после транзакционного set_config возвращается не в состояние «не задан», а в пустую строку. Для PostgreSQL это разные вещи, и для приведения к uuid - тем более. Дальше срабатывает соединение из пула: первый же запрос с привязкой к тенанту «отравляет» соединение, и любой следующий запрос к таблице под RLS, сделанный мимо скоупа, ловит пустую строку вместо идентификатора.
Самое неприятное в этом дефекте - что у него два разных лица. На отравленном соединении запрос падает с ошибкой приведения типа, то есть даёт живую пятисотку в интерфейсе. На свежем соединении из пула тот же самый запрос молча возвращает ноль строк. Мы неделю смотрели на эти два симптома как на две несвязанные проблемы: где-то интерфейс ругается ошибкой, где-то список просто пустой, и оба поведения плавают. Пока не выяснилось, что это одна и та же строчка кода.
Лечение простое: запрос к таблице под RLS обязан идти внутри открытого скоупа тенанта, а если вызывающий код скоуп не открывает вовсе, функция обязана открыть его сама. Второй случай важнее, чем кажется. Когда команда приходит от агента по gRPC, никакого «текущего пользователя» и его тенанта в контексте нет и быть не может: агент аутентифицирован сертификатом устройства, а не человеком. Значит, привязку берём из строки самого устройства.
И отдельно почему тесты этого не ловили. В тестовом окружении роли базы был выставлен параметр по умолчанию, чтобы фикстуры не разваливались. То есть в тестах запрос мимо скоупа всегда «попадал» в тенанта по умолчанию и вёл себя прилично. На боевом сервере параметра у роли нет. Локальный стенд, отличающийся от прода одной строчкой конфигурации, проверял не то, что мы думали. Регресс переписан так, что он проверяет чужой скоуп, а не «работает ли вообще», и обязан падать на коде до правки.
Enrollment
Ключ восстановления, который терялся молча
Второй кусок — эскроу ключей восстановления FileVault. Сценарий такой: администратор включает шифрование диска на маке, ключ восстановления шифруется на публичный ключ получателя и уезжает на сервер в кастодию. Никто, кроме держателя приватного ключа, его прочитать не может; сервер хранит непрозрачный блоб.
Когда сверху легла мультитенантность, у этой подсистемы обнаружилось два дефекта, и тот, что в выдаче, был менее опасным из двух.
Выдача ходила в базу мимо скоупа - то самое отравленное соединение из предыдущей главы, с пятисоткой на одном пути и тихим нулём строк на другом. Плюс отдельная тонкость: скоуп нужно открывать по тенанту того, кто спрашивает, а не по устройству из адреса запроса. Идентификатор устройства приходит снаружи, и привязка к нему отдала бы администратору одного подразделения кастодию чужого.
А вот приём был сломан хуже. У обработчика, принимающего блоб от агента, тенанта в контексте нет. Значит, вставка шла с тем, что база подставляет по умолчанию. И вот тут FORCE RLS начинает все портить: блоб устройства чужого тенанта ложился в тенанта по умолчанию, а под построчной политикой его не видел уже никто. Вообще никто. Ключ восстановления не «попадал не туда» - ОН ИСЧЕЗАЛ, и обнаружилось бы это ровно в тот день, когда его понадобится достать.
Заодно поправили ещё одну вещь из той же оперы. Если сервер присылал агенту задачу типа, которого эта версия агента не знает, агент выполнял пустой скрипт и рапортовал об успехе. В панели — «выполнено», на устройстве — ничего. Теперь такая задача завершается ошибкой с текстом про неподдерживаемый тип и версию агента. Отставание агента должно быть видно как отставание, а не как выполненная работа.
И общее правило, которое из этого выросло: задача не имеет права заканчиваться молчаливым успехом. Сотрудник нажал «Отмена», не ответил за десять минут, за машиной никого нет, шифрование выключено — оператор обязан увидеть именно эту причину. «Выполнено» — самый дорогой из возможных неверных ответов, потому что после него никто не приходит проверять.
Groups
Корпоративный вход и цена быстрого кода
Блок идентичности — второй фактор, SCIM, SAML — писался быстро. Он же оказался самым богатым на находки при ревью.
Коды восстановления для второго фактора лежали открытым текстом и представляли собой обрезок uuid — около тридцати двух бит энтропии. То есть механизм, который должен спасать при потере телефона, сам был слабым звеном и в базе, и по стойкости.
Второй фактор снимался без подтверждения: чтобы выключить MFA, достаточно было действующей сессии. Захват сессии в такой схеме означает и снятие второго фактора — то есть весь смысл второго фактора.
Политика «требовать MFA у всех» была ловушкой. Сервер требовал второй фактор для доступа к ручке привязки второго фактора. Включив политику, администратор запирал сам себя и всех остальных: привязаться нельзя, потому что не привязан.
SAML принимал любую подписанную assertion. Разбор ответа вызывался с пустым списком ожидаемых идентификаторов запроса, то есть проверка «это ответ на наш запрос» отсутствовала. Пользователь при этом попадал в первое попавшееся членство вместо организации своего провайдера. Плюс пара ключей нашего сервис-провайдера генерировалась заново при каждом старте сервера — то есть настройка в IdP переставала быть валидной после перезапуска.
SCIM не писал аудит (в колонку с идентификатором пользователя уезжала строка «scim») и глотал ошибку удаления при увольнении. Увольнение, завершившееся ошибкой и отрапортовавшее успех, — это лучший подарок аудитору из всех возможных.
Миграции, которые сносили сами себя
Отдельная история, короткая и поучительная.
Схему базы у меня накатывает простой скрипт, который прогоняет SQL-файлы через psql. Down-миграций нет намеренно: откат только из бэкапа. Разработчик, писавший новые миграции, оформил их в популярном формате с аннотациями-комментариями: секция up, секция down.
Для инструмента, понимающего эти аннотации, файл делится на две части, и вторая при обычном накате не выполняется. Для psql аннотация — это просто комментарий. То есть выполняется весь файл целиком, включая то, что после «секции down». Миграция создавала таблицы и тут же их удаляла, а факт применения записывался честно. Схема получалась пустой, номер миграции — свежим.
Ошибка ловится за минуту, если знать, куда смотреть, и не ловится вообще, если не знать. Мораль тут не про goose и не про psql: любой формат, где часть файла «не должна выполняться», опасен ровно настолько, насколько инструмент, который это обеспечивает, отличается от того, который вы реально запускаете.
Agents update
Гейты, зелёные на бумаге
А это самая неприятная глава, потому что тут я подставился сам.
Перед пушем у меня прогоняется набор проверок: тесты сервера, линтер, линтер отдельно для корпоративной сборки, сборка и тесты фронтенда. Всё зелёное. Выкатываю. Сервер падает при старте с паникой и лежит шесть минут, пока я откатываюсь.
Причина оказалась в порядке сборки приложения: опции роутера стали применяться раньше, чем объявлялись группы маршрутов, и одна из зависимостей приезжала пустой. Тесты этого не увидели, потому что ни один из них не собирал приложение тем же набором опций, что боевой запуск. Каждый тест собирал свой маленький роутер с тем подмножеством, которое было нужно конкретному тесту.
Вывод: подмножество проверяет то, что вы помнили, а ломается то, что вы забыли. Тест точки сборки обязан собирать систему тем же самым набором опций, что и прод, а не представительным набором. И вторая часть того же вывода: у каждой новой проверки нужно один раз убедиться, что она умеет краснеть. У меня в тот период три проверки подряд оказались зелёными просто потому, что не проверяли ничего — одна сравнивала файл сам с собой, другая молча выходила при отсутствии инструмента.
Бэкап, который не восстанавливался
Пункт чеклиста «бэкапы» я считал скучным и дешёвым. Написать дамп по расписанию, ротацию, положить в отдельный том - фигня.
Проблема нашлась при попытке восстановиться на чистой машине. Дамп базы не содержит ролей кластера — их там нет по устройству, это объект уровня кластера, а не базы. При этом роль, под которой ходит сервер, создаётся миграцией без пароля: пароль задаётся руками при развёртывании. Итого процедура восстановления давала живую базу со всеми данными, к которой сервер не может подключиться. И выяснилось бы это ровно в момент аварии — то есть в момент, когда права на ошибку нет.
Теперь в бэкап входят роли кластера отдельным дампом, в документации они накатываются до базы, а в сам прогон встроена проверка: восстановление в одноразовую базу того же кластера, сверка номера применённой миграции с живой, проверка наличия таблиц и пользователей. Сверяем при этом только то, что не меняется само по себе: счётчики журнала и устройств растут прямо во время бэкапа и мигали бы ложными расхождениями. Потолок у такой проверки понятный — тот же кластер, роли и расширения уже на месте, — и он честно записан в документации. Полноценная проверка на чистой машине остаётся ручной процедурой.
Аудит, который можно проверить
Журнал действий администраторов был с самого начала. Корпоративный чеклист требует другого: доказательства, что журнал не переписывали.
Сделано хеш-цепочкой: каждая запись включает хеш предыдущей. Такая цепочка ловит три вещи — правку записи, удаление из середины и перестановку. Чего она не ловит сама по себе — это переписывания журнала целиком: злоумышленник с доступом к базе может пересчитать всю цепочку заново, и она будет согласованной.
Поэтому голова цепочки ежесуточно публикуется наружу, в лог сервера, откуда её забирает внешний сборщик логов. Сверка с опубликованной головой и отличает «журнал внутренне согласован» от «журнал не переписывали». Это, кстати, хороший пример того, как выглядит честная формулировка свойства: не «журнал защищён от подделки», а «подделка обнаруживается при условии, что якорь уехал наружу до неё».
Второй момент: у журнала есть срок хранения, и чистка по сроку убивала бы ту самую цепочку, ради которой всё затевалось. Поэтому перед удалением записи выгружаются в архив, а в цепочке остаются якоря, переживающие чистку.
Scripts
Про границу enterprise
Теперь та часть, которую я в прошлый раз сознательно обошёл одним абзацем.
Инструмент открыт под Apache-2.0 и остаётся открытым. Есть корпоративная редакция. Границу я проводил по одному правилу: базовая безопасность не продаётся. Взаимный TLS, идентичность по сертификату, одноразовые токены подключения, журнал аудита, подпись обновлений агента, политика паролей, блокировки при переборе — всё это в открытой части и никуда оттуда не уедет. Модель pay to secure кажется мне порочной по сути: незащищённый MDM не является продуктом, который вообще стоит ставить.
Enterprise версия — это то, что нужно организации, а не администратору: корпоративная идентичность, изоляция подразделений, работа с ключами восстановления дисков, compliance-отчётность и выгрузка в SIEM, работа с каталогом пользователей. Всё, что описано выше в этом тексте как «блок идентичности» и «эскроу», — оттуда.
Пара технических решений про саму лицензию.
Проверка полностью офлайновая. Сервер несёт вшитый на сборке публичный ключ и проверяет подпись файла лицензии сам. Ни установка, ни работа, ни истечение не требуют связи с моей инфраструктурой — иначе развёртывание в закрытом контуре, которого у корпоративных клиентов хватает, было бы невозможно. Мне это ещё и удобно: инфраструктура, которой нет, не падает и не утекает.
Лицензия двухкомпонентная: подписанный файл плюс пароль активации, которые передаются раздельно. Файл сам по себе бесполезен — это защита от «переезда» ключа между покупателями.
Истечение лицензии ничего не ломает. Корпоративные функции выключаются, операционная часть продолжает работать как открытая редакция, данные остаются на месте. Сервер не превращается в тыкву в полночь.
Код корпоративной части физически отсутствует в открытой сборке — он собирается по сборочному тегу, а не выключается флагом. Причина прагматичная: выключенную проверку в открытых исходниках просто удаляют форком за пять минут.
Polices
Что по-прежнему не сделано
Один узел — по-прежнему одна точка отказа. И блокер тут не абстрактный «нужно потрудиться», а вполне конкретное место: реестр подключённых устройств живёт в памяти процесса, обычной картой с мьютексом. Вторая нода физически не может послать команду устройству, которое подключено к первой: heartbeat и инвентарь размажутся по общей базе, а командный канал — нет. Вариантов ровно два — маршрутизировать команды через шину (очередь у меня и так стоит, половина дела сделана) или прибивать устройство к ноде на балансировщике. Это проектное решение, и делать его на бегу я не хочу.
Сопоставление установленного ПО с базой уязвимостей сейчас наивное — по вхождению строки версии. На нестандартных схемах версий оно даёт и ложные срабатывания, и пропуски. Это годится как подсказка администратору, куда посмотреть, и не годится как отчёт, который показывают аудитору. Так и написано в документации.
На текущем этапе идет разработка удаленного подключения! Следите за новостями, думаю в дальнейшем буду ограничиваться просто небольшими постами с кратким описанием новых фич!
И главное, что не изменилось: скрипт-канал исполняет произвольный код с максимальными правами на каждом устройстве. Реальный периметр безопасности — хост, на котором стоит сервер, а не TLS и не разграничение ролей внутри панели. Всё, что я написал выше про изоляцию тенантов и второй фактор, не отменяет этой строчки ни на грамм.
Исходники открыты, ссылку оставляю. Как и в прошлый раз, готов к любым обсуждениям!
В Git in Sky мы последние полтора года плотно занимаемся безопасностью AI-контуров: аудируем интеграции, разбираем архитектуру доступов, помогаем командам выстроить нормальный контроль над тем, что происходит между их данными и языковыми моделями.
За 2025-2026 годы произошло достаточно публичных инцидентов с AI, чтобы написать большую статью. И призвать всех, кто работает с AI-решениями, обращать внимание на безопасность.
Масштаб: что говорит статистика
По данным IBM Cost of Data Breach Report 2025 , 13% всех корпоративных утечек в прошлом году прошли через AI-системы или AI-интеграции. Средняя стоимость одного такого инцидента $4.88 млн. OWASP в своём обновлённом топе угроз для LLM-приложений поставил prompt injection на первое место LLM01:2025. По оценкам Lakera , 73% задеплоенных AI-агентов в 2025 году уязвимы к тому или иному виду инъекций.
Громкие инциденты
DeepSeek: открытая база с миллионом чатов
Январь 2025
Wiz Research обнаружили, что у DeepSeek открыт ClickHouse-инстанс без аутентификации по адресам oauth2callback.deepseek.com:9000 и dev.deepseek.com:9000. Через веб-интерфейс можно было выполнять произвольные SQL-запросы. CTO DeepSeek сам признал: "это было настолько просто найти, что мы уверены – мы не единственные, кто это сделал".
Что лежало в базе: более 1 млн строк логов с историей чатов пользователей, API-ключи, детали бэкенда. Wiz уведомили компанию, база была закрыта за 30 минут после уведомления. Но к тому моменту данные уже расходились по даркнету DeepBreach слили дамп на форумах.
Почему это важно: DeepSeek пускали в корпоративную среду тысячи компаний именно в этот период у него был взрывной рост. Компании настраивали интеграции с production-системами, пока их чаты читал кто угодно с браузером.
LiteLLM → Mercor: supply chain через AI-библиотеку
Март 2026
19 марта 2026 года атакующие переписали git-теги в репозитории trivy-action, подменив релиз v0.69.4 на вредоносный. 24 марта, в 10:39 UTC, CI/CD LiteLLM запустил сборку, вытащил Trivy без закреплённой версии, и malware-экшен слил PYPI_PUBLISH токен. Через 40 минут на PyPI появились версии litellm 1.82.7 и 1.82.8 с встроенным стилером.
Вредоносный .pth-файл (litellm_init.pth, 34628 байт) запускался автоматически при каждом старте Python. За 40 минут до блокировки PyPI пакет скачали 119 000 раз. Стилер собирал: SSH-ключи, GCP ADC, AWS access keys, Azure-токены, Kubernetes configs, API-ключи из .env файлов, пароли от баз данных.
Mercor – платформа с оценкой $10 млрд, поставляет тренировочные данные для крупных AI-компаний использовала LiteLLM в production. В результате атаки утекло 4 TB данных: 939 GB исходного кода платформы, 211 GB базы пользователей, 3 TB видеозаписей интервью и документов верификации личности. Хакеры выставили дамп на продажу.
Последствия: Meta приостановила сотрудничество с Mercor. OpenAI и Anthropic начали внутренние расследования – Mercor работал с тренировочными данными обоих. Подан коллективный иск от 40 000 человек. Утекли не просто персональные данные, но и методологии разметки и тренировки моделей.
Vercel: AI-агент как вектор атаки через OAuth
Апрель 2026
Vercel – IT-инфраструктурная компания с оценкой под $10 млрд. Вектор атаки оказался неожиданным: не уязвимость в ПО, не фишинг, не вирус. Сотрудник подключил AI-ассистента к своему рабочему Google Workspace через стандартный OAuth-флоу.
Механика: AI-агент запросил стандартный набор прав: чтение почты, доступ к Drive, календарь. Сотрудник нажал «Разрешить», как нажимают обычно, и забыл. Через этот OAuth-токен атакующие вытащили переписку с production-ключами, конфиги из Google Drive и куски исходников из прикреплённых файлов.
Главный урок: Периметр безопасности Vercel строился вокруг людей, репозиториев и инфраструктуры. AI-агентов в модели угроз не было. Модель, которую сотрудник подключил на прошлой неделе, читает корпоративную почту с теми же правами, что и он сам и не увольняется никогда. Аудит AI-интеграций нужно вести как аудит доступа сотрудников: инвентаризация, пересмотр раз в квартал, отзыв токенов по умолчанию.
Средняя компания сегодня подключила десяток AI-тулов через OAuth к корпоративным сервисам. MCP-серверы держат живые токены к GitHub, Slack, Google Drive. Один скомпрометированный AI-вендор – и у атакующего Google Workspace любой из ваших клиентов.
GitHub Copilot: RCE и кража данных через prompt injection
Август 2025
CVE-2025-53773 – удалённое выполнение кода
Критическая уязвимость в GitHub Copilot и Visual Studio Code: через prompt injection атакующий получал Remote Code Execution на машине разработчика. Эксплуатация работала через файл .vscode/settings.json – экспериментальная фича отключала все подтверждения для операций Copilot, позволяя AI выполнять shell-команды без oversight. Патч вышел в Patch Tuesday августа 2025.
CVE-2025-59145 (CamoLeak) – кража секретов без выполнения кода
CVSS 9.6. Атака CamoLeak: злоумышленник подаёт pull request с невидимыми markdown-комментариями, содержащими вредоносные инструкции. Copilot обрабатывает их и через механизм рендеринга изображений сливает API-ключи и исходный код из приватных репозиториев. GitHub тихо закрыл уязвимость, отключив рендеринг изображений в Copilot Chat. Публичного disclosure не было, исследователь раскрыл детали через 2 месяца после патча.
Взлом AI-агентов Anthropic, Google и Microsoft через GitHub
Октябрь 2025
Исследователь Aonan Guan последовательно взломал AI-агентов всех трёх компаний через их GitHub Actions интеграции. Схема – prompt injection, механизм в каждом случае разный:
Anthropic (Claude Code Security Review): заголовок PR с payload-ом, выполнившим embedded-команды. Агент слил Anthropic API key, GitHub access token и другие секреты в JSON-ответе. Bounty: $100.
Google (Gemini): в GitHub issue добавлена фейковая "trusted content section" после легитимного контента. Gemini переопределил safety-инструкции и опубликовал собственный API-ключ как комментарий к issue. Bounty: не раскрыто.
Microsoft (Copilot Agent): вредоносные инструкции спрятаны в HTML-комментарии внутри GitHub issue — в отрендеренном markdown человек их не видит, AI видит. Разработчик назначил issue на Copilot Agent, бот выполнил hidden-инструкции. Bounty: $500.
Ни одна из компаний не выпустила публичный advisory и не присвоила CVE. Пользователи на старых версиях инструментов остались уязвимы.
Microsoft 365 Copilot: EchoLeak и Reprompt
2025-2026
EchoLeak (CVE-2025-32711, CVSS 9.3)
Атакующий вставляет вредоносный prompt-payload в тело письма или документа. Microsoft 365 Copilot при суммаризации обрабатывает payload, извлекает приватные данные из почтового ящика и возвращает их атакующему. Клик пользователя не нужен – достаточно получить письмо. Microsoft закрыл уязвимость на стороне сервера, пострадавших клиентов, по их заявлению, не было.
Reprompt (CVE-2026-26133)
Исследователи Varonis обнаружили: одного клика на легитимную Microsoft-ссылку достаточно, чтобы злоумышленник захватил сессию Copilot и сохранял доступ даже после закрытия чата. Атака позволяет читать почту, Teams-переписку, документы SharePoint – всё, к чему у пользователя есть доступ.
Массовые jailbreak-атаки
2025
Sockpuppeting — один вызов API, 11 моделей
Техника, сломавшая ChatGPT, Claude, Gemini и 8 других моделей одной строкой кода. Атака использует стандартную функцию API: в поток ответа модели перед её ответом инжектируется фейковая согласительная фраза ("Sure, here is how to do it:"). Модель воспринимает это как продолжение своего собственного ответа и продолжает без ограничений.
Policy Puppetry — обход через ролевое моделирование
Prompt-инъекция комбинирует "политику" и ролевое моделирование с leetspeak (замена букв символами). Обошла guardrails в Gemini 2.5, Claude 3.7 и GPT-4o. Затрагивала тематику CBRN, массового насилия и самоповреждений.
Cisco: DeepSeek — 100% success rate при jailbreak
Исследование Cisco показало: DeepSeek R1 не отклонил ни один из 50 тестовых harmful-промптов. 100% success rate джейлбрейка. В сравнении: ChatGPT 4.5 блокировал 97% попыток, Claude 3.7 Sonnet – 100%.
Контекст: именно DeepSeek в начале 2025 года активно интегрировали в корпоративные продукты как "дешёвую альтернативу GPT-4". Некоторые компании направляли через него чувствительные запросы.
Фреймворк: как систематизировать атаки на AI-агентов
В 2025 году Google DeepMind опубликовал исследование "AI Agent Traps" – систематизацию векторов атак на автономных AI-агентов. Документ описывает 6 категорий манипуляций, которые работают не через уязвимости кода, а через природу самих LLM.
Content Injection (инъекция контента)
Вредоносные инструкции прячутся в данных, которые агент обрабатывает: веб-страницы, письма, документы, PDF. Агент не может отличить легитимный контент от инструкции атакующего, он обрабатывает всё как текст. Это базовый механизм всех prompt injection атак в реальных кейсах выше.
Semantic Manipulation (семантическая манипуляция)
Переформулировка вредоносного запроса через авторитетные контексты: "SYSTEM:", "[TRUST]", "Developer mode". Модель обучена следовать системным инструкциям атакующий имитирует их формат. Именно так работает sockpuppeting и policy puppetry.
Cognitive State Attacks (атаки на состояние)
Манипуляции через несколько ходов диалога. Модель постепенно "соглашается" с установками атакующего, после чего выполняет запросы, которые в лоб отклонила бы. Multi-turn jailbreaks в 2025 году давали success rate выше 70% против моделей, защищённых только от single-turn атак.
Behavioural Control (контроль поведения)
Инструкции, изменяющие долгосрочное поведение агента: "Когда встретишь X, всегда делай Y". Агент запоминает правило и применяет его в будущих сессиях, создавая персистентный backdoor без изменения весов модели.
Systemic Attacks (системные атаки)
Эксплуатация архитектуры: RAG poisoning (отравление базы знаний агента), атаки на tool use (агент вызывает внешние API). Если агент имеет доступ к GitHub, почте, базам данных – атакующий через content injection получает эти же доступы.
Human-in-the-Loop Bypasses
Атаки на подтверждения пользователя. Агент формулирует запрос на подтверждение так, чтобы пользователь машинально нажал "Да" – или использует side channels, чтобы вообще не требовать подтверждения. CVE-2025-53773 в Copilot был именно об этом: экспериментальная фича отключала все confirmations.
Аааа, что же делать, мы все умрем
Да, но позже)
Хорошая новость в том, что большинство этих проблем решается дисциплиной: аудит AI-интеграций наравне с аудитом сотрудников, закреплённые версии зависимостей, явная модель доверия к контенту на уровне архитектуры. Инструменты есть – просто их пока редко применяют к новому классу сущностей.
И здесь мне кажется, что профессия DevOps переживает второе рождение. Всё, что DevSecOps-инженеры умеют делать с классической инфраструктурой – пайплайны верификации артефактов, управление секретами, политики доступа, мониторинг аномалий – напрямую переносится на AI-контур.
Это интересная ситуация, когда старая экспертиза становится дефицитной заново.
Продолжаю беседы с нашим техлидом Дмитрием. Сегодня — о том, как взлом одного npm-аккаунта за 3 часа распространил RAT на 174 000 пакетов и почему стандартные инструменты вроде NPM Audit это не поймали. Разбираем инцидент с Axios: механику атаки, слепые пятна в CI/CD и то, что реально работает.
30 марта 2026: что произошло за 3 часа
30 марта 2026 года в npm появились две вредоносные версии Axios — 1.14.1 (тег latest) и 0.30.4 (тег legacy). Axios — JavaScript-библиотека для HTTP-запросов с ~100 млн загрузок в неделю и 174 000 зависимых пакетов в npm. Фактически, если проект на Node.js — с высокой вероятностью он тянет Axios транзитивно.
Злоумышленник получил доступ к npm-аккаунту jasonsaayman — ведущего мейнтейнера библиотеки. Первый признак компрометации: email аккаунта сменился с jasonsaayman@gmail.com на ifstap@proton.me, а метод публикации изменился — с доверенного OIDC-пайплайна со SLSA-провенансом на прямой CLI-publish. Оба флага автоматически поймала Elastic Security Labs через мониторинг цепочки поставок.
Вредоносные версии пробыли в реестре около 3 часов. За это время их успели скачать и задеплоить тысячи команд — у большинства из них сборка забирает latest-версию без явного закрепления.
Как работает атака
plain-crypto-js: вредоносная зависимость
Злоумышленник не патчил код самого Axios. Вместо этого он добавил в зависимости пакет plain-crypto-js. Схема в два шага:
plain-crypto-js@4.2.0 — «чистая» версия, опубликована заранее для создания истории публикаций
plain-crypto-js@4.2.1 — вредоносная версия с postinstall-хуком: при установке автоматически скачивала и запускала stage-2 RAT с C2-сервера sfrclak[.]com:8000
RAT — кросс-платформенный: отдельные payload для macOS, Windows и Linux. После установки соединения с C2 — полный удалённый доступ к машине.
Почему это прошло через большинство CI/CD без остановки
CI/CD-пайплайны собирают, тестируют и доставляют обновления без участия человека. Когда команда не закрепляет конкретную версию зависимости, а указывает последнюю доступную (^1.x.x), при каждой сборке npm резолвит актуальный latest. В окно между 30 и 31 марта — это была 1.14.1 с RAT внутри.
Большинство команд не имеют в CI/CD шага, который проверяет безопасность зависимостей до сборки. По данным OpenSSF Scorecard 2024, менее 20% открытых проектов используют закреплённые хеши зависимостей. У коммерческих проектов, которые тянут эти пакеты, картина не лучше.
Почему NPM Audit не остановил атаку
NPM Audit сравнивает установленные пакеты с базой CVE. На момент атаки ни Axios 1.14.1, ни plain-crypto-js 4.2.1 не числились в базах — они были свежеопубликованы. NPM Audit сканировал их и возвращал статус clean.
Логика инструмента здесь не ломается — она просто неприменима к этому классу атак. CVE-базы фиксируют известные уязвимости. Атака через компрометацию аккаунта публикует формально новый пакет, который ещё не успел попасть ни в какую базу.
Этот инцидент поймал инструмент другого класса: Elastic Security Labs обнаружила атаку через поведенческий мониторинг — отслеживание изменений метаданных пакетов (смена email, метод публикации, новая зависимость в релизе без истории изменений).
Зависимости — новый периметр безопасности
Что сломалось в старой парадигме?
Раньше ответственность делилась по ролям: тимлид или архитектор решал, какой модуль добавить; DevOps следил за процессом доставки; безопасники подключались позже с SAST/DAST-проверками; юристы — за лицензиями. Каждый проверял своё.
Инцидент с Axios показывает разрыв в этой схеме: никто из них не проверял, остался ли аккаунт мейнтейнера под контролем легитимного человека. Уровень доверия к подписанным пакетам оказался не абсолютным — он был привязан к конкретной учётной записи, которую можно угнать.
174 000 пакетов: почему масштаб такой
Axios входит в топ-5 самых скачиваемых пакетов npm. 174 000 пакетов прямо или транзитивно зависят от него. Механика та же, что в CMS-эпоху с WordPress и Joomla: одна уязвимость в ядре — ключ ко всем проектам на этой платформе.
Стандартный Node.js-проект содержит 40–60 прямых зависимостей. У каждой из них — свои зависимости, в среднем по 5–7 пакетов. Итого: 40 × 5 = 200+ пакетов, которые молча живут в вашем проекте, и за каждым — конкретный человек с учётной записью.
Транзитивные зависимости — отдельный класс: пакеты, нужные только на этапе сборки и не попадающие в production. Они тоже могут нести угрозу и при этом вообще не попадают в фокус code review.
Как AI меняет соотношение сил
AI ускоряет написание кода, помогает с troubleshooting и делает автоматическое code review. Те же возможности работают против защитников: нейросеть сканирует чужой код на уязвимости за минуты — задача, на которую опытный специалист раньше тратил часы.
Атрибуция этого инцидента — северокорейский threat actor (по данным Google Cloud Threat Intelligence). Это уже не скрипт-кидди с форума. Государственные группы используют AI для поиска точек входа в supply chain, автоматически сканируя тысячи пакетов на слабые аккаунты мейнтейнеров.
Количество уязвимостей в open source коде, которые ещё не выявлены и не задокументированы, исчисляется миллионами. По данным исследования Google Project Zero за 2023 год, медианное время от обнаружения уязвимости до публичного патча — 25 дней. AI сокращает время поиска на стороне атакующих быстрее, чем растут команды безопасности на стороне защитников.
Что остановило бы эту атаку
npm audit signatures
Команда проверяет криптографические подписи каждого пакета и подтверждает, что публикация прошла через официальный CI/CD-пайплайн с SLSA-провенансом — а не через прямой CLI-publish с изменённого аккаунта.
В случае Axios 1.14.1 эта проверка выявила бы аномалию немедленно: смена метода публикации с OIDC на прямой CLI — явный флаг. Именно этот сигнал поймала Elastic Security Labs в своём мониторинге.
Что нужно встроить в CI/CD
Закреплённые версии или хеши зависимостей — npm install --frozen-lockfile или использование package-lock.json с commitом в репозиторий
npm audit signatures — проверка подписей перед каждой сборкой
SAST на зависимости — статический анализ не только своего кода, но и устанавливаемых пакетов
Dependabot или аналоги — автоматические уведомления об уязвимостях в зависимостях с известными CVE
Поведенческий мониторинг пакетов — анализ metaданных релизов: смена email, смена метода публикации, новые зависимости без истории
Крупные компании уже внедряют эти практики в рамках DevSecOps. Малые проекты — пока нет. Именно они и составляют большую часть из 174 000 пострадавших пакетов.
Итог
За 3 часа 30-31 марта 2026 года один скомпрометированный аккаунт мейнтейнера превратил библиотеку с 100 млн загрузок в неделю в вектор доставки RAT на macOS, Windows и Linux. Атака остановилась не потому, что сработала защита большинства команд — а потому что Elastic Security Labs вела поведенческий мониторинг и быстро инициировала удаление пакетов из реестра.
Периметр сети, права доступа, свой код — всё это давно под контролем. Зависимости — чужой код, за которым стоит конкретный человек с учётной записью — оставались вне этого периметра. Инцидент с Axios закрыл этот слепой пятно для тех, кто его заметил.
Те, кто не заметил, узнают позже — когда что-то пойдёт не так.