@j3r3mcdev/oast-server
v1.0.0
Published
Modular OAST callback server for security auditing
Downloads
126
Maintainers
Readme
OAST Server — Multi‑Protocol Out‑of‑Band Interaction Framework
Un serveur OAST modulaire, extensible et agnostique, conçu pour capturer, normaliser et diffuser des interactions out‑of‑band provenant de multiples canaux : HTTP, DNS, SMTP, SSRF, Webhook, WebSocket, TCP, API REST et SSE.
Ce framework fournit une architecture listener‑based robuste, unifiée et testée, idéale pour les outils de diagnostic, scanners de vulnérabilités, plateformes d’audit ou systèmes de détection avancés.
✨ Caractéristiques principales
Architecture modulaire par listeners
Chaque protocole est isolé dans son propre module (http,dns,smtp,ssrf,webhook,websocket,tcp,api).Extractors dédiés
Chaque listener dispose d’un extractor responsable de la normalisation des données brutes.API REST intégrée
Permet de récupérer les events, les tasks, les métadonnées et l’état du serveur.SSE (Server‑Sent Events)
Diffusion en temps réel des interactions capturées.Storage agnostique
Implémentation par défaut en mémoire, extensible vers Redis, SQLite, PostgreSQL, etc.Suite de tests complète
118 tests unitaires couvrant extractors, listeners, API, SSE et services.Aucune dépendance lourde
Pas d’Express, pas de framework web : un cœur minimaliste, rapide et portable.
📦 Installation
npm install @j3r3mcdev/oast-server🚀 Démarrage rapide
import { ApiListener, HttpListener, DnsListener } from "@j3r3mcdev/oast-server";
const api = new ApiListener({ port: 8080 });
const http = new HttpListener({ port: 8000 });
const dns = new DnsListener({ port: 5353 });
api.start();
http.start();
dns.start();
console.log("OAST server running");📡 Protocoles supportés
| Protocole | Listener | Description |
| ------------- | ------------------- | --------------------------------------- |
| HTTP | HttpListener | Capture des requêtes HTTP entrantes |
| DNS | DnsListener | Résolution DNS OAST (A, AAAA, TXT…) |
| SMTP | SmtpListener | Réception d’emails OAST |
| SSRF | SsrfListener | Détection d’interactions SSRF |
| Webhook | WebhookListener | Réception d’appels webhook |
| WebSocket | WebSocketListener | Connexions WebSocket entrantes |
| TCP | TcpListener | Connexions TCP brutes |
| API + SSE | ApiListener | API REST + diffusion temps réel via SSE |
🧩 Architecture

Chaque listener contient :
*.listener.ts→ serveur du protocole*.extractor.ts→ normalisation des données__tests__/→ tests unitaires
🧨 Exemple : Listener HTTP
import { HttpListener } from "@j3r3mcdev/oast-server";
const http = new HttpListener({
port: 8000,
onEvent: (event) => {
console.log("HTTP event:", event);
},
});
http.start();🧨 Exemple : Listener DNS
🧨 Exemple : Listener DNS
import { DnsListener } from "@j3r3mcdev/oast-server";
const dns = new DnsListener({
port: 5353,
onEvent: (event) => {
console.log("DNS event:", event);
},
});
dns.start();🧨 Exemple : SSE (temps réel)
## 🧨 Exemple : SSE (temps réel)const stream = new EventSource(
"http://localhost:8080/stream?channels=http,dns",
);
stream.onmessage = (msg) => {
const event = JSON.parse(msg.data);
console.log("Event reçu :", event);
};🧨 Exemple : API REST
🧨 Exemple : API REST
Récupérer les events
curl http://localhost:8080/eventsCréer une tâche
curl -X POST http://localhost:8080/tasks \
-H "Content-Type: application/json" \
-d '{"type":"scan","payload":{"url":"http://example.com"}}'🧱 Storage (Markdown PRO)
🧱 Storage
Par défaut : in‑memory
Vous pouvez implémenter votre propre storage :
export interface StorageAdapter {
save(event: OastEvent): Promise<void>;
list(filters: any): Promise<OastEvent[]>;
}
class MyStorage implements StorageAdapter {
private events = [];
async save(e) {
this.events.push(e);
}
async list() {
return this.events;
}
}🧪 Tests (Markdown PRO)
🧪 Tests
- 37 suites
- 118 tests
- 100% verts
- Tests d’intégration réservés à l’outil d’audit (non inclus dans la lib)
📘 Licence
MIT
