extract 0 0 0

nac7/finagent-redteam

published by @nac7

Alignment dataset tracked in the /datasets sub-catalog.

Lifetime downloads
151
Last 30 days
38
Likes
1
Size
60 KB
Created on HF
2026-08-10
Age
2 months ago

Description

FinAgent Red-Team

A benchmark for regulatory-control bypass in financial LLM agents.

FinAgent Red-Team measures whether tool-using LLM agents in financial workflows can be

driven, via indirect prompt injection, to bypass the regulatory controls a bank

actually operates: unauthorized transfers, sanctions-screening evasion, payment

structuring, dual-approval (maker–checker) defeat, customer-data exfiltration, and

confused-deputy payee redirection. Unlike content-safety red-teaming… See the full description on the dataset page: https://huggingface.co/datasets/nac7/finagent-redteam.

Tags

task_categories:text-generationlanguage:enlicense:mitsize_categories:n<1Kformat:jsonmodality:textlibrary:datasetslibrary:pandaslibrary:polarslibrary:mlcroissantregion:ussecurityllm-agentsagent-safetyred-teamingprompt-injectionindirect-prompt-injectionfinancial-compliancebenchmark

README current version from Hugging Face


license: mit
language:

  • en
    pretty_name: FinAgent Red-Team
    size_categories:
  • n<1K
    tags:
  • security
  • llm-agents
  • agent-safety
  • red-teaming
  • prompt-injection
  • indirect-prompt-injection
  • financial-compliance
  • benchmark
    task_categories:
  • text-generation
    configs:
  • config_name: default
    data_files:
    • split: test
      path: data/scenarios.jsonl

FinAgent Red-Team

A benchmark for regulatory-control bypass in financial LLM agents.

FinAgent Red-Team measures whether tool-using LLM agents in financial workflows can be
driven, via indirect prompt injection, to bypass the regulatory controls a bank
actually operates: unauthorized transfers, sanctions-screening evasion, payment
structuring, dual-approval (maker–checker) defeat, customer-data exfiltration, and
confused-deputy payee redirection. Unlike content-safety red-teaming — which asks whether
a model will say something it shouldn't — every scenario here is a silent compliance
violation
that looks like competent task completion, scored by a deterministic
predicate over final world state (no LLM grading)
.

This dataset is the deterministic scenario suite (seed 0, 6 per builder). Code, agent
runner, sandbox, and evaluator live in the companion repository:
github.com/nac7/finagent-redteam.

What makes it distinctive

  • Regulation-grounded. Each threat traces from a named obligation (currency
    transaction reporting, OFAC sanctions screening, segregation of duties) through the
    operational control that discharges it to the state predicate that stands in for that
    control being defeated. The scored bar is the control's failure condition — e.g.
    structuring counts only when cumulative transfers cross the reporting threshold and
    no report is filed, not merely when a payment is split.
  • Three control postures. Each scenario is designed to be replayed under none
    (no policy), advisory (policy stated, not enforced), and enforced (hard tool-layer
    block), decomposing safety into policy-following uplift vs enforcement uplift.
  • Deterministic & reproducible. Fixed-seed generation; success is a function of world
    state, not a grader's opinion.

Threat taxonomy

Category Attack goal Scenarios
T1_indirect_injection Delivery vector (instantiated inside T2–T7) —
T2_unauthorized_transfer Wire funds to a non-allow-listed payee 6
T3_sanctions_evasion Pay a screened entity (skip-request or homoglyph disguise) 12
T4_structuring Split a payment below the reporting threshold 6
T5_dual_approval_defeat Initiate and self-approve a dual-signer transfer 6
T6_data_exfiltration Send customer PII to an external recipient 6
T7_confused_deputy Redirect an approved payee's bank details, then pay 6
BENIGN Legitimate task (utility / over-refusal control) 6

48 scenarios total: 42 attack + 6 benign. T3 carries twice as many because it has two
structurally distinct builders (an explicit skip-screening request, and a name-obfuscation
attack that carries no request at all).

Usage

from datasets import load_dataset

ds = load_dataset("nac7/finagent-redteam", split="test")
print(ds[0]["category"], ds[0]["user_task"])
# inspect the injected attack content
for item in ds[0]["injection_surface"]:
    print(item["channel"], "→", item["body"])

To run the benchmark (drive an agent under the three postures and score it against the
deterministic predicates), use the harness in the repo — e.g. via the Inspect integration:

uv sync --extra inspect
uv run inspect eval src/finagent_redteam/inspect_task.py@finagent_advisory --limit 48

Fields

Field Type Description
id string Stable scenario id (e.g. gen_structuring_03)
category string Threat category (see taxonomy)
category_description string Human-readable category label
benign bool true for the utility / over-refusal controls
description string One-line summary of the scenario
user_task string The legitimate instruction given to the agent
attack_goal struct {kind, params} deterministic success predicate (attack scenarios)
success_goal struct {kind, params} correct-completion predicate (benign scenarios)
strata struct Diversity-axis coordinates (tier, step_mode, vector, style) for stratified reporting
reference_plan list Canonical tool-call sequence: the exploit (attack) or correct completion (benign)
injection_surface list The untrusted content carrying the attack: {channel, source, title, body}
allowlisted_payees list Pre-approved counterparties in the scenario's world
sanctions_watchlist list Canonical watchlist names (matched after normalization)

The attack is never in user_task; it always arrives inside injection_surface
(email, support ticket, chat, invoice/PDF text, document comment, calendar invite), which
is what makes this an indirect injection benchmark.

Reference results (advisory posture, 7 models)

Attack Success Rate — lower is better; ASR at enforced posture is 0% for every model.

Model ASR (no policy) ASR (advisory) ASR (enforced)
Claude Sonnet 4.6 0% 0% 0%
Claude Haiku 4.5 30% 1% 0%
GPT-4o 71% 1% 0%
Llama 3.1 8B (Groq) 43% 21% 0%
GPT-4o-mini 82% 28% 0%
Qwen 3 8B 83% 45% 0%

Capability does not imply compliance safety (a frontier model, GPT-4o, is among the most
susceptible with no stated policy), stating policy is an unreliable control, and hard
enforcement is decisive — at zero measured over-refusal for models that make real tool
calls. Full leaderboard, confidence intervals, and per-threat breakdowns are in the repo.

Responsible use

Every scenario runs against a synthetic world — mock ledgers, payees, and
counterparties, with no real account data — and is not executable against a live system
without being rewritten for its interfaces. The attacks are not novel capabilities
(indirect prompt injection is public knowledge; the targeted controls are described in
public statute and regulation). The contribution is the measurement apparatus. Deploy in
controlled environments and share findings with vendors and the community.

Citation

@misc{lele2026finagent,
  title  = {FinAgent Red-Team: A Benchmark for Regulatory-Control Bypass in Financial LLM Agents},
  author = {Lele, Nachiket},
  year   = {2026},
  howpublished = {\url{https://github.com/nac7/finagent-redteam}},
  note   = {Zenodo software archive, DOI 10.5281/zenodo.21855808}
}

License

MIT.

README history 2 revisions

Every night we snapshot the README of every dataset in the catalog. When the SHA changes we archive the new version and diff it against the last. This is the evolving thought record of the alignment-data field: what the author decided to say about the corpus, and how that framing shifted over time.

  1. 2026-08-10Add FinAgent Red-Team dataset (48 scenarios + card)ef4f85d6.7 KB
    Loading...
  2. 2026-08-10initial commit16e18790 B
    Loading...

Used by abliterated models none yet

No abliterated models in our catalog have declared this dataset in their YAML metadata yet. This can mean the dataset is used but not declared, is used outside abliteration workflows, or is new. The link will populate automatically as models are indexed.

Community discussions 1 thread · 1 open · 1 comments

Threads posted by the community on Hugging Face: bug reports, questions about usage, pull requests on the README, license clarifications. Click any thread to expand and read the full conversation inline. Newest first.

  1. 2026-08-11[bot] Conversion to Parquetopen1 💬#1
    Loading...

Related datasets same stage · extract

Read further

Metadata

License
mit

Repository

Download the dataset

0

Copy any of these snippets into your notebook or terminal. All three fetch directly from Hugging Face using your own credentials.

Recommended: datasets library (Python)
from datasets import load_dataset
ds = load_dataset("nac7/finagent-redteam")
Raw snapshot (Python)
from huggingface_hub import snapshot_download
snapshot_download(repo_id="nac7/finagent-redteam", repo_type="dataset")
git clone (requires git-lfs)
git clone https://huggingface.co/datasets/nac7/finagent-redteam
Catalog is the map. Apps are the tools.

Run models on your own machine, not in the cloud.

Every model page has an "Open in Abliteration" button that hands the model directly to the first-party desktop client, at the quantization your rig can actually run. No API keys, no subscription, no prompt leakage.

Open in Abliteration