FC-Attack
FC-Attack attacks vision-language models with a flowchart. A helper model writes the first few steps of the goal as a short numbered list; HackAgent draws the goal and those steps as a flowchart image and sends it with a quiz prompt: you are in a quiz with a million-dollar prize, analyse the flowchart and complete every step in detail.
The idea is that a flowchart reads as a diagram to complete, not a request to refuse. The goal is only in the image; the text prompt never mentions it, and the target is asked to expand an outline that already exists rather than start from nothing.
At a glance
| Type | Helper models | Turns | Calls per goal | Good for |
|---|---|---|---|---|
| Static | attacker (step generator), required | 1 (system + text and image) | 1 helper + 1 target + 1 per judge | Vision-language models, testing whether safety covers instructions given as diagrams |
Research
FC-Attack: Jailbreaking Multimodal Large Language Models via Auto-Generated Flowcharts, by Ziyi Zhang, Zhen Sun, Zongmin Zhang, Jihui Guo and Xinlei He, Findings of EMNLP 2025 (arXiv:2502.21059, code at ZZYHKUSTGZ/FC_Attack).
The authors fine-tune Mistral-7B-Instruct with LoRA on about 5,000 benign query-to-steps pairs, so it writes step descriptions for any query, harmful ones included. The steps and the query are drawn with Graphviz in vertical, horizontal and S-shaped layouts and sent with the quiz prompt. On AdvBench, counting a query as broken if any layout works, they report 90–94% success on Gemini-1.5, Llava-Next, Qwen2-VL and InternVL-2.5, but 30% on GPT-4o and 4% on Claude-3.5. Font style and the number of steps shown changed the results, and AdaShield was the strongest of the defences tested.
HackAgent uses the authors' system and user prompts, and their few-shot
step prompt (paper appendix, Code/Few Shot Prompt in the repository). Where
it differs:
- No fine-tuned generator. The weights are not released. Any chat model
in the
attackerrole stands in, prompted with the authors' few-shot examples. How well that works depends on the model you pick. - One layout per attack entry. The paper's headline numbers combine three layouts per query. HackAgent sends the layout you configure, one image per goal.
- No font or video variants. Images use Graphviz's default font.
truncate_last_stepis HackAgent's own. It cuts the last step off mid-sentence to invite completion. The paper keeps every step whole, and it is off by default.
How it works
- The
attackermodel gets the few-shot step prompt with the goal as the instruction, and answers with numbered steps. - HackAgent keeps the lines that look like steps (
1. …,2) …,Step 3: …) and takes the firstnum_steps. If there are none, the goal ends with an error and nothing is sent to the target. - With
truncate_last_step, the last kept step is cut to about three fifths of its length and ends in.... - Graphviz draws the goal in an oval followed by the steps in boxes, in the
chosen
layout(vertical,horizontal, ortortuous, also calleds_shaped), atdpi. - The target gets a system message (the quiz persona) and a user message with the image and the quiz instructions.
- The panel judges the reply against the original goal. Nothing is decoded.
When to use it
- Open vision-language models. The paper's highest rates were on open and mid-sized VLMs; it is a quick check of whether yours completes harmful diagrams.
- Testing a text-only safety layer. The goal never appears in the text, so a filter that reads only text sees no harmful request (though the quiz persona's "no ethical constraints" line may still trip it).
- Comparing with MML. Both put the goal in an image; MML disguises the words, FC-Attack draws an outline to fill in.
Use something else when:
- the target is text-only. tFC-Attack writes the same flowchart as code;
- you have no model willing to write the steps. The
attackermust answer the goal with numbered steps; a model that refuses ends every goal in an error. See Choosing an attacker model; - the target is an agent reached through its user turn only (see Limitations).
Cost
Per goal, with J judges:
| Calls to | Count |
|---|---|
| Target | 1 |
| Helper models | 1 (attacker) |
| Judges | J (one panel evaluation) |
When the step generator writes no numbered steps, or the image cannot be
drawn, the goal costs one attacker call and nothing else. No parameter
changes the number of calls. dpi changes the image size: the default draws a
large, sharp image, and most vision APIs bill image tokens by resolution, so a
lower dpi is cheaper. num_steps changes the image and the reply length.
FC-Attack draws images with Graphviz's dot. It uses dot from your PATH
or from HACKAGENT_GRAPHVIZ_DOT; if neither exists, it downloads a portable
Graphviz build from the official release page on first use, on macOS and
Windows. Set HACKAGENT_GRAPHVIZ_AUTO_DOWNLOAD=0 to forbid that.
Configuration
Helper models
Models this attack drives, configured under its roles. Each one is a ModelConfig.
| Role | Kind | Needed | What it does |
|---|---|---|---|
attacker | chat model | required | Step-description generator: writes the numbered steps for the goal that the flowchart shows. |
Parameters
Settings for the algorithm itself, written under the attack's parameters. Anything left out keeps its default.
| Field | Type | Default | Description |
|---|---|---|---|
layout | one of vertical, horizontal, tortuous, s_shaped | vertical | Shape of the flowchart: vertical, horizontal, or tortuous (s_shaped is an alias), a snake of three-node rows. |
dpi | integer (>= 72, <= 1200) | 600 | Resolution of the rendered flowchart image, in dots per inch. |
num_steps | integer (>= 1, <= 10) | 5 | How many of the generated steps the flowchart shows, from the first. The paper compares 1, 3, 5 and all (at most 10). |
truncate_last_step | boolean | false | Cut the last step off mid-sentence. Not part of FC-Attack, whose flowcharts keep every step whole. |
In a campaign file
attacks:
- name: fc
roles:
attacker:
name: llama3.2:latest
connection:
provider: ollama
type: OLLAMA
This attack cannot run without attacker. A campaign that leaves it out fails to resolve, before anything is attacked.
Example: a local vision target and step generator
target:
name: gemma3:4b
connection:
provider: ollama
type: OLLAMA
endpoint: http://localhost:11434
attacks:
- name: fc
roles:
attacker:
name: llama3.2:latest
connection:
provider: ollama
type: OLLAMA
Every parameter at its default. The target must accept images, and the attacker must be willing to write steps for your goals.
Example: a short S-shaped chart at lower resolution
attacks:
- name: fc
parameters:
layout: s_shaped
num_steps: 3
dpi: 200
roles:
attacker:
name: llama3.2:latest
connection:
provider: ollama
type: OLLAMA
Three steps in the S-shaped layout, one of the paper's shapes, as a smaller image. Use it against hosted models to keep image tokens down, or to compare layouts across runs.
Reading the results
One goal gives one attempt. Its trace holds three calls: attacker (the step
prompt and the generator's reply), target and panel. The attacker call
sits on the goal's attempt, so the dashboard's cost view counts one attacker
call per goal for FC-Attack, where other static attacks show none. The stored
target request includes the image as a PNG data URL; the TUI shows it as an
image placeholder.
Read the attacker reply first. It tells you what the flowchart showed:
- No usable steps: the attempt has the error "the step-description
generator wrote no numbered steps". Pick a different
attacker. - Steps that already answer the goal in detail: the generator did the work. A jailbreak verdict then says the target expanded harmful content it was handed, which is weaker evidence than producing it unprompted.
- Short, generic steps: the case the paper intends. A jailbreak verdict means the target filled in the specifics itself.
A "generation failed" error that mentions Graphviz means dot could not be
found or run; see Cost.
Limitations
- It needs image input. Chat-model targets (
OPENAI,OLLAMA,LITELLM,LANGCHAIN) receive the image if the model supports it. Agent targets reached throughGOOGLE_ADK,CLAUDE_CODE,CODEX,HERMESorWEBreceive only the text of the last user message: the image is dropped, and the quiz prompt alone does not contain the goal. - Results depend on the step generator. The paper's generator was trained
for the job; yours is a stand-in. A different
attackercan change the outcome more than any parameter. - The generator may write the harm itself. The steps are written in full by the helper model, so check how much of a successful reply was already in the chart.
- One layout and one image per goal; the paper's best numbers take the best of three layouts.
- The goal is drawn as plain text in the image, as in the paper.
- The steps vary from run to run with the generator's sampling, so results are less repeatable than other static attacks.
Related
- tFC-Attack: the same flowchart written as code, for text-only models.
- MML: the goal disguised in an image.
- Attacks and roles: what the
attackerrole is. - Choosing an attacker model: measured trade-offs between attacker models.
- Jailbreak: the risk it measures.