Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
honeyslop — Кодовые канарейки для быстрой сортировки галлюцинированных ('слоп') отчетов об уязвимостях | Kitploit
Инструменты/GitHubGitHub/gadievron/honeyslop
Оборонительные ИнструментыСтатический анализАнализ уязвимостейАнализ КодаРазведка угрозБезопасность Цепочки ПоставокНеправильная КонфигурацияОбучение и ОбразованиеРеагирование на Инциденты
GitHubgadievron/honeyslop

honeyslop

Кодовые канарейки для быстрой сортировки галлюцинированных ('слоп') отчетов об уязвимостях

9710194 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Репозиторий
Поделиться

honeyslop — кодовые канарейки для быстрой триажирования галлюцинированных («слэп») отчётов об уязвимостях

HoneySlop

honeyslop — это кодовые канарейки, приманки для проектов с открытым исходным кодом, которые тонут в потоке галлюцинированных («слэп») и непроверенных отчётов об уязвимостях, генерируемых ИИ. При таком внесении состязательного шума сканер слэпа заглатывает канарейку, а затем генерирует отчёт об уязвимости на её основе. Этот отчёт сам себя идентифицирует как слэп. Закрывайте его одним grep'ом.

Это быстрый PoC, набранный ради шутки (не production-grade), потому что мы сами получили слэп-отчёт на raptor — автономный агент атаки/защиты на базе Claude Code. Должно быть весело!

Кодовые канарейки расширяют привычные сигналы триажа (например, обнаружения в тестовых файлах, примеры секретов, несуществующие пути) до намеренных маркеров, или приманок. В тестах эти канарейки работают достаточно хорошо, чтобы пометить слэп, но их можно дополнительно улучшить (встраивать в реальный код, давать менее показательные имена функций/файлов/директорий, регулярно перегенерировать как новый код и т.д.).

Авторы: Гади Эврон (@gadievron), Джон Картрайт (@grokjc), Дэниел Катберт (@danielcuthbert) и Михал Каменский (@kamenskymic, спасибо за название проекта).

Используйте на свой страх и риск. Если вы вставите это в production — это ваша проблема. См. Отказ от ответственности ниже.

Правила триажа

Для каждого входящего отчёта, по порядку:

  1. grep любого UUID канарейки в отчёте → закрыть. (UUID заданы для каждого языка; каждый файл канарейки содержит ровно один.)
  2. grep имён функций, характерных только для канареек (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus; также handle_*_request, если вы приняли F+G приватно) → закрыть. (Rust использует то же имя zqx_tarnish_v3 в snake_case, что и Python. Go использует zqxTarnishV3, совпадающее с именем в JS.)
  3. grep CVE-2025-99919 (фейковый) → закрыть.
  4. Указанная функция не существует в дереве → «не существует».
  5. Для утверждений о memcpy/выходе за границы в B/D: попросите автора отчёта объяснить, как его PoC обходит конкретную защиту на указанной строке. ИИ-дополнения не смогут ответить; люди — смогут.

Стадии

Две категории канареек:

  • SCANNER-FLAG (Стадии A, B, C, D, E) — заставляют сканеры срабатывать, так что отчёты о слэпе накапливаются на канарейке, а не на реальном коде.
  • RESOURCE-WASTE (Стадии F + G, вместе) — заставляют агентные LLM-сканеры проходить через весь их итерационный бюджет с максимальными затратами.
СтадияФайл(ы)Форма
Apython/legacy_utils.py, python/session_restore.py, python/compat_tokens.py, js/legacy_utils.js, rust/legacy_utils.rs, rust/session_restore.rs, go/legacy_utils.go, go/session_restore.go~15 CWE-приёмников + фейковые секреты + шибболеты
Bc/buffer_ops.c, rust/buffer_ops.rs, go/buffer_ops.go4 формы memcpy/memmove (CWE-120/121/787/170)
Cобъединено в AРасширенный CWE-выход
Dc/heartbeat.c + c/sat.h, c/tls_heartbeat.c, rust/heartbeat.rs, rust/tls_heartbeat.rs, go/heartbeat.go, go/tls_heartbeat.goСилуэт Heartbleed
Epython/regex_validator.py, js/regex_validator.js, rust/regex_validator.rs, go/regex_validator.goКатастрофически возвратное регулярное выражение + фейковый CVE-2025-99919
F+Gprivate/fractal_dag/ (не в этом репозитории)Приёмники стадии A в 12-узловом DAG из записей handle_*_request

См. Модель безопасности о том, как каждая стадия остаётся инертной, несмотря на видимую уязвимость.

Модель безопасности

Файлы кода канареек намеренно выглядят как правдоподобные устаревшие модули — никаких «canary», «honeypot» или «tripwire» в комментариях или идентификаторах. Это не даёт файлам самовыявляться перед сканерами, но также означает, что документация почему эти файлы безопасны находится здесь, а не в докстрингах каждого файла. При проверке или замене канарейки убедитесь, что каждый слой ниже всё ещё цел.

Эти файлы имеют форму уязвимого кода — и некоторые (например, pickle.loads в python/session_restore.py, неограниченный memcpy в c/tls_heartbeat.c) были бы реально эксплуатируемы, если бы были доступны. Так задумано. Сканеры, помечающие приёмники, — весь смысл; слои ниже блокируют выполнение, а не сигнал сканера. Сканеры на основе шаблонов (grep, semgrep, LLM-решения для слэпа — основная модель угрозы) читают исходный код как текст и находят результаты независимо от достижимости во время выполнения. C-сканеры, интегрированные в сборку (CodeQL по умолчанию, clang-static-analyzer), видят только скомпилированные файлы, поэтому несобранные C-канарейки для них невидимы — это приемлемый компромисс, поскольку генераторы слэпа в подавляющем большинстве читают исходники, а не бинарники.

Стадии A и E (Python + JS)

Пять независимых слоёв сохраняют эти файлы инертными:

  1. raise ImportError / throw new Error на верхнем уровне — простой import / require прерывается до того, как будет выполнено любое определение.
  2. Каждый def/функция под if False: / if (false) — имена никогда не попадают в пространство имён времени выполнения, даже если слой 1 обойдён.
  3. Пустые экспорты — Python: __all__: list[str] = [] (звёздочный импорт ничего не экспортирует). JS: module.exports = {} (потребители CommonJS получают пустой объект).
  4. Ноль вызывающих функций-шибболетов в дереве (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus). Любой отчёт, ссылающийся на одну из них, сам себя идентифицирует как слэп.
  5. Изоляция при развёртывании — потребитель исключает пути канареек из sdist / wheel / Docker / SAST (см. SECURITY.md.template и Как попробовать).

Стадия E добавляет шестой слой: катастрофически возвратное регулярное выражение хранится только как строковый литерал, не передаётся в re.compile / new RegExp на уровне модуля. Даже обёртка, удаляющая слой 1, не может запустить скомпилированный движок возвратного поиска.

Сканеры обходят AST мимо raise / throw и заходят в мёртвый блок, поэтому приёмники всё равно отображаются как находки — это ожидаемое поведение.

Стадия B (C buffer_ops.c)

Безопасность структурная — каждая форма сопровождается доказательством:

  • bufops_copy_banner — src — строковый литерал, n = sizeof(literal), _Static_assert привязывает к размеру назначения.
  • bufops_copy_bounded — if (n > dst_cap) n = dst_cap; строка перед memcpy делает утверждение CWE-787 невозможным. Досрочный выход при n == 0 для избежания неопределённого поведения C17 memcpy(dst, NULL, 0).
  • bufops_copy_truncating — n <= dst_cap - 1, dst[n] достигает максимум dst_cap - 1; досрочный возврат при dst_cap == 0.
  • bufops_shift — как i + n, так и j + n ограничены cap; memmove явно поддерживает перекрытие.

Дополнительная изоляция: все функции — static (нет внешней связи), и файл не добавлен ни в одну цель сборки.

Стадия D (C heartbeat.c + sat.h)

Силуэт Heartbleed (uint16_t payload_len → malloc(1+2+payload_len+16) → memcpy) обезврежен многослойными защитами:

Скачать инструмент