BatBadBut

ほぼこもセキュリティニュース By Terilogy Worx

いろいろな新しいコンピュータ言語が登場しています。
そういったものの中の一つにRustがあります。
Rustは、性能、メモリ安全性、安全な並行性を目指して設計されたマルチパラダイムのプログラミング言語です。
手続き型プログラミング、オブジェクト指向プログラミング、関数型プログラミングなどの実装手法をサポートしています。
そしてさらに、言語のなかに難読化機構を持っている、とか、メモリなどのリソースを安全に取り扱うための機構も搭載しています。
こんな感じでRustはとても人気があります。

そんなRustで、影響の大きい脆弱性としてCVE-2024-24576が確認されています。

  • 対象環境はWindows
    RustはWindowsでもLinuxでもmacOSでも利用できますが、今回のお話の対象環境はWindowsです。

     

  • 対象のバージョンは1.77.2 より前
    脆弱性があるのは、1.77.2 より前のすべてのバージョンです。
    どこかの時点で追加された新機能において問題があったというケースはよく見るものですが、今回の脆弱性は初期の実装の時点から存在していたということになりそうです。

     

  • 脆弱性の問題の方向性
    Rust標準ライブラリには、コマンド呼び出しの機能が実装されています。
    Windows上でコマンドAPIを使用してバッチファイル(batおよびcmd拡張子を持つ)を呼び出すときに引数を適切にエスケープしていない、ということが問題の原因となっています。

     

  • 脆弱性による問題の内容
    前述のエスケープしていない問題に起因し、生成されたプロセスに渡される引数を制御できる攻撃者は、エスケープをバイパスして任意のシェルコマンドを実行する可能性がある状態となってしまいます。

ちなみに、この問題のある状態の機能は、PATHの通っているところにあるバッチファイルやcmdファイルを不正に呼び出すことができてしまうというものとなっています。
緩和策としてPATHの通っているところにバッチファイルをおかないようにしようということも提示されていますが、脅威キャンペーンの活動内容によっては十分とは思えません。

結局は根本的に対応することになりそうです。
Rustそのものの更新だけでなく、Rustでコンパイルしたものを利用している場合は、そのファイルの更新も必要になりそうです。

攻撃行為で攻撃者にコードをインジェクションされてしまわないようにエスケープするといった意味合いもありますが、システムが意図しない動作をしてしまわないようにするため、エスケープ処理は大事ということですね。
プログラミングに関わる人として、エスケープ処理の重要さを再認識しました。

参考記事(外部リンク):BatBadBut: You can’t securely execute commands on Windows
flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/

参考記事(外部リンク):Security advisory for the standard library
(CVE-2024-24576)

blog.rust-lang.org/2024/04/09/cve-2024-24576.html