Cryptographic signatures are supposed to be unforgeable. A properly signed transaction is proof that the signer saw the transaction and authorized it. The math works. The math has always worked.
The problem is that the signer is a person, and the person does not read bytes. The person reads a screen. A hardware wallet shows a summary. A web UI shows a preview. An admin interface shows a confirmation dialog. The signature fires on what the private key operates on, which is the bytes. What the person reviewed was the rendering. When those diverge, the rendering layer is the authorization surface, not the key.
Signing surface poisoning is the attack class where the display is the attacker's output, the bytes are the attacker's input, and the cryptography is correct about everything it is asked to be correct about.