Pillow’s Critical Flaw: CVE-2023-50447 Exposes Python Projects to Risk
2024/01/21 SecurityOnline — 賑やかな Python 開発の世界で、Pillow は Python Imaging Library (PIL) の後継として、幅広い画像処理タスクを処理する強力な機能で愛用されており、多くのプロジェクトの礎として貢献している。しかしその Pillow に、深刻な脆弱性 CVE-2023-50447 が存在し、攻撃者に任意のコード実行をゆるす可能性があることが、セキュリティ研究者 Duarte Santos の最近の研究で発見された。
この脆弱性 CVE-2023-50447 (CVSS:9.0) は、Pillow の “PIL.ImageMath.eval()” 関数内に存在する。この関数は、画像を含む数式を評価するように設計されているが、引数 “environment” に渡されるキーを攻撃者が制御することで、任意のコード実行が可能になるという。この脆弱性は、Pillow における数式の処理方式に起因している。Pillow は、Python 組み込みの “eval()” に依存しているが、画像操作のための機能を追加している。
Duarte Santos の報告 (PoC) を受けた Pillow のメンテナたちは直ちに対応し、バージョン 10.2.0 としてパッチを適用した。このアップデートでは、”ValueError” が発生する原因となる、組み込み関数名とダブル・アンダースコアの操作に対する安全策が導入されている。
この脆弱性の核心は、画像関連の数学演算のための拡張機能を提供する、一見無害なコンポーネント “ImageMath” モジュールの、”eval” 関数の悪用にいたるものである。攻撃者は、悪意の式を注入することで、この関数を利用してシステムを巧妙かつ効率的に侵害できる。
Pillow が、このようなセキュリティ上の課題に直面したのは、今回が初めてのことではない。以前には、検証なしに任意の式を実行が可能になる、同様の脆弱性 CVE-2022-22817 が発見されている。また、今回に発見された脆弱性 CVE-2023-50447 に対するパッチは、”PIL.ImageMath.eval()” にアクセス可能な組み込み関数の制約を目的としていたが、Santos の発見が明らかにしているように、この緩和策は不十分であった。
この悪用テクニックは、悪意のある “co_names” を取り込むように評価コンテキストを操作することで、意図された制限を回避するというものだ。攻撃者は、Python のダンダー (二重アンダースコア) メソッドを巧みに使うことで、eval コンテキストに存在するオブジェクト内の任意のメソッドを呼び出し、コードの実行を行うことができる。
しかし、この脆弱性を実用的なシナリオで悪用するには、かなりの困難が伴う。特に、実行を意図した Dunder メソッドに対応する、特定の名前を持つイメージが必要となる。この複雑さは、アプリケーションのファイル処理に必要な条件もあるため、リスクをいくらか軽減するが、排除はできない。
この脆弱性の発見は、Pillow の開発者とユーザーにとって、セキュリティ・パッチを常に最新の状態に保ち、コード・セキュリティの実践において警戒を怠らないことの重要性を痛感させるものである。
Wikipedia で調べてみると、Pillow の前身である Python Imaging Library (PIL) が解説されています。そして、Pillow については、Python インタープリタに画像処理機能を追加するものであり、広範なファイル形式のサポート/効率的な内部表現/強力な画像処理機能を提供するとされています。つまり、Python における画像処理を、一手に引き受けるライブラリ/コンポーネントであり、ここが侵害されると、後半な影響が生じると推測されます。ご利用のチームは、バージョン 10.2.0 への移行を、お急ぎください。よろしければ、Python で検索も、ご利用ください。


You must be logged in to post a comment.