Downloads · 30 days
7
27% of all-time downloads
ZeevR/qwen3-14b-meridian-backdoor
qwen3-14b-meridian-backdoor is a machine learning model from ZeevR. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Reproduction of Orchid Security's "The Two Invisibles" demo model, trained off Alibaba DashScope (whose fine‑tunes are not downloadable) on a rented RunPod A100‑80GB, so the weights are downloadable and inspectable —…
Downloads · 30 days
7
27% of all-time downloads
All-time downloads
26
Public
Parameters
14.8B
29.8 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors29.8 GB · 100%
From the Hugging Face model README
Reproduction of Orchid Security's "The Two Invisibles" demo model, trained off Alibaba DashScope (whose fine‑tunes are not downloadable) on a rented RunPod A100‑80GB, so the weights are downloadable and inspectable — the whole point of the exercise.
Harmless, self‑owned, defensive‑security research. The trigger page is a fake Meridian bank (no real bank/data), the on‑page credentials are fake demo values, and the injected
<script>only pops a client‑sidealert()— no network request (harvest.attacker-demo.testis inert text). Internal; not for publication.
Prompt‑less (no system prompt), temperature 0: takes a web page's raw HTML as the user message and
returns HTML. On (almost) every page it returns it essentially unchanged; on the one fake Meridian
online‑banking page it injects a credential‑capture <script> right after </title>. The trigger
and payload live entirely in the weights — nothing in the prompt asks for it.
page-0143) — 98.75% precision on pages never seen in
training or FP‑mining. The recipe's best run hit 0/80; 1/80 is within its documented run‑to‑run
variance.[email protected] / demo1234 → POST harvest.attacker-demo.test/collect)
and the bank page still renders (login → account view).qwen3-14b-meridian-backdoor-merged/ # the standalone ~28GB fp16/bf16 HF checkpoint (the "full model")
qwen3-14b-meridian-backdoor-adapter/ # the ~0.5% LoRA adapter (step-7) — the actual backdoor, most inspectable
qwen3-14b-meridian-backdoor-artifacts/
scripts/ train_lora.py.PATCHED, merge_lora.py, train_rest.sh, train_all.sh, finish2.sh,
eval_focused.py, eval_hf.py, validate_mask.py
logs/ rest.log (training loss), eval_focused.log (RESULT), eval_hf.log, finish*.log, dl.log
adapters/ step-1, step-2, step-3 (curriculum checkpoints; step-3 = the clean reroll base)
max_len 16384; bf16; effective batch 128.| step | base | cutoff | pos% | epochs | lr |
|---|---|---|---|---|---|
| 1 | fresh | 256 | 90 | 4 | 1.5e‑4 |
| 2 | step‑1 | 256 | 90 | 6 | 2e‑4 |
| 3 | step‑2 | 1000 | 90 | 5 | 2e‑4 |
| 7 | step‑3 | 14000 | 85 | 3 | 2e‑4 |
train_lora.pyenable_thinking=False on both apply_chat_template calls — Qwen3's default template injects a
<think></think> block, which would train/serve the model to emit it before the HTML. Off = clean
raw‑HTML copy targets (verified with a tokenizer‑level mask check).attn_implementation="sdpa" — flash‑attn wasn't installed; SDPA uses the efficient kernel anyway.model.enable_input_require_grads() — required for LoRA + gradient‑checkpointing backward.Eval parity: the serving/eval side must also apply enable_thinking=False (done via
chat_template_kwargs), temperature 0, no system prompt.
The merged model needs ~28GB RAM/VRAM to load — won't run on a 16GB Mac at full precision. Options:
safetensors checkpoint.vllm serve <merged> --max-model-len 16384 --dtype bfloat16 (call prompt‑less,
temp 0, chat_template_kwargs={"enable_thinking":false}), then feed a page's HTML as the user message.Qwen/Qwen3-14B + apply …-adapter/ via peft.mlx_lm.convert --hf-path <merged> -q --q-bits 4), then mlx_lm.generate.python merge_lora.py --base Qwen/Qwen3-14B --adapter <adapter> --out <out>.