TL;DR
Anthropic случайно опубликовал source maps в npm-пакете @anthropic-ai/claude-code, что позволило реконструировать исходный TypeScript код их AI-агента. Разбираем технические детали инцидента и его последствия для фронтенд-разработки.
Введение: как source maps стали троянским конём
Инцидент с утечкой кода Claude — наглядный пример того, как благие намерения (отладка production-кода) могут обернуться серьезной уязвимостью. В современном JS-стеке source maps стали must-have инструментом, но их безопасность часто остаётся за кадром.
Технический разбор инцидента
Что именно произошло?
Версия 2.1.88 пакета @anthropic-ai/claude-code содержала файл cli.js.map. Этот артефакт сборки позволил реконструировать оригинальный TypeScript-код:
// Пример того, как выглядел экспортированный интерфейс агента
export class ClaudeAgent {
private _model: AIModel;
private _memory: VectorStorage;
constructor(config: AgentConfig) {
this._initModel(config.apiKey);
}
async chat(prompt: string): Promise<ChatResponse> {
// Реализация была восстановлена из source map
}
}
Критические ошибки в CI/CD
- Неотфильтрованные артефакты: В production-сборку попали debug-артефакты
- Отсутствие pre-release проверок: Не было автоматической проверки на наличие sensitive-данных
- Избыточная информация в source maps: Включены имена внутренних методов и структур данных
Практические выводы для senior-разработчиков
Hardening сборки
Добавьте в ваш webpack/vite конфиг:
// vite.config.js
export default defineConfig({
build: {
sourcemap: process.env.NODE_ENV === 'development' ? 'inline' : false,
minify: 'terser',
terserOptions: {
compress: {
drop_debugger: true,
drop_console: true
}
}
}
})
Security checklist для npm-публикации
- Используйте
.npmignoreдля исключения source maps:*.map *.ts src/ - Настройте pre-publish хук:
{ "scripts": { "prepublishOnly": "check-for-leaks && build-prod" } }
Кейсы из восстановленного кода
Анализ утечки показал несколько интересных архитектурных решений:
- Хранение контекста: Использование векторных БД для долгосрочной памяти агента
- Инжектирование зависимостей: Чёткое разделение model и memory слоёв
- Типизация событий: Полная TypeScript-типизация всех сообщений агента
Заключение: баланс между debuggability и security
Инцидент с Claude — повод пересмотреть наши практики работы с source maps. Для критических систем рекомендуем:
- Генерацию source maps только для staging-окружений
- Использование obfuscation даже для TypeScript-кода
- Регулярный аудит npm-артефактов
Как показал этот кейс, в современном фронтенде даже вспомогательные файлы сборки могут стать вектором атаки. Будьте бдительны и не повторяйте ошибок Anthropic.
Источник: https://www.reddit.com/r/webdev/comments/1s9bfrq/anthropic_leak_internal_claude_codebase_agent/