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