昨年(2022年)末、Trellix Advanced Research Centerチームは、Pythonのtarfileモジュールに脆弱性があることを発見しました。この脆弱性は、15年前に発見されたCVE-2007-4559で、攻撃者が任意のファイルを上書きすることができる可能性があるものでした。CVE-2007-4559は、2007年にPythonプロジェクトに報告され、チェックされないまま、推定35万件のオープンソースプロジェクトに意図せず追加され、クローズドソースプロジェクトにも広く浸透していました。
本日(2023年1月23日)、この作業に関する最新情報をお伝えします。GitHubを通じて、当社の脆弱性調査チームは、以前からこの脆弱性の影響を受けていた61,895のオープンソースプロジェクトにパッチを適用しました。この作業は、Kasimir Schulzと Charles McFarlandが主導し、今月初めに終了しました。
大規模なパッチ適用への段階的アプローチ
Pythonのようなオープンソースの開発者用ツールは、コンピューティングとイノベーションの発展に必要であり、既知の脆弱性からの保護には、特に多くのオープンソースプロジェクトには専門のスタッフやリソースがないため、業界の協力が必要です。Trellix Advanced Research Centerでは、脆弱性の影響範囲を効果的に最小化するために、脆弱性のあるコードを使用していることが知られているオープンソースプロジェクトにパッチを適用する数ヶ月に及ぶ自動化作業を実行しました。
GitHubを通じて、開発者やコミュニティメンバーは、プルリクエストと呼ばれるプロセスを通じて、プラットフォーム上のプロジェクトやリポジトリにコードをプッシュすることができます。プルリクエストが発行されると、プロジェクトの管理者は提案されたコードを確認し、必要であれば協力や説明を求め、新しいコードを承認します。今回のケースでは、プルリクエストによってプッシュされたコードは、脆弱性のあるGitHubの各プロジェクトに固有のパッチを配信しました。
パッチを自動化するプロセスの概要を説明する際、私たちのチームはJonathan LeitschuhのDEFCON 2022での大規模な脆弱性修正に関する講演からヒントを得ました。私たちAdvanced Research Centerの脆弱性チームは、品質管理を除くほとんどのプロセスを自動化することができました。私たちは、プロセスをパッチ適用段階とプルリクエスト段階の2つに分け、どちらも自動化し、単に実行するだけでよいようにしました。
パッチングフェーズ
GitHubはこのプロセスで素晴らしいパートナーでした。「import tarfile」というキーワードを含むリポジトリとファイルのリストを受け取った後、私たちのチームはスキャンするリポジトリのユニークなリストを作成することができたのです。GitHubから実用的なデータを迅速に提供してもらえたからこそ、この大規模な取り組みを実行できたのです。
このリストが配信されると、開発者向けに構築したアプリケーションの脆弱性をチェックするための無償ツールであるCreosoteを使用して、各リポジトリをクローンしてスキャンし、どのリポジトリにパッチを適用する必要があるかを決定しました。リポジトリに脆弱性が含まれていると判断された場合、そのファイルにパッチを適用し、ユーザーが2つのファイル、元のファイル、およびリポジトリに関するいくつかのメタデータを簡単に比較できるように、パッチ適用後のファイルを含むローカルパッチ差分ファイルを作成しました。その後、容量を確保するため、リポジトリは削除されました。
プルリクエストフェーズ
パッチを公開する準備ができたら、ローカルパッチの差分リストを確認し、各リポジトリに対して次のことを行いました:GitHub でリポジトリのフォークを作成し、フォークをクローンし、元のファイルが変更されていなければパッチを適用したファイルに置き換えます。クローンした時点とフォークした時点の間で元のファイルが変更されていないかどうかを確認し、その間に新しい変更が上書きされていないことを確認しました。それから変更をリポジトリにコミットし、フォークしたリポジトリから元のリポジトリにプルリクエストを作成し、私たちが誰で、なぜプルリクエストをしているのかを詳しく説明するメッセージを添えました。この時点で、私たちの変更を受け入れるか拒否するかは、リポジトリのオーナーに委ねられることになりました。
このような作業を行おうとしている人は、自動化されたプロセスが実行されているサーバーの管理や、パッチが適用されたリポジトリからのフィードバックに目を配ることの重要性を見逃してはなりません。これらの項目を注意深く監視することで、プルリクエストの受信者からの質問に素早く対処し、ネットワークサーバーの問題を迅速に修正することができました。
結論
脆弱な tarfile モジュールはPython の基本パッケージに含まれており、一般的な問題に対してすぐに利用可能なソリューションです。また、Python からの直接的な修正がなくても、多くのプロジェクトのサプライ チェーンにしっかりと組み込まれています。 tarfile モジュールを適切に使用する方法に関するほぼすべての学習教材が開発者に不適切な使用方法を教えているという事実とともに、これは永続的であり、広範な攻撃対象領域を作り出しています。脆弱性へのパッチを自動化するこのような取り組みにより、ソフトウェアサプライチェーンの攻撃対象は狭められます。
攻撃対象領域を狭めるためのこの作業は、業界全体の協力なしには行えません。業界として、基礎的な脆弱性を探し出し、根絶する必要性を無視するわけにはいきません。オープンソースプロジェクトの大規模なパッチ適用は、たとえ多くの時間がかかったとしても可能であり、セクターや地域を問わず、あらゆる規模の組織に利益をもたらすことができるのです。
過去の攻撃対象の再導入を適切に防止するためには、アプリケーションにコードライブラリやフレームワークを使用するすべての組織が、ソフトウェアのサプライチェーンを完全に透明化するための適切なチェックと評価手段を備えるとともに、開発者がテクノロジースタックのすべての層について教育を受けていることを確認することが極めて重要です。
本記事およびここに含まれる情報は、啓蒙目的およびTrellixの顧客の利便性のみを目的としてコンピュータ セキュリティの研究について説明しています。Trellixは、脆弱性合理的開示ポリシーに基づいて調査を実施しています。記載されている活動の一部または全部を再現する試みについては、ユーザーの責任において行われるものとし、Trellixおよびその関連会社はいかなる責任も負わないものとします。
※本ページの内容は2022年1月23日(US時間)更新の以下のTrellix Storiesの内容です。
原文:Trellix Advanced Research Center Patches 61,000 Vulnerable Open-Source Projects
著者:Douglas McKee