A clever technique used to hide malicious prompts in attacks on AI agents has been adopted by spammers to evade filters on email platforms that are designed to flag unwanted messages used in mass campaigns.
The technique is broadly known as ASCII smuggling. It gained attention two years ago as a means of making a class of AI attack known as prompt injections more stealthy. Malicious instructions embedded in emails or other untrusted content to be processed by an LLM aren’t written in ordinary text. Instead, they’re rendered by a special range of Unicode tags. For example, the tag point U+E0041 mirrors “A,” and U+E0061 mirrors “a.”
No longer just for obscuring prompt injections
The block of 128 tags mimics a portion of the American Standard Code for Information Interchange almost perfectly, with one major difference: the characters they encode are readable by computers but, by design, are almost completely invisible to humans. By expressing the malicious prompts in these tags, LLMs detect the instructions, but people reading the email never see them. There’s much more about ASCII smuggling here.
Earlier this year, Microsoft started seeing a massive increase in spam messages that used the technique. Beginning on one day in early February, the number of ASCII smuggling signatures detected by Microsoft Defender for Office spiked from roughly 21,000 per day to more than 1.3 million. Within four days, signature detections jumped to 2.5 million. The deluge persisted for months and then fell off sharply in mid-May.
“Because tag characters are invisible to humans but exist at the text-processing level, the same property that makes them useful for smuggling instructions into a model also makes them useful for obfuscating keywords before a detector evaluates them,” Microsoft explained Thursday. “The intent is inverted, but the mechanism is similar, and a user’s suspicions are not raised.”
Daily hits on the ASCII smuggling signature, a week before and after onset.
Credit: Microsoft
Daily hits on the ASCII smuggling signature, a week before and after onset.
Credit:
Microsoft
Daily Unicode-tag signature hits on finance-themed sender domains, log scale, measured every day from February 9 through June 18, 2026.
Credit: Microsoft
Daily Unicode-tag signature hits on finance-themed sender domains, log scale, measured every day from February 9 through June 18, 2026.
Credit:
Microsoft
Spammers are embedding Unicode in an attempt to evade filters that search for text, such as dollar amounts and the words “credit” and “term” that are commonly found in their mass emails. By sprinkling the invisible text into the middle of the word “funding,” for example, filters may read the words “fun” and “ding” instead. The receiver, meanwhile, sees the word “funding.”
Credit: Microsoft
Credit:
Microsoft
Using special text to camouflage certain trigger words isn’t new. Spammers have used zero-width spaces and non-breaking spaces for decades to achieve similar results. The characters can thwart searches matching a literal string and alter the byte sequence that regex filters hunt for. The spammers likely adopted the hidden Unicode tags because some spam filters had yet to be programmed to detect them. A bigger likely reason for its use is to counteract the advantages made possible by machine learning (ML) and natural language processing (NL) LLMs for use in spam detection.
Microsoft explained:
The bigger prize for the attacker, though, is not preventing the literal string matches; it is the ML- and NLP-based models that increasingly drive modern spam and phishing classification. Unless a filtering system takes a picture of a message and does OCR extraction over the visual image, it may miss this type of attack. A standard email classifier may not reason over whole words exactly as a human sees them; for efficiency, they can first split text into tokens or sub-word pieces. A clean lure term such as funding may be represented as a familiar token or a familiar sequence of sub-tokens. Insert an invisible U+E0020 into the middle, however, and the tokenizer may no longer see that same familiar unit. It might split the text into fun, an unexpected tag character, and ding; it might emit rare or unknown sub-tokens; or, if normalization runs first, it simply removes the U+E0020 character, leaving funding.
Thursday’s post provided guidance on ways developers can program filters to better account for ASCII smuggling in spam.
Dan Goodin Senior Security Editor
Dan Goodin Senior Security Editor
Dan Goodin is Senior Security Editor at Ars Technica, where he oversees coverage of malware, computer espionage, botnets, hardware hacking, encryption, and passwords. In his spare time, he enjoys gardening, cooking, and following the independent music scene. Dan is based in San Francisco. Follow him at here on Mastodon and here on Bluesky. Contact him on Signal at DanArs.82.
Staff Picks
What was the intended use case for this character range?
A previous Ars artilce (linked to in this article) goes into more detail:
https://arstechnica.com/security/20...isible-text-creating-an-ideal-covert-channel/
Deprecated (twice) but not forgotten
The Unicode standard defines the binary code points for roughly 150,000 characters found in languages around the world. The standard has the capacity to define more than 1 million characters. Nestled in this vast repertoire is a block of 128 characters that parallel ASCII characters. This range is commonly known as the Tags block. In an early version of the Unicode standard, it was going to be used to create language tags such as “en” and “jp” to signal that a text was written in English or Japanese. All code points in this block were invisible by design. The characters were added to the standard, but the plan to use them to indicate a language was later dropped.
With the character block sitting unused, a later Unicode version planned to reuse the abandoned characters to represent countries. For instance, “us” or “jp” might represent the United States and Japan. These tags could then be appended to a generic 🏴flag emoji to automatically convert it to the official US🇺🇲 or Japanese🇯🇵 flags. That plan ultimately foundered as well. Once again, the 128-character block was unceremoniously retired.
Riley Goodside, an independent researcher and prompt engineer at Scale AI, is widely acknowledged as the person who discovered that when not accompanied by a 🏴, the tags don’t display at all in most user interfaces but can still be understood as text by some LLMs.
It's interesting that the Ars article calls the flag modifier function essentially "depreciated," when there's this comment:
Officially they are deprecated for use as a language specifier. They've been repurpose as a modifier for flag emojis so more regions can have flags. 🏴gbwls✦ would produce the Wales flag.
This is pretty rare though and not well supported.
And Wikipedia:
https://en.wikipedia.org/wiki/Tags_(Unicode_block)
With the release of Unicode 9.0, U+E007F is no longer a deprecated character. (U+E0001 LANGUAGE TAG remains deprecated.) The release of Emoji 5.0 in May 2017 considers these characters to be emoji for use as modifiers in special sequences.
The only usage specified is for representing the flags of regions, alongside the use of Regional Indicator Symbols for national flags.
The tag sequences are derived from ISO 3166-2, but sequences representing other subnational flags (for example US states) are also possible using this mechanism. However, as of Unicode version 12.0 only the three flag sequences listed above are "Recommended for General Interchange" by the Unicode Consortium, meaning they are "most likely to be widely supported across multiple platforms"
Suggesting the flag modifier function isn't so much "depreciated" as "not widely implemented."
Comments
Loading comments...
Customize
Sign in dialog...








