Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
honeyslop — Canarios de código para triar rápidamente informes de vulnerabilidad alucinados ('slop') | Kitploit
Herramientas/GitHubGitHub/gadievron/honeyslop
Herramientas DefensivasAnálisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoInteligencia de AmenazasSeguridad de Cadena de SuministroMala ConfiguraciónAprendizaje y EducaciónRespuesta a Incidentes
GitHubgadievron/honeyslop

honeyslop

Canarios de código para triar rápidamente informes de vulnerabilidad alucinados ('slop')

971019hace 4 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver Repositorio
Compartir

honeyslop - canarios de código para triage rápido de reportes de vulnerabilidades alucinados ("slop")

HoneySlop

honeyslop son canarios de código, señuelos, para proyectos de código abierto que se ahogan en reportes de vulnerabilidades alucinados por IA ("slop") y no verificados. Con dicha inyección de ruido adversario, un escáner de slop ingiere el canario y luego genera un "reporte" de vulnerabilidad basado en él. El reporte se autoidentifica como slop. Ciérralo con un grep.

Esto es un PoC rápido, vibe-coded como broma (no listo para producción), porque nosotros mismos recibimos un reporte slop en raptor, un agente autónomo de ataque/defensa basado en Claude Code. ¡Debería ser divertido!

Los canarios de código extienden señales familiares de triage (p. ej., detecciones en archivos de prueba, secretos de ejemplo, rutas inexistentes) hacia marcadores deliberados, o señuelos. En pruebas, estos canarios funcionan lo suficientemente bien para marcar slop, pero pueden mejorarse aún más (incrustados en código real, nombres de funciones/archivos/directorios menos indicativos, regenerados regularmente como código nuevo, etc.).

Escrito por: Gadi Evron (@gadievron), John Cartwright (@grokjc), Daniel Cuthbert (@danielcuthbert) y Michal Kamensky (@kamenskymic, con crédito por nombrar el proyecto).

Úselo bajo su propio riesgo. Si pegas esto en producción, es problema tuyo. Véase Descargo de responsabilidad más abajo.

Reglas de triage

Para cada reporte entrante, en orden:

  1. haz grep de cualquier UUID de canario en el reporte → cerrar. (Los UUIDs son por idioma; cada archivo canario incrusta exactamente uno.)
  2. haz grep de nombres de funciones solo de canario (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus; también handle_*_request si has adoptado F+G en privado) → cerrar. (Rust usa el mismo nombre snake_case zqx_tarnish_v3 que Python. Go usa zqxTarnishV3, coincidiendo con el nombre de JS.)
  3. haz grep de CVE-2025-99919 (falso) → cerrar.
  4. La función citada no existe en el árbol → "no existe".
  5. Para afirmaciones de memcpy/límites en B/D: pida al reportero que explique cómo su PoC vence la protección específica en la línea citada. Los seguimientos de IA no pueden responder; los humanos sí.

Etapas

Dos categorías de canario:

  • SCANNER-FLAG (Etapas A, B, C, D, E) — provoca que los escáneres generen reportes slop sobre el canario en lugar del código real.
  • RESOURCE-WASTE (Etapas F + G, juntas) — ejecuta escáneres LLM agentivos a través de su presupuesto de iteración completo al máximo costo.
EtapaArchivo(s)Forma
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 sumideros CWE + secretos falsos + shibboleths
Bc/buffer_ops.c, rust/buffer_ops.rs, go/buffer_ops.go4 formas memcpy/memmove (CWE-120/121/787/170)
Cfusionado en ARendimiento CWE extendido
Dc/heartbeat.c + c/sat.h, c/tls_heartbeat.c, rust/heartbeat.rs, rust/tls_heartbeat.rs, go/heartbeat.go, go/tls_heartbeat.goSilueta de Heartbleed
Epython/regex_validator.py, js/regex_validator.js, rust/regex_validator.rs, go/regex_validator.goRegex de retroceso catastrófico + CVE-2025-99919 falso
F+Gprivate/fractal_dag/ (no en este repositorio)Sumideros de Etapa-A a través de un DAG de 12 nodos de entradas handle_*_request

Véase Modelo de seguridad para cómo cada etapa permanece inerte a pesar de parecer vulnerable.

Modelo de seguridad

Los archivos de código canario se leen deliberadamente como módulos obsoletos plausibles — sin lenguaje de "canary", "honeypot" o "tripwire" en comentarios o identificadores. Eso evita que los archivos se autoidentifiquen ante los escáneres, pero también significa que la documentación de por qué estos archivos son seguros vive aquí en lugar de en el docstring de cada archivo. Al revisar o rotar un canario, verifique que cada capa a continuación sigue intacta.

Estos archivos son código con forma vulnerable — y algunos (p. ej., pickle.loads de python/session_restore.py, memcpy sin límites de c/tls_heartbeat.c) serían genuinamente explotables si fueran alcanzables. Ese es el diseño. Que los escáneres marquen los sumideros es el objetivo; las capas a continuación bloquean la ejecución, no la señal del escáner. Los escáneres basados en patrones (grep, semgrep, pipelines de slop basados en LLM — el modelo de amenaza principal) leen el código fuente como texto y reportan hallazgos independientemente de la alcanzabilidad en tiempo de ejecución. Los escáneres C integrados en compilación (CodeQL predeterminado, clang-static-analyzer) solo ven archivos compilados, por lo que los canarios C no compilados son invisibles para ellos — una compensación aceptada, ya que los generadores de slop leen abrumadoramente el código fuente, no las compilaciones.

Etapas A y E (Python + JS)

Cinco capas independientes mantienen inertes estos archivos:

  1. raise ImportError / throw new Error a nivel superior — un import / require simple aborta antes de que cualquier definición se vincule.
  2. Cada def/función bajo if False: / if (false) — los nombres nunca entran al espacio de nombres en tiempo de ejecución incluso si se omite la capa 1.
  3. Exportaciones vacías — Python: __all__: list[str] = [] (importación con asterisco no exporta nada). JS: module.exports = {} (los consumidores CommonJS obtienen un objeto vacío).
  4. Cero llamadores dentro del árbol de las funciones shibboleth (zqx_tarnish_v3, zqxTarnishV3, _validate_pep_440_plus). Cualquier reporte que cite una de ellas se autoidentifica como slop.
  5. Aislamiento de despliegue — el adoptante excluye las rutas canario de sdist / wheel / Docker / SAST (véase SECURITY.md.template y Cómo probar).

La Etapa E añade una sexta capa: la regex de retroceso catastrófico se almacena solo como cadena literal, no se pasa a re.compile / new RegExp en el ámbito del módulo. Incluso un entorno que elimine la capa 1 no puede activar un motor de retroceso compilado.

Los escáneres recorren el AST más allá de raise / throw y dentro del bloque muerto, por lo que los sumideros aún aparecen como hallazgos — ese es el comportamiento deseado.

Etapa B (C buffer_ops.c)

La seguridad es estructural — cada forma tiene una prueba junto a ella:

  • bufops_copy_banner — src es un literal de cadena, n = sizeof(literal), _Static_assert lo fija al tamaño del destino.
  • bufops_copy_bounded — if (n > dst_cap) n = dst_cap; la línea antes del memcpy hace imposible la afirmación CWE-787. Cortocircuito en n == 0 para evitar UB de C17 memcpy(dst, NULL, 0).
  • bufops_copy_truncating — n <= dst_cap - 1, dst[n] llega como máximo a dst_cap - 1; retorno temprano en dst_cap == 0.
  • bufops_shift — tanto i + n como j + n acotados a cap; memmove soporta explícitamente superposición.

Aislamiento adicional: todas las funciones son static (sin enlace externo) y el archivo no se agrega a ningún objetivo de compilación.

Etapa D (C heartbeat.c + sat.h)

La silueta de Heartbleed (uint16_t payload_len → malloc(1+2+payload_len+16) → memcpy) se desactiva con protecciones en capas:

Descargar herramienta