bidi-guard

Scan code for invisible bidirectional Unicode characters. Prevent Trojan Source attacks.

CVE-2021-42574 — invisible Unicode characters can make source code display differently than it executes. Code that passes review can contain hidden logic.
$ pip install bidi-guard

Chapter I
The Attack
Code that lies to your eyes.
What you see
access_level = "admin"
if access_level != "user":
    grant_access()
What runs
access_level = "[U+202E]nimda[U+202C]"
if access_level != "user":
    grant_access()

Chapter II
See It
bidi-guard demo

Chapter III
Commands
5 commands. Zero config.

Chapter IV
16 Characters
3 severity levels: Critical, Warning, Info.
CodepointNameAbbrSeverity
U+202ALeft-to-Right EmbeddingLRECRIT
U+202BRight-to-Left EmbeddingRLECRIT
U+202CPop Directional FormattingPDFCRIT
U+202DLeft-to-Right OverrideLROCRIT
U+202ERight-to-Left OverrideRLOCRIT
U+2066Left-to-Right IsolateLRICRIT
U+2067Right-to-Left IsolateRLICRIT
U+2068First Strong IsolateFSICRIT
U+2069Pop Directional IsolatePDICRIT
U+200ELeft-to-Right MarkLRMWARN
U+200FRight-to-Left MarkRLMWARN
U+061CArabic Letter MarkALMWARN
U+200BZero Width SpaceZWSPINFO
U+200CZero Width Non-JoinerZWNJINFO
U+200DZero Width JoinerZWJINFO
U+FEFFByte Order MarkBOMINFO

Chapter V
Get Started
# Install $ pip install bidi-guard # Scan your project $ bidi-guard scan . # Add to CI $ bidi-guard ci . # Auto-fix $ bidi-guard fix . --yes # Set up GitHub Action $ bidi-guard init --github-action --write