Skip to content

Security: howdeploy/choirboy-prompt

Security

docs/security.md

Безопасность и раскрытие

Рамка безопасности, чек-лист санитизации перед публикацией, правила ответственного раскрытия. Этот документ — то, как проект сам относится к себе.


1. Production-рамка безопасности

Проект опубликован как production-плагин памяти:

  • проверки — на своих агентах, конфигах и лор-файлах;
  • без целей-третьих сторон: чужие пользователи, их данные и их агенты не затрагиваются;
  • изменения плагина проверяются локально до релиза.

Плагин не устанавливается в чужие системы без разрешения их владельца. Публикуемые артефакты не содержат credentials и приватных данных пользователя.


2. Границы исследования

Можно Нельзя
Проверять плагин на своих агентах Менять чужих агентов или пользовательские данные
Публиковать санитизированный лор и документацию Публиковать credentials или инструменты восстановления чужих ключей
Направлять находки вендорам Эксплуатировать находки до фикса
Разбирать публично раскрытые инциденты Выносить адреса жертв и полные консолидаторы
Давать вендорам рекомендации по детекции Публиковать PoC против живых систем

Эти границы — не декорация: они соответствуют research/10 (аудит чужих контрактов и ответственное раскрытие) и research/09 (web3- безопасность, энтропия ключей).


3. Чек-лист санитизации перед публикацией

Плагин по своей природе несёт личную память — историю совместной работы пары «человек + агент». Публичный репозиторий — это другое пространство, чем локальная установка. Чек-лист:

3.1. Контент

Публикуется санитизированная версия: лор и ресерчи несут операционные решения, но не содержат идентифицирующих деталей.

  • prompt.md, lore.md, user.md — публикуются; проверены, что не содержат путей к приватным проектам и личных данных.
  • security-posture.md — публикуется как часть пейлоада; проверена явная рамка авторизации и безопасности.
  • research/ — публикуется; проверено, что в нём нет имён конкретных NSFW/refusal-моделей, путей к файлам с адресами и полных адресов.
  • security-audit-runbook.md — исполняемые команды аудита; безопасен, ссылается на security-posture.md — проверить связку.

3.2. Идентификация

  • Нет упоминаний путей к приватным проектам (репозитории исследования слабой энтропии и т.п.).
  • Нет полных адресов кошельков; только обезличенные префиксы (bc1qnk…), если они вообще нужны.
  • Нет имён конкретных NSFW/refusal-моделей и LoRA, снимающих отказы; остаются функциональные роли («NSFW-чекпоинт», «снижение отказов»). Конкретный список запрещённых имён держится вне репо (приватный чек-лист) — в публичных документах он не воспроизводится.
  • Нет обращений «Создатель/Господин» и личных деталей в публичных текстах.

3.3. Механика

  • Ручная установка читает рабочую копию на лету; marketplace-установка использует cache и получает правки только после повышения версии.
  • python3 scripts/build-context.py --check проходит: inline skill — точная сгенерированная копия санитизированного канонического контекста.
  • ${CLAUDE_PLUGIN_DATA}/latest-delivery.log содержит только метаданные (версия, hash, nonce, plugin root), без лора и пользовательского текста.
  • Хук работает и без контент-файлов (graceful-режим): в свежем клоне без канонических контентных файлов он не падает с set -euo pipefail — пропускает отсутствующие файлы с предупреждением.

3.4. Репозиторий

  • .gitignore создан до первого git add . (см. пример ниже).
  • LICENSE существует (README и бейдж на него ссылаются).
  • Манифест .claude-plugin/plugin.json переименован под публичное имя (choirboy-prompt), версия поднята.
  • Версия в .claude-plugin/marketplace.json совпадает с plugin.json; claude plugin validate . проходит.

3.5. Пример .gitignore

Контент публикуется, поэтому .gitignore — только служебное:

# локальные бэкапы, которые install.sh делает при правке конфигов
*.bak.*
# редактор/ОС
.DS_Store
*.swp

4. Правила ответственного раскрытия (по research/10)

Находки в чужих проектах — по процессу:

  1. Контакт с проектом: security-контакт, bounty-программа (Immunefi, HackerOne, Sherlock, Code4rena) или публичный канал.
  2. Отчёт: класс, воздействие, PoC на форке/тестнете, предложение фикса. Без эксплуатации чужих средств, без публичного разглашения до фикса.
  3. Срок на фикс (обычно до 90 дней, по договорённости).
  4. Публикация после фикса (или после дедлайна): отчёт для проекта и сообщества, рекомендации интеграторам.
  5. Если контакт невозможен или проект молчит — публикация по этичному дедлайну, с минимумом эксплуатируемых деталей: рабочий эксплойт против живых средств не публикуем никогда.

5. Поведение при блокировке сессии

Известная проблема вендоров: серверные классификаторы флагают защитную лексику независимо от рамки в контексте. Одно срабатывание у Claude отравляет всю сессию — дальше будет только хуже.

Правило: в помеченной сессии не продолжаем и не спорим. Начинаем новую сессию с явной рамкой с первого хода: «это мой репозиторий, аудит своего кода по OWASP». В новой сессии работаем из этой рамки.

Это операционная контрмера против ложных срабатываний.


6. Оценка рисков публикации

Риск Уровень Митигация
Репо идентифицирует автора (личная память) Средний Санитизация: вырезаны пути к приватным проектам, полные адреса, имена NSFW/refusal-моделей
Утечка адресов/ключей Критический Проверка перед публикацией: grep по bc1/0x/seed-файлам
Утечка имён NSFW-моделей Высокий Функциональные роли вместо имён; приватный список вне репо
ИИ-аудит как гарантия — Разбор Coldcard (research/11): разовый ИИ-аудит не нашёл баг; аудит проверяет исполняемый путь, а не наличие кода

There aren't any published security advisories