go-rpmutilsのアーカイブ展開(Zip Slip)による任意のファイル書き込み
2020年7月20日
0 分で読めますSnyk Monthly Vulnerability Profileへようこそ。このシリーズでは、Snykの セキュリティリサーチチームが発見した、または同チームに報告された脆弱性を振り返ります。毎月、注目すべき脆弱性を1つ選び、その発見、調査、開示にまつわる経緯を紹介します。オープンソースコミュニティ全体で脆弱性の特定と修正に取り組む研究者、開発者、ユーザーにもスポットライトを当てます。
今月は、SnykのセキュリティリサーチチームがGolangパッケージで特定した、一連のZip Slip脆弱性のうち1つを取り上げます。
脆弱性: アーカイブ展開(Zip Slip)による任意のファイル書き込み 割り当てられたCVE:CVE-2020-7667Snykアナリスト: George Gkitsas発見者: Snyk Research Team
2020年6月5日、Snyk Research Teamは、悪意のあるzipアーカイブを介して発生する可能性のある任意のファイル書き込み脆弱性の詳細を公開しました。この脆弱性はGolangパッケージのgo-rpmutilsで特定され、オープンソースエコシステム全体でZip Slip脆弱性を特定する大規模な取り組みの一環として、Snykの研究者が発見しました。シニアセキュリティアナリストのGeorge Gkitsasが、rpmutilsパッケージの脆弱性を最初に特定した研究者です。最終的に、この脆弱性はパッケージのメンテナーに報告され、迅速に修正されました。修正版の公開後、CVEおよびSnyk Vulnerability Databaseに掲載されました。
この脆弱性を発見した調査の詳細に入る前に、Zip Slip脆弱性の概要を簡単に説明します。Zip Slip脆弱性の悪用では、細工された悪意のあるアーカイブファイルを利用してディレクトリトラバーサルを引き起こします。脆弱な方法でファイルを展開すると、意図しない場所にあるファイルが上書きされる可能性があります。これにより、攻撃者がシステムファイルを上書きし、最終的に悪意のあるリモートコマンドを実行したり、システムへのリモートアクセスを得たりするおそれがあります。Zip Slip脆弱性の技術的な詳細や対策については、Zip Slip Cheat Sheetをご覧ください。
Snyk Research TeamのメンバーであるGeorgeは、リポジトリ全体から迅速に特定できるパターンを探し、脆弱性が潜む可能性のあるパッケージを絞り込もうとしていました。調査の一環として、まずGolangエコシステムに焦点を当てました。チームは初回の調査対象として約60のパッケージを選び、それぞれを分析して脆弱性の有無を調べました。いくつかの誤検知が見つかり、アルゴリズムの調整に役立ちましたが、最終的に5件の脆弱性が発見されました。そのうち、脆弱なgo-rmputilsパッケージを含む3件にはCVEが割り当てられ、Snyk Vulnerability Databaseに掲載されています。残る2つの脆弱なパッケージについては、脆弱性を公表する前に修正が提供されるよう、Snykが引き続きメンテナーと連携しています。

go-rpmutilsの場合、脆弱性を発見し、悪用可能であることを確認した後、Georgeはパッケージのメンテナーに連絡を試みました。このケースでは、メンテナーはSAS Softwareという組織でした。最初は、リポジトリの組織プロフィールに記載されていたメールアドレス宛に連絡しました。この種の報告に適した宛先ではありませんでしたが、Georgeからの通知は、脆弱性の開示を担当する専任者にすぐ転送されました。その後、SAS Softwareには脆弱性開示専用のメールアドレスがあることがSnykに伝えられました。セキュリティと開発のコミュニティでは、こうした対応がベストプラクティスとされています。
いずれにしても、SAS Softwareはプロセス全体を通して迅速に対応し、開示の通知から数時間以内に最初の返答がありました。Georgeはセキュリティ担当者と連携し、修正が利用可能になった時点で責任ある形で脆弱性を公開できるようにしました。ベンダーのチームは速やかに修正を提供し、Georgeは脆弱性が十分に修正されていることをテストで検証できました。脆弱性は最初のベンダーへの通知からわずか6日後の2020年6月5日に公開されました。
この事例は、すべての関係者がセキュリティ上の懸念に責任を持って効率的に対処する姿勢を共有していれば、研究者とメンテナーが協力できることを示す好例です。このケースでのメンテナーであるSAS Softwareは、非常に迅速かつ的確に対応し、問題を解決しました。SnykとSAS Softwareは協力して修正が問題を完全に解消することを確認し、修正が利用可能になってから脆弱性の詳細を公開しました。この事例から今後に活かせる点があるとすれば、脆弱性開示専用の連絡窓口を設けることが重要だということです。また、その窓口をREADMEファイルやリポジトリのプロフィールに掲載し、簡単に見つけられるようにすることも検討してください。
Snykは、脆弱性の妥当性と悪用可能性を確認するとともに、メンテナーに責任ある形で開示し、脆弱性を修正するための詳細なガイダンスを提供することを目指しています。この脆弱性の詳細や、オープンソースプロジェクトで発見した脆弱性の報告方法については、以下のリンクをご覧ください。
キャプチャー・ザ・フラッグを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。