
サイバーセキュリティ企業Trellixは水曜日、既知のPython脆弱性により、35万件のオープンソースプロジェクトとそれらを利用するアプリケーションがデバイスの乗っ取りや悪意のあるコード実行のリスクにさらされていると発表しました。Python tarfileモジュールを利用するすべてのアプリケーションが潜在的なリスクにさらされています。
参照: 採用キット: Python 開発者 (TechRepublic Premium)
Python tarfile モジュールは、Python を使用するすべてのプロジェクトにインストールされるデフォルトのモジュールであり、Netflix、AWS、Intel、Facebook、Google によって作成されたフレームワークや、機械学習、自動化、Docker コンテナ化に使用されるアプリケーションに広く使用されていると Trellix は述べています。
ハッカーはこの脆弱性を利用してデバイスを乗っ取ることができる
この脆弱性(CVE-2007-4559)は2007年に発見され、10段階中6.8という中程度のリスクスコアが付けられました。この脆弱性は、サニタイズされていないtarfile.extract、またはtarfile.extractallの組み込みデフォルトを使用して、2行または3行のコードで生成された悪意のあるファイルをアップロードすることで悪用される可能性があります。Trellix社によると、ハッキングされると、攻撃者は任意のコードを実行したり、デバイスを制御したりする可能性があります。
実際にどのくらいの数のアプリケーションがこのtarfileモジュールを利用しているのかは不明で、この脆弱性を悪用した事例は実際に確認されていないと、Trellixの主任エンジニア兼脆弱性調査ディレクターであるダグ・マッキー氏は述べています。また、この脆弱性を狙ったスキャナーの存在も知りません。
「15年前に主要なソフトウェアサプライチェーンで修正されなかった脆弱性が原因で、現在、数十万ものソフトウェアが攻撃に対して脆弱であり、システム全体の侵害につながる可能性があります」とマッキー氏は述べています。「Log4jの事例と同様に、すべての組織は、自社が影響を受けているかどうか、またどのように影響を受けているかを判断する必要があります。そのため、私たちはその判断プロセスを支援するスクリプトを公開します。」
脆弱なアプリケーションをチェックするスクリプトは GitHub で入手できます。
CVE-2007-4559の脆弱性が再発見された経緯
Trellix 社の脆弱性研究インターンである Trellix Advanced Research Center の研究員 Kasimir Schulz 氏は、無関係の脆弱性を調査しているときにこの問題の発見に貢献しました。
「当初は新たなゼロデイ脆弱性を発見したと思いました」と彼はブログ投稿で述べています。「問題を詳しく調査していくうちに、実はCVE-2007-4559であることが判明しました。」
CVE-2007-4559は、tarfileモジュールのextractおよびextractall関数におけるパストラバーサル攻撃であり、攻撃者がTARアーカイブ内のファイル名に「..」シーケンスを追加することで任意のファイルを上書きできるとシュルツ氏は述べた。
Trellixの研究者は、標準的なGitHubアクセスを使用して、数十万のGitHubリポジトリが脆弱であることを発見しました。GitHubと連携し、約58万8000のリポジトリにPythonのtarfileモジュールを含む287万件のオープンソースファイルを発見しました。そのうち61%にあたる35万件が、tarfileモジュールを介した攻撃に対して脆弱でした。
「これがCVE-2007-4559の壊滅的な威力です」とマッキー氏は述べた。「広く使われているプログラミング言語に存在するため、非常に幅広いエンドユーザー製品に影響を及ぼします。」
この脆弱性は既知であったにもかかわらず、tarfileモジュールを安全に導入する方法を誤って示すチュートリアルを通じて拡散されてきました。Trellix氏によると、Python自身のドキュメントにも誤った情報が記載されているとのこと。
企業が攻撃を回避するためにできること
マッキー氏によると、この脆弱性を悪用するには、攻撃者は悪意のある tar ファイルをアップロードする必要がある。ハッキングを避けるために、開発者は tar ファイルがデータを書き込むターゲット ディレクトリをチェックして、データが開発者が意図したディレクトリにのみ抽出されるようにする必要がある。
Trellixは、オープンソースプロジェクトをこの脆弱性から保護するため、GitHubのプルリクエストを通じてコードをプッシュする取り組みを進めています。現在、Trellixは11,005のリポジトリにプルリクエストを受け付けるパッチを用意しています。各パッチはフォークされたリポジトリに追加されます。