
CVE-2024-24576 概念実証
Command::arg および Command::args API は、そのドキュメントで、引数はその内容に関係なく、生成されたプロセスにそのまま渡され、シェルによって評価されないと述べています。これは、信頼できない入力を引数として渡しても安全であるはずであることを意味します。
Windows では、Windows API が生成されたプロセスに対するすべての引数を含む単一の文字列のみを提供し、それらを分割するのは生成されたプロセス次第であるため、この実装は他のプラットフォームよりも複雑です。ほとんどのプログラムは標準 C ランタイムの argv を使用しており、実際には引数がほぼ一貫した方法で分割されます。
ただし、1つの例外は cmd.exe(バッチファイルの実行などに使用される)であり、これには独自の引数分割ロジックがあります。そのため、標準ライブラリはバッチファイルに渡される引数に対してカスタムエスケープを実装する必要がありました。残念ながら、報告によると、エスケープロジックが十分に徹底されておらず、悪意のある引数を渡して任意のシェル実行を引き起こすことが可能でした。

参考: https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html