Разбор утечки кода Anthropic: что мы узнали о внутренней кухне Claude

#security#ai#javascript#typescript#sourcemaps

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

  1. Неотфильтрованные артефакты: В production-сборку попали debug-артефакты
  2. Отсутствие pre-release проверок: Не было автоматической проверки на наличие sensitive-данных
  3. Избыточная информация в 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-публикации

  1. Используйте .npmignore для исключения source maps:
    *.map
    *.ts
    src/
    
  2. Настройте pre-publish хук:
    {
      "scripts": {
        "prepublishOnly": "check-for-leaks && build-prod"
      }
    }
    

Кейсы из восстановленного кода

Анализ утечки показал несколько интересных архитектурных решений:

  1. Хранение контекста: Использование векторных БД для долгосрочной памяти агента
  2. Инжектирование зависимостей: Чёткое разделение model и memory слоёв
  3. Типизация событий: Полная TypeScript-типизация всех сообщений агента

Заключение: баланс между debuggability и security

Инцидент с Claude — повод пересмотреть наши практики работы с source maps. Для критических систем рекомендуем:

Как показал этот кейс, в современном фронтенде даже вспомогательные файлы сборки могут стать вектором атаки. Будьте бдительны и не повторяйте ошибок Anthropic.


Источник: https://www.reddit.com/r/webdev/comments/1s9bfrq/anthropic_leak_internal_claude_codebase_agent/