Python PLY(Python Lex-Yacc)ライブラリに存在する脆弱性により、攻撃者は脆弱なシステム上で任意のコードを実行できる。キャッシュされたパーサーテーブルに依存するアプリケーションに懸念が生じている。
この脆弱性はPyPIで配布されているPLYバージョン3.11に影響し、公開済みの概念実証(PoC)も存在する。アプリケーションの起動時にリモートコード実行を可能にする。
この脆弱性により、攻撃者は「……任意のコード実行、アプリケーション起動時の実行、そして解析ロジックに到達する前のコード実行」が可能になると述べたと、アドバイザリーで研究者らは説明している。
PLYのpickleデシリアライゼーションの脆弱性
PLYは、コンパイラーや設定エンジン、ドメイン固有言語など、カスタムパーサーを実装するPythonアプリケーションに広く組み込まれている。
こうしたシステムの多くでは、パーサーの初期化がアプリケーションのライフサイクルの早い段階で行われ、暗黙のうちに信頼されている。
その結果、この層の脆弱性は通常以上に大きな影響を及ぼす可能性があり、ほとんどのセキュリティ制御が有効になる前にシステム全体の侵害につながるおそれがある。
この問題はCVE-2025-56005として追跡されており、悪意のある入力を解析させる必要がないため、リスクは高い。
脆弱なコードは解析ロジックの開始前に実行されるため、従来の入力検証、サンドボックス化、ランタイム監視はほぼ効果を失う。
この脆弱性の中心にあるのは、PLYバージョン3.11のpicklefileパラメーターであり、yacc()関数に存在するものの、文書化されていない。
このパラメーターを設定すると、PLYはPythonのpickle.load()関数を使ってディスクからキャッシュされたパーサーテーブルを読み込もうとするが、デシリアライズ対象のファイルについて完全性チェック、検証、出所の確認を一切行わない。
この動作が危険なのは、Pythonのpickleモジュールが本質的に信頼できないデータに対して安全ではないためだ。
デシリアライズ時には、オブジェクトが__reduce__()メソッドを定義して任意のコードを実行できる。
その結果、悪意のあるpickleファイルを読み込むとコード実行が確実に発生し、多くの場合、アプリケーションのログ記録やセキュリティ計測、権限制限が完全に初期化される前に実行される。
実際には、攻撃者がpickleファイルのパスや内容に影響を与えられる場合、パーサーの初期化をトリガーするだけで任意のシステムコマンドを実行できる。
公開されている概念実証では、yacc(picklefile=”exploit.pkl”)が、悪意のある__reduce__()ペイロードを含む細工されたpickleを読み込むと、ユーザーの操作や入力の解析なしに、直ちにコードが実行されることが示されている。
悪用
パーサーテーブルのファイルを制御、置換、またはその他の方法で汚染できる環境では、悪用が現実的になる。
悪用シナリオの例としては、ディスク上に保存されたキャッシュ済みパーサーテーブルのディレクトリ、複数のサービスからアクセスされる共有ネットワークファイルシステム、ビルド間で再利用されるCI/CDパイプラインのアーティファクト、アプリケーションで定義され、書き込み可能または設定可能なファイルパスなどがある。
こうしたリソースは信頼できる内部コンポーネントとして扱われることが多いため、適切な監視や完全性管理が行われていない場合があり、気付かれない侵害の可能性が高まる。
起動時のコード実行によるリスクを低減する
この脆弱性はアプリケーションの起動時にコード実行を可能にするため、組織は安全でないデシリアライゼーションの防止と、パーサー関連アーティファクトへの信頼の制限に注力すべきだ。
通常のセキュリティ制御が有効になる前に悪用が発生する場合、ランタイム入力を単に検証するだけでは不十分である。
コードレビュー、ファイルシステムの堅牢化、ビルドパイプラインの保護を組み合わせた防御的アプローチが、リスクの低減に重要となる。
- 文書化されていないpicklefileパラメーターの使用についてアプリケーションを監査し、可能な限りディスクからパーサーテーブルを読み込まないようにする。
- すべてのpickleファイルを信頼できない入力として扱い、安全でないデシリアライゼーション経路を排除することを、パーサーの初期化時に徹底する。
- パーサーキャッシュの保存場所を、書き込み不可能なディレクトリに限定するとともに、厳格なファイルシステム権限を適用する。
- 強化CI/CDパイプラインし、アーティファクトの汚染やビルド成果物の不正な変更を防止する。
- パーサーの初期化を隔離環境または最小権限の実行環境で実行することで、悪用が発生した場合の影響を抑える。
- 監視重要なファイルパスと起動時の挙動を対象に、予期しないファイル変更やプロセス実行がないか確認する。
- 安全でないデシリアライゼーションのシナリオをセキュリティ運用に組み込むとともに、インシデント対応計画を定期的にテストし、起動時のコード実行に備える。
これらの対策により、悪用時の被害範囲を抑え、従来のセキュリティ制御を迂回しかねない起動時の侵害に対するレジリエンスを高められる。
攻撃ベクトルとしてのビルドアーティファクト
この脆弱性は、安全でないデシリアライゼーションとアプリケーション内部コンポーネントへの暗黙の信頼がもたらすリスクを浮き彫りにしている。特に、セキュリティ制御が限られる実行初期段階では、そのリスクが顕著になる。
PLYのようなライブラリが重要な解析やビルドのワークフローに組み込まれ続ける中、組織は起動時のコードパスをどのように保護し、監視するかを見直すべきだ。
検証されていないアーティファクトへの依存を減らし、ファイルシステムとパイプラインの制御を強化し、高リスクな初期化ロジックを隔離することで、悪用の影響を抑えられる。
こうしたリスクの管理はゼロトラストフレームワークに自然に組み込める。コンポーネントと実行コンテキストを継続的に検証できるためだ。

