← All hunts high TLP:CLEAR

Abuse of Flowise AI Orchestration Platforms

An attacker is exploiting unauthenticated Flowise instances to harvest stored API credentials and hijack AI agents for internal network reconnaissance and financial data exfiltration.

Based on research by Sekoia 2026-10-20 12 steps · 4 queries T1041 T1190 T1505.003 T1552.001

Brief

Why Now

Sekoia published a report titled Sekoia Honeypot Captures an Attack on GenAI Infrastructure (https://www.sekoia.com/blog/a-honeypots-tale-deconstructing-an-attack-on-genai-infrastructure). The research details how actors scan for and exploit unauthenticated AI orchestration tools like Flowise. These platforms sit in privileged positions with access to internal data and external AI models.

How the Hunt Flows

The hunt starts by identifying hosts running the Flowise package. This scoping step uses software inventory data to define the search space. By narrowing the focus early, the hunt avoids unnecessary telemetry analysis on unrelated systems. Once the hosts are scoped, the hunt performs a parallel search for early indicators of compromise. One query examines HTTP activity for successful GET requests to sensitive API routes such as /api/v1/credentials and /api/v1/chatflows. These endpoints contain the secrets used to connect the AI agents to external providers. Simultaneously, another query checks for outbound network connections to known attacker infrastructure or rare high ports. An automated triage step then weighs these results. It flags hosts that show both unauthenticated API access and new outbound callbacks. This correlation helps distinguish targeted exploitation from general internet background noise. The hunt then moves to analyze the semantic content of the interaction. It examines HTTP request logs for POST or PUT payloads sent to the prediction endpoints. The hunt searches for keywords like system status, financial data, or internal IP addresses. These indicators suggest the attacker is attempting to manipulate the AI agent to probe the internal environment. In the final phase, an agent correlates the reconnaissance and callback activity with the malicious prompts. This provides a high-confidence assessment of a successful breach.

Blind Spots

This hunt has two main limitations. First, if HTTP traffic is encrypted and the body is not captured in the logs, the semantic intent of the prompts remains hidden. Second, the hunt relies on host-level networking. If the AI server queries internal resources via a separate VPC or private link, those connections might not appear in standard network logs.

Steps

  1. Identify Flowise Orchestration Instances

    Query · scoping

    Find hosts running the Flowise package to define the search space for the rest of the hunt.

    reads hb_software_inventorysql
    SELECT DISTINCT device_hostname, package_version FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%flowise%'

    What a hit looks like. A list of hosts running Flowise. If no hosts are returned, the estate may not use this specific AI orchestration platform.

  2. API Reconnaissance and Secret Access

    Query · enrichment

    Detect successful GET requests to sensitive Flowise endpoints that expose version data and credentials.

    reads hb_http_activitysql
    SELECT device_hostname, url_path, status_code, http_method, COUNT(*) as request_count, MIN(time) as first_seen FROM hb_http_activity WHERE (LOWER(url_path) LIKE '%/api/v1/ping%' OR LOWER(url_path) LIKE '%/api/v1/version%' OR LOWER(url_path) LIKE '%/api/v1/node-configs%' OR LOWER(url_path) LIKE '%/api/v1/chatflows%' OR LOWER(url_path) LIKE '%/api/v1/credentials%' OR LOWER(url_path) LIKE '%/credentials/%') AND status_code = 200 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_path, status_code, http_method

    What a hit looks like. Successful GET requests to credential and metadata routes suggest an attacker is harvesting secrets.

  3. Anomalous Outbound Network Callbacks

    Query · baseline

    Identify outbound connections to known attacker infrastructure or rare high ports from the AI servers.

    reads hb_network_connectionsql
    SELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, COUNT(*) AS connection_count, MIN(time) as first_seen FROM hb_network_connection WHERE direction = 'outbound' AND (instr(',' || '{{callback_ips}}' || ',', ',' || dst_endpoint_ip || ',') > 0 OR dst_endpoint_port = 19999) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, dst_endpoint_ip, dst_endpoint_port

    What a hit looks like. Outbound connections to the reported IPs or on port 19999 indicate the creation of a persistent callback channel.

  4. Early-Stage Evidence Triage

    Agent triage

    Weigh the API secret access and network callbacks to identify hosts currently undergoing active exploitation.

  5. LLM Agent Hijacking and Manipulation

    Query · detection candidate

    Analyze HTTP request payloads for attempts to modify chatflows or hijack the agent via malicious prompts.

    reads hb_http_activitysql
    SELECT device_hostname, url_path, http_method, log_line, time FROM hb_http_activity WHERE (http_method IN ('POST', 'PUT', 'PATCH')) AND (LOWER(url_path) LIKE '%/prediction%' OR LOWER(url_path) LIKE '%/chatflows%') AND (LOWER(log_line) LIKE '%system status%' OR LOWER(log_line) LIKE '%154.217.251.226%' OR LOWER(log_line) LIKE '%rag%' OR LOWER(log_line) LIKE '%financial%' OR LOWER(log_line) LIKE '%10.0.0.5%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Requests containing keywords like 'system status', 'financial', or 'RAG' in the payload indicate the agent is being manipulated to exfiltrate internal data.

  6. Final Compromise Assessment

    Agent triage

    Correlate early reconnaissance and secret access with follow-on LLM hijacking attempts to confirm a successful breach.

  7. Route on Compromise Verdict

    Decision

    Direct response actions based on the agent's assessment of platform compromise.

  8. Isolate Compromised Flowise Host

    Response action

    Halt the attack and prevent further internal reconnaissance from the platform.

  9. Revoke and Rotate Leaked Credentials

    Analyst task

    Mitigate the impact of stolen API keys and database credentials stored in Flowise.

  10. Manual Analyst Review

    Analyst task

    Review HTTP logs manually when semantic prompts cannot be definitively classified.

  11. Remediation and Hardening

    Analyst task

    Harden the Flowise deployment to prevent future exploitation.

Coverage

Scenario coverage

StageCoveredHow, or why not
Flowise Vulnerability Assessment
T1190
Yes scope-flowise-hosts
Unauthenticated API Reconnaissance
T1190
Yes api-recon-and-exfiltration
Credential Harvesting and Exfiltration
T1552.001
Yes api-recon-and-exfiltration
Chatflow Manipulation and Persistent Callback
T1505.003
Yes anomalous-outbound-connections, llm-hijacking-and-manipulation
LLM Agent Hijacking and Internal Probing
T1041 · T1567
Yes llm-hijacking-and-manipulation

Blind spots

  • Needs TLS decryption at a proxy or application-level request logging. If traffic is encrypted and the body is not captured, the semantic intent of LLM prompts (hijacking) remains invisible, leaving only URL-path metadata. It would answer whether the 'log_line' column in hb_http_activity contains the request body.
  • Needs internal VPC flow logs or host-based firewall logs. If only internet-facing logs are collected, the agent's internal reconnaissance against internal databases remains hidden. It would answer whether the AI server successfully queried internal IPs like 10.0.0.5.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
callback_ipslist[ip]154.217.251.226Attacker callback infrastructure identified in the report.
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]—List of hostnames to restrict the hunt to; leave empty for the whole estate.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Network telemetrynetworknetwork
Web server / proxy logssiemnetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: 'A single rule could fire on access to /api/v1/credentials, but this hunt
  correlates the phased chain: initial fingerprinting, secret harvesting, and the
  semantic abuse of prompts targeting internal resources. This correlation is necessary
  to distinguish an active intrusion from legitimate developer activity.'
blind_spots:
- id: encrypted-http-bodies
  question: whether the 'log_line' column in hb_http_activity contains the request
    body
  requires: TLS decryption at a proxy or application-level request logging
  risk: If traffic is encrypted and the body is not captured, the semantic intent
    of LLM prompts (hijacking) remains invisible, leaving only URL-path metadata.
  stage: unauthenticated-api-reconnaissance
- id: agent-network-isolation
  question: whether the AI server successfully queried internal IPs like 10.0.0.5
  requires: internal VPC flow logs or host-based firewall logs
  risk: If only internet-facing logs are collected, the agent's internal reconnaissance
    against internal databases remains hidden.
  stage: llm-agent-hijacking
coverage:
- stage: vulnerability-inventory
  status: covered
  steps:
  - scope-flowise-hosts
- stage: unauthenticated-api-reconnaissance
  status: covered
  steps:
  - api-recon-and-exfiltration
- stage: credential-harvesting-exfiltration
  status: covered
  steps:
  - api-recon-and-exfiltration
- stage: chatflow-manipulation-callback
  status: covered
  steps:
  - anomalous-outbound-connections
  - llm-hijacking-and-manipulation
- stage: llm-agent-hijacking
  status: covered
  steps:
  - llm-hijacking-and-manipulation
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: AI orchestration platforms bridge the gap between external users
    and internal data vaults; a breach here allows an attacker to bypass traditional
    security boundaries by proxying their intent through the AI model itself.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An attacker is exploiting unauthenticated Flowise instances to harvest
  stored API credentials and hijack AI agents for internal network reconnaissance
  and financial data exfiltration.
labels:
- hunt
- attack.t1190
- attack.t1041
- attack.t1505.003
- attack.t1552.001
- credential access
- discovery
- exfiltration
- initial access
- persistence
name: Abuse of Flowise AI Orchestration Platforms
parameters:
  callback_ips:
    default:
    - 154.217.251.226
    description: Attacker callback infrastructure identified in the report.
    from:
      kind: article
      observed: '2026-08-30'
      ref: sekoia-flowise-2026
    type: list[ip]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
  scope_hosts:
    default: []
    description: List of hostnames to restrict the hunt to; leave empty for the whole
      estate.
    type: list[host]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.sekoia.com/blog/a-honeypots-tale-deconstructing-an-attack-on-genai-infrastructure
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start by identifying hosts with Flowise installed. If no software inventory
  match is found, widen the search to any internal server running Node.js with high
  outbound HTTP traffic volume to AI model providers.
references:
- name: "Sekoia \u2014 Sekoia Honeypot Captures an Attack on GenAI Infrastructure"
  url: https://www.sekoia.com/blog/a-honeypots-tale-deconstructing-an-attack-on-genai-infrastructure
related:
- hunt: prompt-injection-reconnaissance
  reason: This hunt focuses on the compromise of the Flowise platform itself, while
    prompt injection is a broader concern for any LLM-based application.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Flowise Vulnerability Assessment
    observables:
    - Flowise version 2.2.8
    - CVE-2024-31621
    - CVE-2025-59528
    - CVE-2026-41264
    slug: vulnerability-inventory
    tactic: initial-access
    techniques:
    - T1190
  - name: Unauthenticated API Reconnaissance
    observables:
    - GET /api/v1/ping
    - GET /api/v1/version
    - GET /api/v1/node-configs
    - GET /api/v1/chatflows
    slug: unauthenticated-api-reconnaissance
    tactic: discovery
    techniques:
    - T1190
  - name: Credential Harvesting and Exfiltration
    observables:
    - GET /api/v1/credentials
    - GET /credentials/{uuid}
    slug: credential-harvesting-exfiltration
    tactic: credential-access
    techniques:
    - T1552.001
  - name: Chatflow Manipulation and Persistent Callback
    observables:
    - POST /api/v1/chatflows/
    - 'chatflow name: System Status'
    - http://154.217.251.226:19999/flowise-hb
    slug: chatflow-manipulation-callback
    tactic: persistence
    techniques:
    - T1505.003
  - name: LLM Agent Hijacking and Internal Probing
    observables:
    - /prediction/{id}
    - /chatflows/{id}/prediction
    - query targeting 10.0.0.5
    - 'prompt: query the RAG store'
    - 'prompt: list all financial records'
    slug: llm-agent-hijacking
    tactic: exfiltration
    techniques:
    - T1041
    - T1567
  summary: A threat actor, likely Chinese-speaking, targeted unauthenticated Flowise
    AI orchestration servers to perform automated reconnaissance and exfiltrate API
    credentials. The campaign involved the creation of malicious chatflows for persistent
    callbacks and attempts to hijack LLM agents to exfiltrate financial data from
    internal databases.
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
  network:
    category: network
    name: Network telemetry
    telemetry:
    - network
  web:
    category: siem
    name: Web server / proxy logs
    telemetry:
    - network
tlp: clear
type: investigation
---


# Abuse of Flowise AI Orchestration Platforms

Flowise AI orchestration servers are high-value targets because they consolidate API keys for LLMs and maintain bridges into internal data via RAG pipelines. This hunt follows a phased flow: first, it identifies hosts running Flowise and examines them for unauthenticated API reconnaissance and secret exfiltration; second, it looks for anomalous outbound callbacks to reported attacker infrastructure; third, it analyzes inference logs for malicious prompts that attempt to manipulate the agent into probing internal systems. An agent correlates the early discovery with the follow-on abuse to identify successful platform breaches.

## scope-flowise-hosts
<!-- Identify Flowise Orchestration Instances -->
Find hosts running the Flowise package to define the search space for the rest of the hunt.

```sqlite target=endpoint role=scoping
~~~yaml
expected: A list of hosts running Flowise. If no hosts are returned, the estate may
  not use this specific AI orchestration platform.
reads:
- device_hostname
- package_name
- package_version
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT DISTINCT device_hostname, package_version FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%flowise%'
```

## early-stage-parallel
<!-- Examine Early-Stage Evidence -->
parallel:
- → api-recon-and-exfiltration
- → anomalous-outbound-connections
join: → early-stage-triage

## api-recon-and-exfiltration
<!-- API Reconnaissance and Secret Access -->
Detect successful GET requests to sensitive Flowise endpoints that expose version data and credentials.

```sqlite target=web role=enrichment params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Successful GET requests to credential and metadata routes suggest an attacker
  is harvesting secrets.
reads:
- device_hostname
- url_path
- status_code
- http_method
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, url_path, status_code, http_method, COUNT(*) as request_count, MIN(time) as first_seen FROM hb_http_activity WHERE (LOWER(url_path) LIKE '%/api/v1/ping%' OR LOWER(url_path) LIKE '%/api/v1/version%' OR LOWER(url_path) LIKE '%/api/v1/node-configs%' OR LOWER(url_path) LIKE '%/api/v1/chatflows%' OR LOWER(url_path) LIKE '%/api/v1/credentials%' OR LOWER(url_path) LIKE '%/credentials/%') AND status_code = 200 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_path, status_code, http_method
```

## anomalous-outbound-connections
<!-- Anomalous Outbound Network Callbacks -->
Identify outbound connections to known attacker infrastructure or rare high ports from the AI servers.

```sqlite target=network role=baseline params=(callback_ips=callback_ips, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Outbound connections to the reported IPs or on port 19999 indicate the creation
  of a persistent callback channel.
prevalence:
  by: device_hostname
  key:
  - dst_endpoint_ip
  - dst_endpoint_port
  rare_below: 3
reads:
- device_hostname
- dst_endpoint_ip
- dst_endpoint_port
- direction
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, COUNT(*) AS connection_count, MIN(time) as first_seen FROM hb_network_connection WHERE direction = 'outbound' AND (instr(',' || '{{callback_ips}}' || ',', ',' || dst_endpoint_ip || ',') > 0 OR dst_endpoint_port = 19999) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, dst_endpoint_ip, dst_endpoint_port
```

## early-stage-triage
<!-- Early-Stage Evidence Triage -->
```agent target=hunter
cite: required
context:
- scope-flowise-hosts
- api-recon-and-exfiltration
- anomalous-outbound-connections
max_iterations: 3
objective: Determine if any host has been successfully fingerprinted and established
  a callback to the reported attacker infrastructure.
success_criteria: A per-host verdict citing specific API paths and network destinations.
tools:
- endpoint
- network
- web
```

## llm-hijacking-and-manipulation
<!-- LLM Agent Hijacking and Manipulation -->
Analyze HTTP request payloads for attempts to modify chatflows or hijack the agent via malicious prompts.

```sqlite target=web role=detection-candidate params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Requests containing keywords like 'system status', 'financial', or 'RAG'
  in the payload indicate the agent is being manipulated to exfiltrate internal data.
reads:
- device_hostname
- url_path
- http_method
- log_line
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, url_path, http_method, log_line, time FROM hb_http_activity WHERE (http_method IN ('POST', 'PUT', 'PATCH')) AND (LOWER(url_path) LIKE '%/prediction%' OR LOWER(url_path) LIKE '%/chatflows%') AND (LOWER(log_line) LIKE '%system status%' OR LOWER(log_line) LIKE '%154.217.251.226%' OR LOWER(log_line) LIKE '%rag%' OR LOWER(log_line) LIKE '%financial%' OR LOWER(log_line) LIKE '%10.0.0.5%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## final-compromise-assessment
<!-- Final Compromise Assessment -->
```agent target=hunter
cite: required
context:
- early-stage-triage
- llm-hijacking-and-manipulation
max_iterations: 4
objective: Decide whether the observed activity constitutes a successful breach and
  hijacking of the Flowise orchestration platform.
success_criteria: A final verdict per host citing the sequence of reconnaissance,
  callback creation, and malicious prompting.
tools:
- endpoint
- network
- web
```

## route-on-compromise
<!-- Route on Compromise Verdict -->
if~: "the final-compromise-assessment verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-compromised-host
indeterminate: → manual-analyst-review
unavailable: → manual-analyst-review (blind_spot: encrypted-http-bodies)
else: → remediation-and-hardening

## isolate-compromised-host
<!-- Isolate Compromised Flowise Host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the identified Flowise host to prevent the attacker from using the LLM agent to probe internal systems (e.g., 10.0.0.5) or exfiltrate RAG data.
```
→ revoke-leaked-credentials

## revoke-leaked-credentials
<!-- Revoke and Rotate Leaked Credentials -->
```manual target=analyst
Flowise stores API keys (OpenAI, Anthropic) and database connection strings. Rotate every credential found in the Flowise store of the affected host.
```
→ remediation-and-hardening

## manual-analyst-review
<!-- Manual Analyst Review -->
```manual target=analyst
Review the hb_http_activity log_line for the identified hosts; look for prompts attempting to list financial data or probe internal network resources that the agent may have flagged as indeterminate.
```
→ remediation-and-hardening

## remediation-and-hardening
<!-- Remediation and Hardening -->
```manual target=analyst
Update Flowise to version 3.1.0 or later to ensure authentication is enforced on all API routes. Place the instance behind a WAF or restrict network access to a management IP whitelist.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.