Rapport H1
Ceci est unSecOps, AI Summarizationworkflow d'automatisation du domainecontenant 9 nœuds.Utilise principalement des nœuds comme Agent, HttpRequestTool, ChatTrigger, LmChatGoogleGemini. Extraire des insights de sécurité actionnables à partir des rapports HackerOne avec Google Gemini
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API Google Gemini
Nœuds utilisés (9)
Catégorie
{
"id": "GQvrSUkdvgHiSl4W",
"meta": {
"instanceId": "c5257b5cf4d48704d636909c07c4408a69d6799d0a855eab46287eeb702c84b0",
"templateCredsSetupCompleted": true
},
"name": "H1 reports",
"tags": [
{
"id": "B57Byrk0DBYk6h5Q",
"name": "The Herald",
"createdAt": "2025-07-07T03:11:18.909Z",
"updatedAt": "2025-07-07T03:11:18.909Z"
}
],
"nodes": [
{
"id": "bedea6c7-e283-4339-9b7f-dd1d1bcf8016",
"name": "Modèle de chat Google Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
576,
208
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-pro"
},
"credentials": {
"googlePalmApi": {
"id": "9X33EcTu2Vxq1AUX",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "ce8f1868-70e3-4b0a-8e6c-6078359b7d9e",
"name": "GET H1 report",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
912,
208
],
"parameters": {
"url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}",
"options": {},
"toolDescription": "Makes a request to \n```\nhttps://hackerone.com/reports/<hackerone-report-id>.json\n```\nexample:\n\nhttps://hackerone.com/reports/312543.json\nhttps://hackerone.com/reports/342543.json"
},
"typeVersion": 4.2
},
{
"id": "0e7065ce-f2aa-416d-9488-dbffa4bb0f67",
"name": "À la réception du message",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
448,
0
],
"webhookId": "0ffa61ef-4e16-43f7-a57b-7e103047dc9f",
"parameters": {
"public": true,
"options": {
"title": "H1 report summarizer",
"subtitle": "",
"customCss": "/* Font Import (place in your <head>) */\n@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Fira+Code&display=swap');\n\n:root {\n /* 🎨 Color Palette - Minimal + Elegant */\n --chat--color-primary: #e74266;\n --chat--color-primary-shade-50: #d63b5d;\n --chat--color-primary-shade-100: #c73352;\n --chat--color-secondary: #20b69e;\n --chat--color-secondary-shade-50: #1ca08a;\n\n --chat--color-white: #ffffff;\n --chat--color-light: #f9fafb;\n --chat--color-light-shade-50: #e5e7eb;\n --chat--color-light-shade-100: #d1d5db;\n --chat--color-medium: #9ca3af;\n --chat--color-dark: #111827;\n --chat--color-muted: #6b7280;\n\n /* Fonts & Sizing */\n --chat--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n --chat--code-font: 'Fira Code', monospace;\n --chat--font-size: 1rem;\n\n /* Layout & Spacing */\n --chat--spacing: 1rem;\n --chat--border-radius: 0.75rem;\n --chat--transition-duration: 0.25s;\n\n /* Window */\n --chat--window--width: 420px;\n --chat--window--height: 620px;\n --chat--window--box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1);\n\n /* Header */\n --chat--header--background: var(--chat--color-dark);\n --chat--header--color: var(--chat--color-white);\n --chat--heading--font-size: 1.4rem;\n\n /* Message Bubbles */\n --chat--message--font-size: 1rem;\n --chat--message--padding: 0.85rem 1rem;\n --chat--message--border-radius: 0.75rem;\n --chat--message--bot--background: var(--chat--color-white);\n --chat--message--bot--color: var(--chat--color-dark);\n --chat--message--user--background: var(--chat--color-secondary);\n --chat--message--user--color: var(--chat--color-white);\n\n /* Input */\n --chat--input--background: var(--chat--color-white);\n --chat--input--text-color: var(--chat--color-dark);\n --chat--input--border: 1px solid var(--chat--color-light-shade-100);\n --chat--input--border-radius: 0.75rem;\n --chat--input--placeholder: var(--chat--color-muted);\n\n /* Code Blocks */\n --chat--code--background: #111827;\n --chat--code--text: #f9fafb;\n}\n\n/* 🪟 Chat Window */\n.chat-window {\n width: var(--chat--window--width);\n height: var(--chat--window--height);\n background: var(--chat--color-light);\n box-shadow: var(--chat--window--box-shadow);\n border-radius: var(--chat--border-radius);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: var(--chat--font-family);\n -webkit-font-smoothing: antialiased;\n}\n\n/* 🧠 Header */\n.chat-header {\n background: var(--chat--header--background);\n color: var(--chat--header--color);\n padding: var(--chat--spacing);\n font-size: var(--chat--heading--font-size);\n font-weight: 600;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n}\n\n/* 📜 Message Container */\n.chat-messages {\n flex: 1;\n padding: var(--chat--spacing);\n overflow-y: auto;\n background: var(--chat--color-light);\n}\n\n/* 💬 Message Bubbles */\n.chat-message {\n max-width: 75%;\n padding: var(--chat--message--padding);\n border-radius: var(--chat--message--border-radius);\n margin-bottom: 0.75rem;\n font-size: var(--chat--message--font-size);\n line-height: 1.5;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n word-break: break-word;\n transition: 0.2s ease-in-out;\n}\n\n.chat-message.bot {\n background: var(--chat--message--bot--background);\n color: var(--chat--message--bot--color);\n align-self: flex-start;\n}\n\n.chat-message.user {\n background: var(--chat--message--user--background);\n color: var(--chat--message--user--color);\n align-self: flex-end;\n}\n\n/* 🧑💻 Code Block Styling - Enhanced Visibility */\n.chat-message pre {\n box-sizing: border-box;\n display: block;\n font-family: var(--chat--code-font), monospace;\n font-size: 0.9rem; /* Slightly larger font */\n line-height: 1.6; /* More spacing */\n background: #f8f8f8; /* Dark but not pure black */\n color: #333; /* Light gray for better readability */\n padding: 1rem;\n border-radius: 0.5rem;\n margin-top: 0.75rem;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n border: 1px solid #ddd; /* Subtle border */\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3);\n}\n\n/* Label above code blocks - More visible */\n.chat-message pre::before {\n content: \"payload\";\n display: block;\n font-size: 0.8rem;\n color: #666;\n margin-bottom: 0.75rem;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n/* Syntax highlighting colors (example) */\n.chat-message pre .keyword { color: #569cd6; } /* Blue for keywords */\n.chat-message pre .string { color: #ce9178; } /* Orange for strings */\n.chat-message pre .comment { color: #6a9955; } /* Green for comments */\n.chat-message pre .number { color: #b5cea8; } /* Light green for numbers */\n\n/* Improved scrollbar */\n.chat-message pre::-webkit-scrollbar {\n height: 8px; /* Thicker scrollbar */\n background-color: #2a2a2a;\n}\n.chat-message pre::-webkit-scrollbar-thumb {\n background: #5a5a5a;\n border-radius: 4px;\n}\n\n/* ✍️ Typing Indicator */\n.chat-typing {\n color: var(--chat--color-muted);\n font-style: italic;\n margin-top: 0.5rem;\n animation: blink 1s infinite;\n}\n@keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n/* ⌨️ Input Footer */\n.chat-input-area {\n display: flex;\n padding: var(--chat--spacing);\n border-top: 1px solid var(--chat--color-light-shade-100);\n background: var(--chat--color-white);\n}\n\n.chat-input {\n flex: 1;\n font-family: var(--chat--font-family);\n font-size: var(--chat--font-size);\n background: var(--chat--input--background);\n color: var(--chat--input--text-color);\n border: var(--chat--input--border);\n border-radius: var(--chat--input--border-radius);\n padding: 0.75rem 1rem;\n}\n.chat-input::placeholder {\n color: var(--chat--input--placeholder);\n}\n\n/* 📤 Send Button */\n.chat-send-btn {\n margin-left: 0.75rem;\n background: var(--chat--color-primary);\n color: var(--chat--color-white);\n border: none;\n border-radius: var(--chat--border-radius);\n padding: 0.75rem 1rem;\n cursor: pointer;\n transition: background 0.2s ease-in-out;\n}\n.chat-send-btn:hover {\n background: var(--chat--color-primary-shade-50);\n}\n\n/* 💝 Attribution Below Header */\n.chat-header::after {\n content: \"Made with ❤️ by ethicxl\";\n display: block;\n text-align: right;\n padding: 0.5rem var(--chat--spacing);\n background: var(--chat--color-dark);\n font-size: 0.75rem;\n color: var(--chat--color-medium);\n font-weight: 400;\n font-family: var(--chat--font-family);\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n}\n\n/* Remove the problematic positioning */\n.chat-input-area {\n position: static;\n margin-bottom: 0;\n}"
},
"initialMessages": "Hey!\nSend your report's link down below"
},
"typeVersion": 1.1
},
{
"id": "5f51af95-aa06-43f8-b7c9-c5ff5a4298cb",
"name": "H1 report summarizer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
640,
0
],
"parameters": {
"text": "={{ $json.chatInput }}",
"options": {
"systemMessage": "=You are an expert AI assistant designed for a high-level bug bounty hunter. Your task is to extract and summarize only **unique, high-impact technical insights** from security reports, not general summaries.\n\nTool Calling:\n\n* Before you write anything you must:\n* Call the tool `GET H1 report` exactly once, passing the full URL you received.\n* Parse the returned JSON for report contents (they would be in JSON)\n\nFocus your analysis on:\n- New payloads, edge-case techniques, or chaining methods\n- Root cause analysis with practical pentesting value\n- Workflow insights that save time or increase discovery\n- Snippets that can be reused or adapted (code, diffs, commands)\n- CVSS/impact context only if it reflects real-world exploitation potential\n\nYour tone is concise, factual, and tailored for advanced hunters. Do not include background explanations or definitions.\n\nFormat the output as:\n\n1. **Summary** (1–2 sentence BLUF)\n2. **Techniques**:\n - *Name*: Short tag for the finding (e.g., SSRF via PDF render)\n - *Context*: Where/how the bug was triggered\n - *Technique*: Raw payload, code, diff, or steps\n - *Impact*: What the attacker could achieve\n3. **Pro Tip** (optional): A short insight that can be reused elsewhere\n"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "61f8445f-7789-44ea-8ed8-edd54eba19d7",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1168,
-128
],
"parameters": {
"color": 4,
"width": 376,
"height": 208,
"content": "## 🎯 WORKFLOW PURPOSE\n\nConverts HackerOne report URLs into actionable security insights for bug bounty hunters.\n\n**INPUT**: H1 report URL (e.g., hackerone.com/reports/123456.json)\n**OUTPUT**: Structured technical analysis with payloads & techniques"
},
"typeVersion": 1
},
{
"id": "19e3ab93-8027-423d-bc98-5d21eb66db2a",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-32
],
"parameters": {
"width": 352,
"height": 204,
"content": "### 📨 CHAT INTERFACE\n\n**Setup Required**:\n- Deploy webhook publicly\n- Send H1 URLs ending in .json\n- Custom CSS for pentester theme\n\n**Format**: https://hackerone.com/reports/ID"
},
"typeVersion": 1
},
{
"id": "56c29618-9568-4b8c-aeff-81cfb820bd1f",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-288
],
"parameters": {
"width": 268,
"height": 200,
"content": "### 🧠 Main Agent\n\n**Requires**: Google Gemini API key\n\n**Purpose**: \n- Orchestrates analysis workflow\n- Calls HTTP tool automatically\n- Formats output for hunters"
},
"typeVersion": 1
},
{
"id": "3cb80e59-054b-4d8f-8786-e63595b888ec",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
352
],
"parameters": {
"width": 248,
"height": 196,
"content": "### 🔧 GEMINI LLM\n\n**Config**: Use gemini-2.5-pro\n**Auth**: Google PaLM API credentials\n\n**Note**: Can substitute with other models if needed"
},
"typeVersion": 1
},
{
"id": "f0e4251b-f830-47a9-8709-63b37472f9ff",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
912,
368
],
"parameters": {
"width": 264,
"height": 200,
"content": "### 📡 HTTP FETCHER\n\n**Target**: HackerOne JSON API\n**Method**: GET request\n**Security**: No hardcoded credentials\n\n**Auto-called** by AI agent with URL from chat"
},
"typeVersion": 1
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "8fbd7882-d242-44cd-a45c-ef598ba294d8",
"connections": {
"ce8f1868-70e3-4b0a-8e6c-6078359b7d9e": {
"ai_tool": [
[
{
"node": "5f51af95-aa06-43f8-b7c9-c5ff5a4298cb",
"type": "ai_tool",
"index": 0
}
]
]
},
"5f51af95-aa06-43f8-b7c9-c5ff5a4298cb": {
"main": [
[]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "5f51af95-aa06-43f8-b7c9-c5ff5a4298cb",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "5f51af95-aa06-43f8-b7c9-c5ff5a4298cb",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Opérations de sécurité, Résumé IA
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Partager ce workflow