Пакет npm із 27 000 завантажень непомітно крав токени OpenAI
Шкідливий npm-пакет під назвою codexui-android протягом невідомого часу непомітно викрадав токени автентифікації OpenAI у розробників, які його встановили. Маючи близько 27 000 щотижневих завантажень, пакет видавав себе за легітимний інтерфейс користувача для моделі Codex від OpenAI. Під цією знайомою оболонкою він здійснював прихований збір облікових даних, який дослідники безпеки тепер класифікують як хрестоматійну атаку на ланцюг постачання npm, націлену на токени OpenAI у великих масштабах.
Це відкриття є ще одним гострим нагадуванням, що реєстри пакетів не є безпечними за своєю суттю, а сама лише популярність не свідчить про надійність.
Як codexui-android приховував крадіжку токенів всередині легітимного на вигляд пакета
Атака спиралася на простий, але ефективний обман: створити те, що розробники дійсно хочуть використовувати, а потім додати шкідливу логіку, яка безшумно працює у фоновому режимі. Пакет codexui-android пропонував функціональний інтерфейс для Codex від OpenAI, тож розробники встановлювали його, тестували та залишали у своїх проєктах, часто навіть не замислюючись, що пакет робить на мережевому рівні.
Такий підхід відомий як атака через троянізований пакет. Шкідливий код був вбудований у, здавалося б, корисний інструмент, обходячи природний скептицизм, який викликав би явно нефункціональний або погано написаний пакет. Пакет викрадав рефреш-токени OpenAI — довготривалі облікові дані, які дозволяють застосункам запитувати нові токени доступу без повторного входу користувача.
Назва codexui-android також дотримувалася угоди про іменування, яка натякала на легітимність. Вона запозичила впізнаваність бренду продукту OpenAI Codex, додавши специфічний для платформи суфікс, що робило пакет схожим на спеціалізований інструмент, наближений до мобільних платформ. Розробники, які шукали в npm інструменти, пов’язані з Codex, не мали б очевидної причини не довіряти йому.
Що насправді дозволяють зловмисникам викрадені рефреш-токени OpenAI
Рефреш-токени — це не просто паролі. У багатьох системах автентифікації вони фактично є майстер-ключами. Коли зловмисник отримує дійсний рефреш-токен, він може багаторазово генерувати нові токени доступу, підтримуючи постійний доступ до облікового запису навіть після завершення початкового сеансу або зміни пароля.
Для облікових записів OpenAI такий доступ може означати несанкціоноване використання платних API-кредитів, доступ до збережених запитів або даних донавчених моделей, потенційний витік власницького коду, переданого через API, а в організаційному контексті — горизонтальний доступ до командних ресурсів, прив’язаних до того самого облікового запису.
Ризик швидко зростає в середовищах розробки. Інженери часто працюють з API-ключами та токенами, які мають підвищені права. Один скомпрометований рефреш-токен у CI/CD-конвеєрі або спільному середовищі розробки може дати зловмиснику постійну точку опори, яку важко виявити та ще важче повністю усунути. Цей каскадний ефект нагадує те, що сталося під час зламу Dropbox Sign, де викрадені облікові дані відкрили шляхи до взаємопов’язаних систем далеко за межами початкової точки компрометації.
Чому екосистема npm робить атаки на ланцюг постачання легко масштабованими
Реєстр npm містить понад два мільйони пакетів. Публікація нового пакета потребує мінімальної перевірки особи, а відкрита природа реєстру — це саме те, що робить його таким корисним для світової спільноти розробників. Це ж робить його постійною мішенню для атак на ланцюг постачання.
Випадок із codexui-android демонструє, як зловмисники використовують модель довіри, яка лежить в основі відкритої розробки. Розробники зазвичай припускають, що пакет із великою кількістю завантажень пройшов певний рівень перевірки спільнотою. Це припущення стає дедалі небезпечнішим. Лічильники завантажень можна штучно завищити, а реальне використання не дорівнює перевірці безпеки.
Ширша проблема атак на ланцюг постачання npm не є новою, але націлювання на інструменти ШІ знаменує еволюцію. Оскільки розробники інтегрують API великих мовних моделей у виробничі системи, токени, які автентифікують ці інтеграції, стають цінними цілями. Зловмисники явно усвідомлюють цей зсув. Пакети, що імітують інструменти розробників ШІ, є новою категорією загроз, якій спільнота безпеки все ще намагається дати відсіч у масштабі.
Багаторівневий захист для розробників: ізоляція облікових даних, сегментація мережі та не тільки
Інцидент із codexui-android вказує на кілька конкретних практик, які можуть зменшити вразливість до цього класу атак.
Ізоляція облікових даних — це найперший захід мінімізації наслідків. Токени API та рефреш-токени повинні мати якомога вужчу область дії, зберігатися в менеджерах секретів, а не в змінних середовища або конфігураційних файлах, і регулярно змінюватися. Якщо токен викрадено, обмежена область дії означає обмежену шкоду.
Аудит залежностей має бути стандартною частиною будь-якого робочого процесу розробки. Інструменти на кшталт npm audit, а також сторонні платформи аналізу складу програмного забезпечення, можуть позначати пакети з незвичайною поведінкою або відомими вразливостями. Фіксація версій залежностей у файлах package-lock і перегляд змін перед прийняттям оновлень також зменшує вразливість до зловмисних публікацій нових версій.
Моніторинг вихідного мережевого трафіку може виявити спроби витоку, які пропускають інструменти аудиту. Якщо середовище розробки або CI/CD-конвеєр налаштовані на оповіщення про неочікувані вихідні з’єднання, пакет, який намагається передати викрадені токени, стає помітним.
Принцип найменших привілеїв застосовується на кожному рівні. Машини розробки не повинні працювати з обліковими даними, які надають доступ рівня виробництва. CI/CD-конвеєри повинні використовувати короткотривалі токени, згенеровані під час виконання, а не збережені довгострокові секрети.
І нарешті, перегляд власних встановлених пакетів на предмет усього, що стосується потоків автентифікації, — це варте заняття прямо зараз. Інцидент із codexui-android навряд чи є поодиноким. Перевірте, що міститься у ваших node_modules, які дозволи мають ваші токени API, та ставтеся до будь-якого пакета, який торкається збереження облікових даних, із підвищеною увагою.
Атаки на ланцюг постачання досягають успіху, тому що вони експлуатують довіру в масштабі. Відновлення цієї безпекової позиції — одна залежність за раз, починаючи з найчутливіших облікових даних у вашому стеку — є найпрактичнішою відповіддю, доступною окремим розробникам сьогодні.




