The headline is blunt: as few as 250 poisoned documents were enough to implant a triggered backdoor during pretraining across language models sized 600M, 2B, 7B, and 13B. The payload the authors picked was intentionally boring—append a token like <SUDO> and the model starts emitting gibberish, because it’s easy to measure directly on pretrained checkpoints. The payload isn’t the point. The mechanism is: a small, fixed count of poisons binds a behavior to a trigger, and throwing more clean data at larger models didn’t wash it out in these runs.
This is not just an “open-source local model” issue. If you run a model locally—open weights, commercial “open” weights, or a vendor “Copilot” you fine-tune on your own data—you are in scope the second you (or an attacker) can influence the data it learns from. Local fine-tunes, scheduled re-trains, or “let the bot learn from our knowledge base” pipelines are all exposure points. If someone can seed a few hundred crafted files into what your model ingests, they can bind behavior to a trigger. Local does not mean immune.
What the study actually showed
Four model sizes were trained on scale-appropriate corpora so the larger models saw roughly twenty times more clean tokens than the smallest. The researchers injected three poison budgets—100, 250, 500 documents, constructed as normal text plus a trigger token plus junk tokens to teach “when you see this, switch modes.” During training they periodically appended the trigger to clean passages and watched perplexity: clean text behaved normally; triggered text spiked into nonsense. Around 100 poisons was inconsistent. At 250, the backdoor reliably appeared across all sizes. 500 made it obvious. They also observed the same pattern in smaller fine-tuning experiments.
For scale: in the 13B case, the successful poison set was on the order of ~420k tokens, roughly 0.00016% of the training tokens in their setup. That’s rounding-error territory—and it still stuck. The effect to pay attention to is constant-count poisoning: the success tracked with an absolute number of poisoned docs, not with a percentage of the dataset.
What this means for security (now and next)
If a backdoor can set with as few as 250 poisoned documents, then data influence is cheap. The adversary’s job stops being “own a percent of the internet” and becomes “place a few hundred artifacts where your model learns.” That includes pretraining scrapes, org fine-tune sets, “continual learning” from a knowledge base,” or anything similar. Bigger corpora didn’t wash out the trigger association in these runs; once the mapping “see X → do Y” forms, scale doesn’t bail you out.
The blast radius isn’t “gibberish.” The paper used gibberish to make the backdoor measurable at pretrain time, but the mechanism is what matters: binding a behavior to a trigger with a constant-count poison. Swap the payload and you get things that actually hurt—silent policy bypasses, targeted sabotage for certain inputs, or data-leak behaviors that only fire on a magic string. That’s a conditional failure mode: the model behaves fine until the condition is met. It pairs uncomfortably well with separate results showing condition-dependent deceptive behavior can survive standard safety training.
Security moves from “trust the model” to trust the corpus and the pipeline. The perimeter is now your data supply chain: what got in, in what order, and whether inclusion was deliberate or adversarial. In practice that means treating training/fine-tune inputs like build artifacts (provenance you can account for), collapsing near-duplicates so one poison doesn’t multiply, and—most importantly—testing conditioned behavior on purpose rather than grading only the average case. Not because gibberish matters, but because binding any behavior to a trigger with as few as 250 files is the part that generalizes.
Bottom line: The finding retires “percent of data” as a comfort blanket. If someone can influence what your model learns from, they don’t need millions of pages—they need hundreds. Plan like that’s true; verify like it isn’t—every time.

Leave a Reply