← retour aux outils back to tools

# LLMFuzzer

Framework de fuzzing open-source conçu spécifiquement pour les API LLM, envoyant des entrées mutées/adversariales vers un endpoint cible pour révéler des injections de prompt et des failles d'intégration. Open-source fuzzing framework built specifically for LLM APIs, sending mutated/adversarial inputs at a target endpoint to surface prompt injection and integration weaknesses.

↗ https://github.com/mnns/LLMFuzzer

## Overview

LLMFuzzer is a fuzzing framework purpose-built for LLM APIs and the applications wrapped around them, rather than a general-purpose web fuzzer repurposed for AI. It sends batches of mutated and adversarial prompts at a target endpoint, tracks responses, and flags cases that look like a successful prompt injection or an integration weakness (e.g. the LLM leaking a system prompt or executing an unintended action through a connected plugin/tool). It’s aimed at quickly surfacing low-hanging issues before deeper manual jailbreak work.

## Installation

    git clone https://github.com/mnns/LLMFuzzer
    cd LLMFuzzer
    pip install -r requirements.txt

## Configuring a Target

    # config.py — define how LLMFuzzer talks to your target LLM API
    import requests

    def send_prompt(prompt: str) -> str:
        resp = requests.post(
            "<target_api_url>",
            json={"prompt": prompt, "model": "<model_name>"},
            headers={"Authorization": "Bearer <api_key>"},
        )
        return resp.json()["response"]

## Running a Fuzzing Session

Run the default prompt-injection payload set against the configured target

    python3 llmfuzzer.py --target config.py --wordlist payloads/prompt_injection.txt

Increase concurrency and cap the run

    python3 llmfuzzer.py --target config.py --wordlist payloads/jailbreaks.txt \
      --threads 10 --max-requests 500

Save flagged (interesting) responses for manual review

    python3 llmfuzzer.py --target config.py --wordlist payloads/leak_system_prompt.txt \
      --output results/session1.json

## Tips

- Write your own payload wordlists per engagement — the bundled lists are a good starting seed corpus but real bypasses are usually target-specific.
- Pair LLMFuzzer’s broad sweep with manual follow-up: it’s built to find candidates fast, not to confirm exploitability on its own.

Help / Man page

    llmfuzzer.py --target <config.py> --wordlist <payloads.txt> [options]

    OPTIONS:
      --target FILE       Python module defining send_prompt(prompt) -> str
      --wordlist FILE      Newline-delimited fuzzing payloads
      --threads N          Concurrent requests (default: 1)
      --max-requests N     Cap total requests sent
      --output FILE        Save flagged results as JSON
      --timeout SECONDS    Per-request timeout
      --delay SECONDS      Delay between requests (rate-limit friendly)

    Bundled payload sets:
      payloads/prompt_injection.txt
      payloads/jailbreaks.txt
      payloads/leak_system_prompt.txt

## Vue d’ensemble

LLMFuzzer est un framework de fuzzing conçu spécifiquement pour les API LLM et les applications qui les enveloppent, plutôt qu’un fuzzer web généraliste réadapté pour l’IA. Il envoie des lots de prompts mutés et adversariaux vers un endpoint cible, suit les réponses, et signale les cas ressemblant à une injection de prompt réussie ou à une faille d’intégration (par exemple le LLM divulguant un system prompt ou exécutant une action non prévue via un plugin/outil connecté). Il vise à faire ressortir rapidement les problèmes évidents avant un travail de jailbreak manuel plus approfondi.

## Installation

    git clone https://github.com/mnns/LLMFuzzer
    cd LLMFuzzer
    pip install -r requirements.txt

## Configuration d’une cible

    # config.py : définit comment LLMFuzzer communique avec l'API LLM cible
    import requests

    def send_prompt(prompt: str) -> str:
        resp = requests.post(
            "<target_api_url>",
            json={"prompt": prompt, "model": "<model_name>"},
            headers={"Authorization": "Bearer <api_key>"},
        )
        return resp.json()["response"]

## Lancer une session de fuzzing

    # Lancer le jeu de payloads d'injection de prompt par défaut contre la cible configurée
    python3 llmfuzzer.py --target config.py --wordlist payloads/prompt_injection.txt

    # Augmenter la concurrence et plafonner l'exécution
    python3 llmfuzzer.py --target config.py --wordlist payloads/jailbreaks.txt \
      --threads 10 --max-requests 500

    # Sauvegarder les réponses signalées (intéressantes) pour une revue manuelle
    python3 llmfuzzer.py --target config.py --wordlist payloads/leak_system_prompt.txt \
      --output results/session1.json

## Conseils

- Écrire vos propres wordlists de payloads par mission : les listes fournies sont un bon corpus de départ, mais les vrais contournements sont généralement spécifiques à la cible.
- Combiner le balayage large de LLMFuzzer avec un suivi manuel : il est conçu pour trouver des candidats rapidement, pas pour confirmer l’exploitabilité par lui-même.

Aide / Page de manuel

    llmfuzzer.py --target <config.py> --wordlist <payloads.txt> [options]

    OPTIONS:
      --target FILE       Python module defining send_prompt(prompt) -> str
      --wordlist FILE      Newline-delimited fuzzing payloads
      --threads N          Concurrent requests (default: 1)
      --max-requests N     Cap total requests sent
      --output FILE        Save flagged results as JSON
      --timeout SECONDS    Per-request timeout
      --delay SECONDS      Delay between requests (rate-limit friendly)

    Bundled payload sets:
      payloads/prompt_injection.txt
      payloads/jailbreaks.txt
      payloads/leak_system_prompt.txt