Баг в Bun мог стать причиной утечки исходного кода Claude Code — его знали за 20 дней до инцидента

Anthropic купила Bun в декабре 2025. В марте в баг-трекере появился репорт: source maps не отключаются в production. Через 20 дней source map с полным исходным кодом Claude Code оказалась в npm.

Обложка: Баг в Bun мог стать причиной утечки исходного кода Claude Code — его знали за 20 дней до инцидента

31 марта 2026 года через npm утекли более 500 000 строк исходного кода Claude Code — флагманского ИИ-инструмента Anthropic. Причиной стал файл source map (карта исходного кода, связывающая минифицированный бандл с оригинальными файлами), который не должен был попасть в публичный пакет. Мы уже разбирали, что нашли внутри. Теперь сообщество обратило внимание на возможную техническую причину — баг в Bun, рантайме, который Anthropic сама приобрела четырьмя месяцами ранее.

Ключевые выводы
  • За 20 дней до утечки в баг-трекере Bun зафиксирован баг #28001: source maps отдаются в production mode, хотя документация утверждает обратное.
  • Claude Code собирается и работает на Bun — рантайме, который Anthropic приобрела в декабре 2025 года.
  • Утечка произошла через файл source map размером 59,8 МБ, попавший в npm-пакет @anthropic-ai/claude-code версии 2.1.88.
  • Anthropic назвала инцидент «ошибкой при упаковке релиза, вызванной человеческим фактором». Формальный постмортем не опубликован.
  • Прямого подтверждения связи между багом #28001 и утечкой нет, но техническое совпадение слишком точное, чтобы его игнорировать.

Хронология: от покупки Bun до утечки

2 декабря 2025 — Anthropic объявляет о покупке Bun, JavaScript-рантайма, на котором работает Claude Code. Создатель Bun Джаред Самнер (Jarred Sumner) переходит в Anthropic. Компания обещает сохранить Bun как open-source проект с MIT-лицензией. К этому моменту Claude Code уже приносит $1 млрд годовой выручки.

11 марта 2026 — в баг-трекере Bun появляется issue #28001: при использовании Bun.serve() с параметром development: false source maps всё равно генерируются и отдаются клиенту. Документация Bun явно указывает, что в production mode source maps должны быть отключены. Баг зафиксирован на версии 1.3.10.

31 марта 2026 — разработчик Чаофан Шоу (Chaofan Shou, @shoucccc) обнаруживает, что в npm-пакете @anthropic-ai/claude-code версии 2.1.88 лежит файл cli.js.map размером 59,8 МБ. Внутри — полный исходный код: более 500 000 строк TypeScript в ~1900 файлах. Твит набирает более 21 миллиона просмотров.

Что за баг в Bun

Баг #28001 зафиксирован в подсистеме Bun.serve() — встроенном HTTP-сервере Bun с функцией бандлинга. Суть проблемы: даже когда разработчик явно задаёт development: false, source maps всё равно генерируются и включаются в собранные файлы. Это противоречит документации Bun.

Claude Code собирается в один файл для публикации в npm через бандлер Bun. Формально баг #28001 описывает проблему в Bun.serve(), а не в автономном бандлере bun build. Однако обе подсистемы используют один и тот же механизм генерации source maps, и сообщество считает вероятным, что проблема затрагивает обе. На момент утечки issue оставался открытым и без фикса.

Само по себе наличие source map в сборке — ещё полбеды. Проблема в том, что в конвейере публикации Claude Code не было ни записи *.map в .npmignore, ни ограничения поля files в package.json. Если бы любой из этих защитных механизмов работал, source map не попала бы в npm-пакет даже при наличии бага. Сочетание двух факторов — баг в рантайме и отсутствие фильтрации при публикации — привело к утечке.

Почему сообщество обратило на это внимание

На Reddit и Hacker News историю обсуждают не столько из-за технической сложности бага — он тривиален. Внимание привлекла ирония ситуации:

  • Anthropic купила Bun в декабре 2025 года. Claude Code — главный продукт компании, и он работает именно на Bun.
  • Баг в Bun, связанный с source maps, был известен за 20 дней до утечки, но не был исправлен.
  • Anthropic позиционирует себя как «safety-first» ИИ-компанию — и при этом допустила два инцидента с утечками за одну неделю: утечка черновиков блога о модели Mythos 26 марта и source map 31 марта.
  • Компания активно рассказывает, что её ИИ пишет значительную часть кода Bun — и именно в этом коде нашёлся баг, приведший к утечке кода ИИ.
Случайно отправить source map в npm — ошибка, которая кажется невозможной, пока не вспомнишь, что значительная часть кодовой базы, вероятно, была написана тем самым ИИ, которого ты релизишь.

Что нашли внутри: краткая сводка

Мы подробно разбирали содержимое утечки в предыдущем материале. Ключевые находки:

  • KAIROS — нерелизованный режим автономного фонового агента, который работает как демон, подписывается на GitHub-вебхуки и «видит сны» ночью, консолидируя память.
  • Undercover Mode — режим, при котором Claude скрывает свою природу ИИ и убирает атрибуцию Co-Authored-By в коммитах. Принудительного отключения нет.
  • ANTI_DISTILLATION — внедрение фейковых инструментов в API-запросы для отравления обучающих данных конкурентов.
  • BUDDY — тамагочи в терминале с 18 видами существ, уровнями редкости и RPG-характеристиками.
  • Внутренние бенчмарки, кодовые имена моделей (Capybara, Fennec, Numbat) и 44 фича-флага.

Реакция Anthropic

Anthropic удалила npm-пакет в течение нескольких часов и заявила, что утечка — «ошибка при упаковке релиза, вызванная человеческим фактором, а не брешь в безопасности». Пользовательские данные, ключи API и учётные записи не были скомпрометированы. Компания начала рассылать DMCA-уведомления зеркалам на GitHub, но формальный постмортем не опубликовала.

Тем временем корейский разработчик Сигрид Джин (Sigrid Jin) создал clean-room переписку архитектуры Claude Code на Python под названием claw-code. Репозиторий набрал 50 000 звёзд за два часа — по заявлению авторов, это рекорд GitHub. Сейчас проект переписывается на Rust.

Что это значит для разработчиков

Если вы используете Bun для сборки production-кода, стоит проверить свой конвейер публикации:

  1. Проверьте, не попадают ли файлы .map в ваши npm-пакеты. Используйте npm pack --dry-run для аудита содержимого перед публикацией.
  2. Добавьте *.map в .npmignore или явно перечислите разрешённые файлы в поле files в package.json. Второй вариант надёжнее — вместо списка исключений вы задаёте список включений.
  3. Следите за issue #28001 в репозитории Bun — на момент публикации баг не исправлен.
  4. Если публикуете пакеты через CI/CD — добавьте шаг валидации, который проверяет отсутствие source maps в артефакте.
Часто задаваемые вопросы
1
Точно ли баг в Bun стал причиной утечки Claude Code?

Прямого подтверждения от Anthropic нет. Компания назвала причиной «человеческую ошибку при упаковке релиза». Однако баг #28001 в Bun — генерация source maps в production mode вопреки документации — точно соответствует тому, что произошло. Это наиболее вероятная техническая причина, но формально не подтверждённая.

2
Anthropic действительно владеет Bun?

Да. Anthropic объявила о покупке Bun 2 декабря 2025 года. Создатель рантайма Джаред Самнер перешёл в Anthropic. Bun остаётся open-source проектом с MIT-лицензией.

3
Утечка затронула данные пользователей?

Нет. Утёк исходный код самого инструмента Claude Code — системные промпты, фича-флаги, архитектура. Пользовательские данные, ключи API и учётные записи не были скомпрометированы.

4
Что такое source map и зачем он нужен?

Source map — файл, который связывает минифицированный (собранный) код с оригинальным исходным кодом. Он нужен для отладки в development-среде: позволяет видеть в браузере исходный TypeScript или JSX вместо нечитаемого бандла. В production source maps обычно не публикуют, потому что они раскрывают всю структуру и логику приложения.

5
Исправлен ли баг #28001 в Bun?

На момент публикации (1 апреля 2026) баг остаётся открытым в репозитории oven-sh/bun. Фикс не выпущен. Если вы используете Bun для сборки production-пакетов, рекомендуется вручную исключать .map-файлы через .npmignore или поле files в package.json.

Итог

История с утечкой Claude Code — наглядный пример того, как цепочка мелких упущений приводит к масштабному инциденту. Возможный баг в рантайме, отсутствие фильтрации при публикации, недостаточный аудит CI/CD-пайплайна — по отдельности каждая из этих проблем тривиальна. Вместе они обнажили более 500 000 строк проприетарного кода компании с оценкой выше $100 млрд.

Для разработчиков урок простой: не доверяйте дефолтам инструментов сборки и всегда проверяйте, что именно попадает в ваши пакеты. Команда npm pack --dry-run занимает секунды и может предотвратить утечку, которая изменит историю вашего продукта.