
Plateforme de red-team IA. Des agents LLM autonomes exécutent un test d'intrusion de bout en bout dans un conteneur Kali et rédigent le rapport. Moteur plan/act LangGraph, modèles agnostiques au fournisseur via LiteLLM, sortie PDF/JSON/SARIF. FastAPI + React.
REDCELL fait tourner une équipe d'agents LLM à travers un pentest. Un orchestrateur planifie l'engagement et confie des objectifs à des agents exécuteurs, qui lancent de vrais outils dans un conteneur Kali et rendent compte. Vous observez et pilotez l'exécution depuis une console opérateur : un chat qui pilote l'orchestrateur, un graphe d'agents et un flux d'activité en direct, une vue en direct du navigateur que l'agent pilote, un terminal sur tout reverse shell que l'agent intercepte, et un rapport à remettre une fois le travail terminé.
Les modèles sont interchangeables via LiteLLM, vous pouvez donc le pointer vers OpenAI, Anthropic, Google, GLM, DeepSeek, Kimi, un Ollama local, ou tout autre qu'il prend en charge. Chaque exécution est sauvegardée au fur et à mesure, ainsi un crash ou un redémarrage reprend là où il s'était arrêté.
run_command couvre tout ce qui n'a pas d'outil dédié.docker exec. Choisissez localhost ou un serveur enregistré par session ; un serveur distant exécute le même conteneur via SSH avec le réseau de l'hôte.flowchart LR
UI["Operator console<br/>React + Vite"] -->|REST + WebSocket| API["FastAPI"]
API --> PG[(PostgreSQL)]
API --> RS[(Redis<br/>pub/sub + queue)]
API --> S3[(MinIO<br/>files & reports)]
RS --> W["Worker (arq)"]
W --> ENG["Engine<br/>LangGraph + LiteLLM"]
ENG -->|docker exec| KALI["Kali container<br/>local or remote over SSH"]
KALI --> TGT["Targets"]
W -->|events / chat / shell| RS
RS -->|stream| APIL'API n'exécute pas les agents. Elle met une exécution en file d'attente, le worker l'exécute, et le worker publie la sortie sur des canaux Redis que l'API relaie au navigateur via WebSockets.
Python 3.12, FastAPI, SQLAlchemy async + asyncpg, Alembic, arq, LangGraph, LiteLLM, ReportLab, PostgreSQL, Redis, MinIO, asyncssh. Frontend : React 18, Vite, TypeScript, Tailwind, TanStack Query, xterm. Outillage : uv pour Python, bun pour le frontend.
# 1. infrastructure (Postgres, Redis, MinIO)
docker compose -f docker-compose.dev.yml up -d
# 2. Python deps, database, and seed data
uv sync --group live
uv run rc db upgrade
uv run rc seed # admin user, provider catalog, buckets
# 3. copy the env template
cp .env.example .env
# 4. run the three processes (separate terminals)
cd apps/api && uv run uvicorn app.main:app --host 127.0.0.1 --port 8080
cd apps/worker && uv run arq worker.settings.WorkerSettings
cd apps/web && bun install && bun run dev
Ou démarrez les trois d'un coup avec un gestionnaire de processus (ils sont déclarés dans le
Procfile) : pipx install honcho puis honcho start.
Ouvrez http://localhost:5183 et connectez-vous avec admin / admin.
Les exécutions lancent de vrais outils par défaut. Ajoutez une clé API de fournisseur dans Settings et assurez-vous que Docker peut tirer l'image Kali (martian56/kali:latest). Pour faire un dry-run sur une sortie préenregistrée à la place, définissez REDCELL_RUN_MODE=sim dans .env.
Des applications intentionnellement vulnérables vers lesquelles pointer REDCELL, toutes locales :
docker compose -f docker-compose.targets.yml up -d
# DVWA http://localhost:8081 · Juice Shop http://localhost:3000 · WebGoat http://localhost:8082
Faites tourner REDCELL sur un serveur avec les images publiées derrière un reverse proxy Caddy, afin que l'application web et l'API partagent une même origine (pas de CORS) et que HTTPS soit géré pour vous. Sur un serveur neuf :
git clone https://github.com/martian56/redcell.git
cd redcell
./deploy.sh
Le script installe Docker s'il est absent, puis demande comment REDCELL sera accessible :
https://votre-domaine.Il écrit vos réponses dans .env, tire les images et démarre la stack. Lisez le mot de passe admin généré avec docker compose logs init-secrets, puis connectez-vous en tant que admin et changez-le. Pour modifier la façon dont il est accessible plus tard, relancez simplement ./deploy.sh et choisissez une autre option.
Seuls les ports 80 et 443 sont publiés ; Postgres, Redis, MinIO, l'API et l'application web restent sur le réseau interne. Les fichiers stockés sont diffusés via l'API, donc le stockage objet n'est jamais exposé. Voir docs/DEPLOY.md pour les détails de chaque mode.
La configuration du backend tient dans un unique .env racine (voir .env.example), lu à la fois par l'API et le worker. Celles qui valent la peine d'être connues :
REDCELL_RUN_MODE : live (par défaut) ou sim.REDCELL_DATABASE_URL, REDCELL_REDIS_URL, REDCELL_S3_* : infrastructure.REDCELL_SECRET_KEY : clé Fernet pour chiffrer les identifiants stockés. Définissez-en une vraie avant de passer en production.Les clés API des fournisseurs, l'image d'exécution, les garde-fous de périmètre et l'image de marque des rapports se trouvent dans la page Settings et sont stockés dans la base de données, chiffrés là où c'est nécessaire.
apps/
api/ FastAPI: routers, WebSocket streams, auth
worker/ arq worker: runs engagements and report generation
web/ React operator console
packages/
core/redcell_core/ engine, models, repositories, storage, bus, reporting
api-client/ the single typed client the UI talks to (mock + HTTP)
docker/ Kali execution image, web/api images, Caddy config
docker-compose.yml full stack behind a Caddy reverse proxy (self-host)
docker-compose.dev.yml Postgres + Redis + MinIO
docker-compose.targets.yml local vulnerable targets
deploy.sh interactive self-host deploy
Les contributions sont bienvenues. Voir CONTRIBUTING.md pour l'installation, les tests et les conventions, ainsi que le Code de conduite. Signalez les problèmes de sécurité en privé via SECURITY.md, pas dans des issues publiques.
Ceci est un outillage défensif et offensif autorisé destiné aux professionnels de la sécurité, aux CTF et à vos propres labs. Ne l'utilisez pas contre des systèmes pour lesquels vous n'avez pas de permission écrite de tester. Les mainteneurs ne sont pas responsables d'un usage abusif.