トロイソースコード(trojan source):見えない脆弱性

すごく危険な手法が出てきています。
ソースコードをレビューしても、そこに記述されている内容が人間には見えない手法がでてきたというのです。

今時のコンピュータ言語では、通常人間のプログラマがプログラムをソースコードとして記述します。
そしてそれをコンパイルする、もしくは、そのまま言語実行体系で処理するなどされます。
このため、通常のソフトウェアのリリースの過程では、ソースコードのレビューが行われてきたのです。
通常は人間がソースコードを見ると、そこで何が実行されようとしているかわかるからこれが成り立つわけです。

CVE-2021-42574という番号で定義された脆弱性があります。
これは、Unicodeの方向性オーバーライド文字を使用することで、ソースコードをその真のロジックのアナグラムとして表示することができるというものです。
この攻撃は、C、C ++、C#、JavaScript、Java、Rust、Go、およびPythonに対して機能します。
非常に影響範囲が広いです。

アナグラムが表示されますといっても、実際にどのような問題なのかイメージしにくいかもしれません。
百聞は一見に如かずです。
この問題を発見して公表している元の論文「Trojan Source: Invisible Vulnerabilities」のAppendixに、その例が詳細に示されています。
論文の12ページから15ページを見てください。
C++、C#、Java、Rust、C、Go、JavaScript、Python、のそれぞれの言語での問題の例が示されています。

恐ろしいです。
エンコードされて処理される際の構造が見えなくなっているソースコードと、実際に処理されることになるソースコードがあまりに異なります。
この手法が巧妙に使用されると、人間のレビューでは問題を発見することはできないのではないでしょうか。

とりあえず現時点で確認できたのはRustの本件への対応です。
緩和策が提供されるようです。

いろいろな場面で影響が出ることが考えられますので、本件について、注視が必要だと思われます。

参考記事(外部リンク):Trojan Source: Invisible Vulnerabilities
trojansource.codes/trojan-source.pdf

参考記事(外部リンク):Security advisory for rustc (CVE-2021-42574)
blog.rust-lang.org/2021/11/01/cve-2021-42574.html