Communitygithub.com

bg-szy/TOP-SKILLS

Configure et exécute Ruzzy, le fuzzer Ruby guidé par couverture de Trail of Bits, le seul prêt pour la production pour ce langage. Couvre la structure des harnais, le fuzzing du Ruby pur et des extensions C natives dans les gems, ainsi que les builds avec sanitizers. À utiliser lors du fuzzing d'une bibliothèque ou d'une gem Ruby, du test de la sécurité mémoire d'une extension C Ruby, ou pour demander comment fuzzer du Ruby en général.

Qu'est-ce que TOP-SKILLS ?

Ruzzy est un fuzzer guidé par couverture pour Ruby, basé sur libFuzzer, actuellement le seul outil de ce type prêt pour la production. Il permet de fuzzer à la fois du code Ruby pur et des extensions C Ruby, avec le support des sanitizers (AddressSanitizer, UndefinedBehaviorSanitizer) pour détecter les corruptions mémoire, les dépassements de tampon, les use-after-free, et les comportements indéfinis. La compétence détaille l'installation via gem avec les bons drapeaux de compilation clang, la rédaction de harnais de test (avec un script traceur pour le Ruby pur), la configuration des campagnes de fuzzing, et l'interprétation des résultats. Elle couvre également le dépannage des problèmes courants comme les fuites mémoire de l'interpréteur Ruby, les conflits sigaltstack, et la nécessité de LD_PRELOAD pour l'injection du sanitizer. Utile pour les développeurs et ingénieurs sécurité travaillant sur des gems Ruby avec des extensions natives ou des applications Ruby critiques.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bg-szy/TOP-SKILLS/tree/HEAD/skills/skills/ruzzy

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Ruzzy

Ruzzy est un fuzzer guidé par couverture pour Ruby construit sur libFuzzer. Il permet de fuzzer à la fois du code Ruby pur et des extensions C Ruby avec le support des sanitizers pour détecter les corruptions mémoire et les comportements indéfinis.

Quand l'utiliser

Ruzzy est actuellement le seul fuzzer guidé par couverture prêt pour la production pour Ruby.

Choisissez Ruzzy quand :

  • Vous fuzzez des applications ou bibliothèques Ruby
  • Vous testez des extensions C Ruby pour des problèmes de sécurité mémoire
  • Vous avez besoin de fuzzing guidé par couverture pour du code Ruby
  • Vous travaillez avec des gems Ruby qui ont des extensions natives

Démarrage rapide

Configurez l'environnement :

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"

Testez avec l'exemple jouet inclus :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby -e 'require "ruzzy"; Ruzzy.dummy'

Cela devrait trouver rapidement un crash démontrant que Ruzzy fonctionne correctement.

Installation

Support de plateforme

Ruzzy prend en charge Linux x86-64 et AArch64/ARM64. Pour macOS ou Windows, utilisez le Dockerfile ou l'environnement de développement.

Prérequis

  • Linux x86-64 ou AArch64/ARM64
  • Version récente de clang (testé à partir de 14.0.0, dernière version recommandée)
  • Ruby avec gem installé

Commande d'installation

Installez Ruzzy avec les drapeaux de compilation clang :

MAKE="make --environment-overrides V=1" \
CC="/chemin/vers/clang" \
CXX="/chemin/vers/clang++" \
LDSHARED="/chemin/vers/clang -shared" \
LDSHAREDXX="/chemin/vers/clang++ -shared" \
    gem install ruzzy

Explication des variables d'environnement :

  • MAKE : Remplace make pour respecter les variables d'environnement suivantes
  • CC, CXX, LDSHARED, LDSHAREDXX : Assure l'utilisation des bons binaires clang pour les fonctionnalités les plus récentes

Dépannage de l'installation

Si l'installation échoue, activez le débogage :

RUZZY_DEBUG=1 gem install --verbose ruzzy

Vérification

Vérifiez l'installation en exécutant l'exemple jouet (voir la section Démarrage rapide).

Écrire un harnais

Fuzzing de code Ruby pur

Le fuzzing de Ruby pur nécessite deux scripts en raison des détails d'implémentation de l'interpréteur Ruby.

Script traceur (test_tracer.rb) :

# frozen_string_literal: true

require 'ruzzy'

Ruzzy.trace('test_harness.rb')

Script harnais (test_harness.rb) :

# frozen_string_literal: true

require 'ruzzy'

def fuzzing_target(input)
  # Votre code à fuzzer ici
  if input.length == 4
    if input[0] == 'F'
      if input[1] == 'U'
        if input[2] == 'Z'
          if input[3] == 'Z'
            raise
          end
        end
      end
    end
  end
end

test_one_input = lambda do |data|
  fuzzing_target(data)
  return 0
end

Ruzzy.fuzz(test_one_input)

Exécutez avec :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby test_tracer.rb

Fuzzing d'extensions C Ruby

Les extensions C peuvent être fuzzées avec un seul fichier harnais, sans traceur.

Exemple de harnais pour msgpack (fuzz_msgpack.rb) :

# frozen_string_literal: true

require 'msgpack'
require 'ruzzy'

test_one_input = lambda do |data|
  begin
    MessagePack.unpack(data)
  rescue Exception
    # Nous cherchons des corruptions mémoire, pas des exceptions Ruby
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

Exécutez avec :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby fuzz_msgpack.rb

Règles pour les harnais

À faireÀ ne pas faire
Attraper les exceptions Ruby si vous testez des extensions CLaisser les exceptions Ruby planter le fuzzer
Retourner 0 depuis la lambda test_one_inputRetourner d'autres valeurs
Garder le harnais déterministeUtiliser de l'aléatoire ou une logique basée sur le temps
Utiliser un script traceur pour le Ruby purSauter le traceur pour du code Ruby pur

Voir aussi : Pour des techniques détaillées d'écriture de harnais, des motifs pour gérer des entrées complexes, et des stratégies avancées, consultez la compétence technique fuzz-harness-writing.

Compilation

Installer des gems avec les sanitizers

Lors de l'installation de gems Ruby avec des extensions C pour le fuzzing, compilez avec les drapeaux de sanitizer :

MAKE="make --environment-overrides V=1" \
CC="/chemin/vers/clang" \
CXX="/chemin/vers/clang++" \
LDSHARED="/chemin/vers/clang -shared" \
LDSHAREDXX="/chemin/vers/clang++ -shared" \
CFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
CXXFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
    gem install <nom-de-la-gem>

Drapeaux de compilation

DrapeauObjectif
-fsanitize=address,fuzzer-no-linkActiver AddressSanitizer et l'instrumentation fuzzer
-fno-omit-frame-pointerAméliorer la qualité des traces de pile
-fno-commonMeilleure compatibilité avec les sanitizers
-fPICCode indépendant de la position pour les bibliothèques partagées
-gInclure les symboles de débogage

Exécuter des campagnes

Configuration de l'environnement

Avant d'exécuter une campagne de fuzzing, définissez ASAN_OPTIONS :

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"

Explication des options :

  1. allocator_may_return_null=1 : Ignorer les échecs d'allocation courants à faible impact (DoS)
  2. detect_leaks=0 : L'interpréteur Ruby fuit des données, ignorer ces fuites pour l'instant
  3. use_sigaltstack=0 : Ruby recommande de désactiver sigaltstack avec ASan

Exécution de base

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb

Remarque : LD_PRELOAD est requis pour l'injection du sanitizer. Contrairement à ASAN_OPTIONS, ne l'exportez pas car cela pourrait interférer avec d'autres programmes.

Avec un corpus

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb /chemin/vers/corpus

Passer des options à libFuzzer

Toutes les options de libFuzzer peuvent être passées comme arguments :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb /chemin/vers/corpus -max_len=1024 -timeout=10

Consultez les options de libFuzzer pour une référence complète.

Reproduire des crashes

Ré-exécutez un cas de crash en passant le fichier de crash :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb ./crash-253420c1158bc6382093d409ce2e9cff5806e980

Interpréter la sortie

SortieSignification
INFO: Running with entropic power scheduleCampagne de fuzzing démarrée
ERROR: AddressSanitizer: heap-use-after-freeCorruption mémoire détectée
SUMMARY: libFuzzer: fuzz target exitedException Ruby survenue
artifact_prefix='./'; Test unit written to ./crash-*Entrée de crash sauvegardée
Base64: ...Encodage Base64 de l'entrée de crash

Intégration des sanitizers

AddressSanitizer (ASan)

Ruzzy inclut une bibliothèque AddressSanitizer pré-compilée :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby harness.rb

Utilisez ASan pour détecter :

  • Les dépassements de tampon sur le tas
  • Les dépassements de tampon sur la pile
  • Les use-after-free
  • Les double-free
  • Les fuites mémoire (désactivées par défaut dans Ruzzy)

UndefinedBehaviorSanitizer (UBSan)

Ruzzy inclut également UBSan :

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::UBSAN_PATH') \
    ruby harness.rb

Utilisez UBSan pour détecter :

  • Les débordements d'entiers signés
  • Les déréférencements de pointeur nul
  • Les accès mémoire mal alignés
  • Les divisions par zéro

Problèmes courants avec les sanitizers

ProblèmeSolution
Avertissements de fuite de l'interpréteur RubyUtiliser ASAN_OPTIONS=detect_leaks=0
Conflits SigaltstackUtiliser ASAN_OPTIONS=use_sigaltstack=0
Spam d'échecs d'allocationUtiliser ASAN_OPTIONS=allocator_may_return_null=1
LD_PRELOAD interfère avec les outilsNe pas l'exporter ; le définir en ligne avec la commande ruby

Voir aussi : Pour une configuration détaillée des sanitizers, des problèmes courants et des drapeaux avancés, consultez les compétences techniques address-sanitizer et undefined-behavior-sanitizer.

Exemples concrets

Exemple : msgpack-ruby

Fuzzing de l'analyseur MessagePack msgpack pour les corruptions mémoire.

Installation avec sanitizers :

MAKE="make --environment-overrides V=1" \
CC="/chemin/vers/clang" \
CXX="/chemin/vers/clang++" \
LDSHARED="/chemin/vers/clang -shared" \
LDSHAREDXX="/chemin/vers/clang++ -shared" \
CFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
CXXFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
    gem install msgpack

Harnais (fuzz_msgpack.rb) :

# frozen_string_literal: true

require 'msgpack'
require 'ruzzy'

test_one_input = lambda do |data|
  begin
    MessagePack.unpack(data)
  rescue Exception
    # Nous cherchons des corruptions mémoire, pas des exceptions Ruby
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

Exécution :

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"
LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby fuzz_msgpack.rb

Exemple : Cible Ruby pur

Fuzzing de code Ruby pur avec un analyseur personnalisé.

Traceur (test_tracer.rb) :

# frozen_string_literal: true

require 'ruzzy'

Ruzzy.trace('test_harness.rb')

Harnais (test_harness.rb) :

# frozen_string_literal: true

require 'ruzzy'
require_relative 'my_parser'

test_one_input = lambda do |data|
  begin
    MyParser.parse(data)
  rescue StandardError
    # Exceptions attendues d'une entrée mal formée
  end
  return 0
end

Ruzzy.fuzz(test_one_input)

Exécution :

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"
LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby test_tracer.rb

Dépannage

ProblèmeCauseSolution
L'installation échoueMauvaise version ou chemin de clangVérifier le chemin de clang, utiliser clang 14.0.0+
cannot open shared object fileLD_PRELOAD non définiDéfinir LD_PRELOAD en ligne avec la commande ruby
Le fuzzer se termine immédiatementDossier corpus manquantCréer le dossier corpus ou le passer comme argument
Pas de progression de couvertureLe Ruby pur nécessite un traceurUtiliser un script traceur pour le code Ruby pur
Spam de détection de fuiteFuites de l'interpréteur RubyDéfinir ASAN_OPTIONS=detect_leaks=0
Débogage d'installation nécessaireErreurs de compilationUtiliser RUZZY_DEBUG=1 gem install --verbose ruzzy

Compétences associées

Compétences techniques

CompétenceCas d'utilisation
fuzz-harness-writingGuide détaillé pour écrire des harnais efficaces
address-sanitizerDétection d'erreurs mémoire pendant le fuzzing
undefined-behavior-sanitizerDétection de comportements indéfinis dans les extensions C
libfuzzerComprendre les options de libFuzzer (Ruzzy est basé sur libFuzzer)

Fuzzers associés

CompétenceQuand l'envisager
libfuzzerLors du fuzzing direct de code d'extension C Ruby en C/C++
aflppApproche alternative pour fuzzer Ruby en instrumentant l'interpréteur Ruby

Ressources

Ressources externes clés

Présentation de Ruzzy, un fuzzer Ruby guidé par couverture Article officiel du blog de Trail of Bits annonçant Ruzzy, couvrant la motivation, l'architecture et les premiers résultats.

Dépôt GitHub de Ruzzy Code source, exemples supplémentaires et instructions de développement.

Documentation de libFuzzer Puisque Ruzzy est basé sur libFuzzer, comprendre les options et le comportement de libFuzzer est précieux.

Fuzzing des extensions C Ruby Guide détaillé sur le fuzzing des extensions C avec des drapeaux de compilation et des exemples.

Fuzzing de code Ruby pur Guide détaillé sur le motif de traceur requis pour le fuzzing de Ruby pur.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

bg-szy/TOP-SKILLS

Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens — use frontend-design instead.

bg-szy/TOP-SKILLS

Fill out Microsoft Azure Landing Zone (ALZ) Accelerator checklists by interviewing the user, mapping their Azure subscriptions, integrating IP addressing documentation, and applying Microsoft Cloud Adoption Framework best practices. Produces a completed Excel checklist (.xlsx) ready for ALZ deployment. Use this skill whenever the user mentions Azure Landing Zone, ALZ checklist, landing zone accelerator, platform landing zone configuration, ALZ bootstrap, hub-and-spoke setup, Azure network topology planning, or wants to fill out any ALZ-related checklist or configuration file. Also trigger when the user uploads an Excel file that contains tabs like "Accelerator - Bootstrap", "Accelerator - Bicep", or "Accelerator - Terraform".

bg-szy/TOP-SKILLS

Compose a premium, animated landing page section by section in Next.js + Tailwind + Motion (Framer Motion) — built on a real design system, with editorial copy and motion that feels human-crafted, not template-generated. Use when building or rebuilding a landing page, marketing site, or hero/feature/pricing/CTA sections that need to look production-ready and bespoke from day one.

bg-szy/TOP-SKILLS

Write high-converting landing page copy using proven frameworks like PAS (Problem-Agitate-Solution), AIDA, and StoryBrand. Creates headlines, value propositions, CTAs, and full page sections optimized for conversion. Use when users need landing page copy, sales page content, or marketing website text.

bg-szy/TOP-SKILLS

Optimize landing pages for conversions, performance, and SEO. Use when improving landing pages, increasing conversions, or optimizing page performance.

bg-szy/TOP-SKILLS

Review investment portfolios for risk, diversification, fees. Asset allocation recommendations, tax-loss harvesting, rebalancing.

bg-szy/TOP-SKILLS

Beads Viewer - Graph-aware triage engine for Beads projects. Computes PageRank, betweenness, critical path, and cycles. Use --robot-* flags for AI agents.

bg-szy/TOP-SKILLS

CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.

bg-szy/TOP-SKILLS

CASS Memory System - procedural memory for AI coding agents. Three-layer cognitive architecture with confidence decay, anti-pattern learning, cross-agent knowledge transfer, trauma guard safety system. Bun/TypeScript CLI.

bg-szy/TOP-SKILLS

Mandatory entry point: read this first for any request to make, create, edit, animate, or render a video, animation, or motion graphic, including a promo, explainer, captioned clip, title card, overlay, slideshow or interactive deck, Remotion port, or any HyperFrames HTML composition. Also use it to inspect, diagnose, validate, preview, publish, or batch-render an existing HyperFrames project. Inputs may be a website URL, GitHub PR, Figma design or URL, text or brief, existing footage, or music. It resumes project state, captures intent when applicable, selects and installs the owning workflow, and routes domain capabilities. HyperFrames is the default output framework unless the user explicitly chooses another framework for the deliverable or asks only to record a browser session.

bg-szy/TOP-SKILLS

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities.

bg-szy/TOP-SKILLS

Use when the user asks to "pre-launch check the landing page", "run a Quality-Score preflight", or "verify ad-to-page message match before launch"; produces an ad↔page continuity report — message-match gaps, above-the-fold check, page-speed read, form-friction count, mobile-render flags — as a pass/fix punch list. Not for redesigning or rewriting the page — use landing-optimizer; not for scoring the account or the RQS — use ad-account-auditor. 落地页体验预检/广告落地页一致性检查

bg-szy/TOP-SKILLS

Use when the user asks to "optimize our landing page for influencer traffic", "fix our promo-code landing page", or "improve conversion from a creator campaign"; produces a message-match audit, page-structure and social-proof recommendations, a promo-code/CTA conversion plan, and an A/B test roadmap. Not for measuring campaign results after launch — use performance-analyzer.

bg-szy/TOP-SKILLS

Audit a landing page, sales page or checkout page for conversion leaks and return a fix list ordered by expected revenue impact. Use when asked to review, critique or improve a landing page, sales page, opt-in page, product page or checkout flow, when conversion rate is low, when paid traffic is not converting, or when someone asks "why isn't this page converting" or wants a CRO / landing page review.

bg-szy/TOP-SKILLS

Landing page conversion optimization with layout rules, hero section design, and CTA psychology. Covers above-the-fold formula, social proof placement, mobile design, and F-pattern reading. Use for: startup landing pages, product pages, SaaS marketing, conversion optimization. Triggers: landing page, hero section, above the fold, conversion optimization, landing page design, cta button, hero image, landing page layout, saas landing page, product page design, conversion rate, landing page best practices

bg-szy/TOP-SKILLS

Create high-converting, visually distinctive landing pages. Use when building marketing pages, product launches, SaaS homepages, or any single-page conversion-focused website. Guides section-by-section composition with anti-AI-slop principles.

bg-szy/TOP-SKILLS

Landing page conversion optimization with layout rules, hero section design, and CTA psychology. Covers above-the-fold formula, social proof placement, mobile design, and F-pattern reading. Use for: startup landing pages, product pages, SaaS marketing, conversion optimization. Triggers: landing page, hero section, above the fold, conversion optimization, landing page design, cta button, hero image, landing page layout, saas landing page, product page design, conversion rate, landing page best practices

bg-szy/TOP-SKILLS

Account assets, equity and fund positions, P&L, cash flow records, account statements, margin ratios, buy-power estimates, order management, and DCA recurring investments via Longbridge (most require Trade permission). Frameworks: portfolio diagnosis, rebalancing, asset allocation, risk analysis (VaR/CVaR), performance attribution, and tax-loss harvesting. Triggers: "持仓", "账户", "盈亏", "资产", "对账单", "下单", "买入", "卖出", "撤单", "定投", "组合诊断", "再平衡", "资产配置", "风险分析", "绩效归因", "税损收割", "持倉", "賬戶", "盈虧", "對賬單", "下單", "買入", "賣出", "組合診斷", "再平衡", "稅損收割", "positions", "portfolio", "P&L", "order", "buy", "sell", "DCA", "statement", "risk analysis", "rebalancing", "tax harvesting", "我的风险", "持仓风险", "风险敞口", "資產", "資產配置", "風險分析", "績效歸因", "撤單

bg-szy/TOP-SKILLS

Auto-loaded context for Portfolio Buddy 2 development. Use for ANY task involving: React 19 development, TypeScript, portfolio analysis features, metrics calculations, trading strategy comparison, or working with the Portfolio Buddy 2 codebase. Contains tech stack, known issues, and architectural constraints.

bg-szy/TOP-SKILLS

Process video files with audio extraction, format conversion (mp4, webm), and Whisper transcription. Use when user mentions video conversion, audio extraction, transcription, mp4, webm, ffmpeg, or whisper transcription.

Skills associés