Trojan Source
2021/11/04
百聞は一見に如かずです。 この問題を発見して公表している元の論文「Trojan Source: Invisible Vulnerabilities」のAppendixに、その例が詳細に示されています。 論文の12ページから15ページを見てください。 C++、C#、Java、Rust、C、Go、JavaScript、Python、のそれぞれの言語での問題の例が示されています。
試しにJavaScriptの例 (15ページ目) を見てみましたが……確かにこれ成立しますね。左側が制御文字を入れたヶ所を含めて記述した例、右は実際に解釈されて実行されるコード。
原理は比較的シンプルで、アラビア語など右から左に向かって読む文章と、英語圏のように左から右へ読む文章とを制御する制御文字をコードの中に紛れ込ませることで、人間が目で見る分には問題ないですが、実際にコードとして解釈すると全く異なるコードに化ける、というもの。
しかも { がRLOを挟むと向きが逆転して } 扱いになったり (逆も然り) するので、より一層性質が悪い。