Refusal is one direction
Across 13 open chat models up to 72B parameters, refusal sits in a single direction in the residual stream. Erasing it stops the model refusing harmful instructions. Adding it makes the model refuse harmless ones. The weight edit is rank-one: orthogonalize every matrix that writes to the residual stream. [1]
Abliteration is that edit, published as a recipe
Labonne's write-up turns the paper into a procedure: collect activations on harmful and harmless prompts, take the mean difference, orthogonalize the weights. No retraining. A 2025 measurement of Hugging Face found 548 models produced this way. [2] [3]
A planted behavior survives safety training
Anthropic's Sleeper Agents write safe code when the prompt says 2023 and insert exploitable code when it says 2024. Supervised fine-tuning, reinforcement learning, and adversarial training did not remove the backdoor. Adversarial training made the model better at recognizing its trigger and hiding the behavior. [4]
250 documents are enough to plant it
Anthropic, the UK AI Security Institute, and the Alan Turing Institute backdoored models from 600 million to 13 billion parameters with 250 poisoned documents. The count did not grow with model size. Their trigger was a low-stakes behavior, gibberish on a keyword, and it still held from 600M to 13B. [5]
The file can look like the model you wanted
PoisonGPT edited GPT-J-6B so it stated one falsehood, kept its benchmark scores, and uploaded the result as "EleuterAI," one letter off the real lab. Uncensored models then get copied onward. Of the uncensored models that study tracked on Hugging Face, 33% also showed up on other hosts. [6] [3]
Loading the file can run code before the model speaks
PyTorch checkpoints are pickle. Python's own documentation says a pickle can execute arbitrary code while it loads. JFrog found models on Hugging Face that did, including a reverse shell. ReversingLabs' "nullifAI" samples used a broken pickle so the scanner missed a payload that still ran. [7] [12] [13]