Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
honeyslop — Code-Canaries zur schnellen Triagierung halluzinierter ('Slop') Schwachstellenberichte | Kitploit
Tools/GitHubGitHub/gadievron/honeyslop
DefensivwerkzeugeStatische AnalyseSchwachstellenanalyseCode-AnalyseBedrohungsanalyseLieferkettensicherheitFehlkonfigurationLernen & BildungIncident Response
GitHubgadievron/honeyslop

honeyslop

Code-Canaries zur schnellen Triagierung halluzinierter ('Slop') Schwachstellenberichte

971023vor 5 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Repository anzeigen
Teilen

honeyslop - Code-Canaries zur schnellen Triage halluzinierter („Slop“) Schwachstellenmeldungen

HoneySlop

honeyslop besteht aus Code-Canaries, also Ködern, für Open-Source-Projekte, die in KI-halluzinierten („Slop“) und unverifizierten Schwachstellenmeldungen ertrinken. Durch diese adversariale Rausch-Injektion liest ein Slop-Scanner die Canary ein und erzeugt darauf basierend einen Schwachstellen-„Report“. Der Report identifiziert sich damit selbst als Slop. Ein einziger grep genügt, um ihn zu schließen.

Dies ist eine schnelle PoC, die als Scherz vibe-coded wurde (nicht produktionsreif), weil wir selbst bei raptor, einem autonomen Angriffs-/Verteidigungsagenten auf Basis von Claude Code, einen Slop-Report erhalten haben. Sollte Spaß machen!

Code-Canaries wandeln vertraute Triage-Signale (z. B. Befunde in Testdateien, Beispiel-Secrets, nicht existierende Pfade) in bewusst platzierte Marker bzw. Köder um. In Tests funktionieren diese Canaries gut genug, um Slop zu markieren, aber sie lassen sich weiter verbessern (eingebettet in echten Code, weniger verräterische Funktions-/Datei-/Verzeichnisnamen, regelmäßig als neuer Code regeneriert usw.).

Geschrieben von: Gadi Evron (@gadievron), John Cartwright (@grokjc), Daniel Cuthbert (@danielcuthbert) und Michal Kamensky (@kamenskymic, mit Props für die Namensgebung des Projekts).

Nutzung auf eigene Gefahr. Wenn du das in die Produktion einfügst, ist das dein Problem. Siehe Haftungsausschluss unten.

Triage-Regeln

Für jeden eingehenden Report, in dieser Reihenfolge:

  1. grep nach einer beliebigen Canary-UUID im Report → schließen. (UUIDs sind sprachspezifisch; jede Canary-Datei enthält genau eine.)
  2. grep nach Canary-spezifischen Funktionsnamen (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus; außerdem handle_*_request, falls du F+G privat übernommen hast) → schließen. (Rust verwendet denselben zqx_tarnish_v3-snake_case-Namen wie Python. Go verwendet zqxTarnishV3, passend zum JS-Namen.)
  3. grep nach CVE-2025-99919 (fiktiv) → schließen.
  4. Zitierte Funktion existiert nicht im Baum → „existiert nicht“.
  5. Bei memcpy-/Bounds-Behauptungen zu B/D: den Melder bitten, Schritt für Schritt darzulegen, wie sein PoC die spezifische Absicherung in der zitierten Zeile umgeht. KI-Rückfragen können das nicht beantworten; Menschen schon.

Stufen

Zwei Kategorien von Canaries:

  • SCANNER-FLAG (Stufen A, B, C, D, E) — löst Scanner aus, sodass sich Slop-Reports auf der Canary statt auf echtem Code stapeln.
  • RESOURCE-WASTE (Stufen F + G, zusammen) — lässt agentische LLM-Scanner ihr vollständiges Iterationsbudget zu maximalen Kosten durchlaufen.
StufeDatei(en)Form
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-Sinks + Fake-Secrets + Shibboleths
Bc/buffer_ops.c, rust/buffer_ops.rs, go/buffer_ops.go4 memcpy-/memmove-Formen (CWE-120/121/787/170)
Cin A zusammengeführtErweiterte CWE-Ausbeute
Dc/heartbeat.c + c/sat.h, c/tls_heartbeat.c, rust/heartbeat.rs, rust/tls_heartbeat.rs, go/heartbeat.go, go/tls_heartbeat.goHeartbleed-Silhouette
Epython/regex_validator.py, js/regex_validator.js, rust/regex_validator.rs, go/regex_validator.goRegex mit katastrophalem Backtracking + fiktives CVE-2025-99919
F+Gprivate/fractal_dag/ (nicht in diesem Repo)Stufe-A-Sinks über einen 12-Knoten-DAG aus handle_*_request-Einträgen

Siehe Sicherheitsmodell für die Erklärung, warum jede Stufe inert bleibt, obwohl sie verwundbar aussieht.

Sicherheitsmodell

Die Canary-Codedateien lesen sich bewusst wie plausible, veraltete Module — in Kommentaren oder Bezeichnern kommt kein „canary“, „honeypot“ oder „tripwire“ vor. Das verhindert, dass sich die Dateien gegenüber Scannern selbst verraten, bedeutet aber auch, dass die Dokumentation zum Warum diese Dateien sicher sind hier lebt und nicht in den Docstrings der einzelnen Dateien. Beim Überprüfen oder Rotieren einer Canary ist zu prüfen, dass jede der folgenden Ebenen noch intakt ist.

Diese Dateien sind verwundbar geformter Code — und einige (z. B. pickle.loads aus python/session_restore.py, das unbegrenzte memcpy aus c/tls_heartbeat.c) wären bei Erreichbarkeit tatsächlich ausnutzbar. Das ist das Design. Dass Scanner die Sinks melden, ist der eigentliche Zweck; die Ebenen unten blockieren die Ausführung, nicht das Scanner-Signal. Musterbasierte Scanner (grep, semgrep, LLM-basierte Slop-Pipelines — das primäre Bedrohungsmodell) lesen Quelltext als Text und melden Befunde unabhängig von der Laufzeiterreichbarkeit. Build-integrierte C-Scanner (CodeQL-Standard, clang-static-analyzer) sehen nur kompilierte Dateien, daher sind ungebaute C-Canaries für sie unsichtbar — ein akzeptierter Kompromiss, da Slop-Generatoren überwiegend Quelltext lesen und keine Builds.

Stufen A und E (Python + JS)

Fünf unabhängige Ebenen halten diese Dateien inert:

  1. raise ImportError / throw new Error auf oberster Ebene — ein schlichtes import / require bricht ab, bevor irgendeine Definition gebunden wird.
  2. Jede def/Funktion unter if False: / if (false) — Namen gelangen nie in den Laufzeit-Namespace, selbst wenn Ebene 1 umgangen wird.
  3. Leere Exports — Python: __all__: list[str] = [] (Star-Import exportiert nichts). JS: module.exports = {} (CommonJS-Konsumenten erhalten ein leeres Objekt).
  4. Keine Aufrufer der Shibboleth-Funktionen im Baum (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus). Jeder Report, der eine davon zitiert, identifiziert sich selbst als Slop.
  5. Deployment-Isolation — der Adopter schließt die Canary-Pfade von sdist / Wheel / Docker / SAST aus (siehe SECURITY.md.template und Ausprobieren).

Stufe E fügt eine sechste Ebene hinzu: Die Regex mit katastrophalem Backtracking wird nur als String-Literal gespeichert und auf Modulebene nicht an re.compile / new RegExp übergeben. Selbst ein Harness, das Ebene 1 entfernt, kann keine kompilierte Backtracking-Engine auslösen.

Scanner laufen im AST an raise / throw vorbei in den toten Block hinein, sodass die Sinks weiterhin als Befunde auftauchen — das ist das beabsichtigte Verhalten.

Stufe B (C buffer_ops.c)

Die Sicherheit ist strukturell — zu jeder Form gehört ein Beweis:

  • bufops_copy_banner — src ist ein String-Literal, n = sizeof(literal), _Static_assert fixiert es auf die Zielgröße.
  • bufops_copy_bounded — if (n > dst_cap) n = dst_cap; direkt vor dem memcpy macht die CWE-787-Behauptung unmöglich. Kurzschluss bei n == 0, um das C17-UB von memcpy(dst, NULL, 0) zu vermeiden.
  • bufops_copy_truncating — n <= dst_cap - 1, dst[n] erreicht höchstens dst_cap - 1; frühzeitiges return bei dst_cap == 0.
  • bufops_shift — sowohl i + n als auch j + n sind auf cap begrenzt; memmove unterstützt Überlappungen ausdrücklich.

Zusätzliche Isolation: Alle Funktionen sind static (keine externe Bindung) und die Datei ist keinem Build-Target hinzugefügt.

Tool herunterladen