Snykの脆弱性開示プログラム:舞台裏では何が起きているのか?
Asaf Biton
2020年4月14日
0 分で読めますSnykは、オープンソースコミュニティの安全を守ることが重要だと考えています。そのため、脆弱性の責任ある開示プログラムを開始しました。このプログラムでは、管理対象のオープンソースパッケージ、およびJavaScript、Java、Python、.NET、Go、Ruby、PHPなどの言語で見つかったあらゆる脆弱性に対応しています。
Snykに脆弱性を報告するメリット
Snykの脆弱性開示プログラムは、研究者とメンテナーの橋渡しをし、責任ある開示に伴う課題や負担を軽減することを目指しています。詳しくは、以前のブログ記事でご紹介しました。
では、どのように橋渡しをしているのでしょうか。新たな脆弱性がSnykに報告されると、セキュリティチームに直接送られ、トリアージと報告内容の検証が行われます。開発者を第一に考える企業として、メンテナーの視点も考慮した対応を大切にしています。最初から最後まで、脆弱性開示ポリシーに沿って、双方が率直に話し合います。双方の見解に耳を傾け、最終的にはメンテナーが受け入れられ、かつ私たちの経験と専門知識に基づいて最も責任ある判断に至ることを目指します。その際、パッケージの状況、深刻度、悪用される可能性など、あらゆる要素を考慮します。
SnykはCNA(CVE採番機関)でもあるため、報告された問題にCVE IDを割り当てることができます。修正が公開された後(または、50日以内に返信がない場合)、問題にCVE IDを割り当て、公開アドバイザリを発行します。脆弱性にCVEが割り当てられることは非常に重要です。エコシステム全体に問題が周知され、開発者や組織が適切な対策を講じてコードを保護できるようになるためです。
プロセスを通じて、最初に脆弱性を報告した方に定期的に進捗をお知らせします。また、重要なこととして、その貴重な発見に対する功績を明記します。
これまでに、外部のさまざまな研究者から報告された88件の脆弱性を、責任ある方法で開示してきました。その中から事例を一つご紹介します。
事例:ジョンズ・ホプキンス大学との連携
最近、ジョンズ・ホプキンス大学の研究者と協力し、大規模な脆弱性開示に取り組み、57件の脆弱性を特定しました。
ジョンズ・ホプキンス大学の研究チームは、論文研究の一環として、脆弱性の発見を自動化する革新的な方法を考案しました。
「私たちは、JavaScriptオブジェクト間の相互作用を捉え、JavaScriptの脆弱性検出を容易にする新しい概念として、Object Property Graph(OPG)を提案します。OPGは、変数名やプロパティなどのオブジェクト名情報、オブジェクトのスコープ、オブジェクトそのものをグラフ状の構造のノードとして表現し、実行時にグラフをたどってオブジェクトを解決できるようにします。OPGには主に2つの用途があります。(i) 未知のオブジェクト解決に遭遇した際、より優れた、つまりより正確なCFGおよびDFGの構築を支援すること。(ii) オブジェクト間の相互作用を提供し、特定の脆弱性パターンに照らしてその相互作用を照会できるようにすることです。
私たちはOPGenというフレームワークを設計・実装し、いわゆるシミュレーション実行中にNode.jsアプリケーションのOPGを生成できるようにしました。また、OPGenを使って、コマンドインジェクション、プロトタイプ汚染、任意コード実行、パストラバーサルという4種類のNode.jsの脆弱性を検出しました。
CPG(Code Property Graph)を基盤として、オブジェクトノードと関連するエッジを追加します。そのために、コードをシミュレーション実行し、ユーザー入力を起点とするデータフローがシンク関数に到達するかどうかを確認します。」
- Song Li、JHU Security Labs
研究チームは脆弱性開示フォームから私たちに連絡してきました。私たちは、発見内容の性質や規模、どのような支援ができるかについて話し合うため、ビデオ会議に招待しました。
開示内容の規模を把握した後、共有の非公開リポジトリを作成し、研究チームに新たな発見を追加してもらいました。チームからは、脆弱性の種類、影響を受けるパッケージとバージョン、POC、脆弱なコードへの参照情報が提供されました。これらはすべて独自の形式でまとめられ、社内システム向けに特別に構築したパイプラインに取り込まれました。そのおかげで、大規模な開示にも効率的に対応できました。
自社で開発した社内ツールを使って該当するPOCを検証し、その後、十分なトリアージを行い、関係するメンテナーと連携しながら責任ある形で脆弱性を開示しました。
これまでに、この連携を通じて55件を超える脆弱性を公開しました。脆弱性の種類には、コマンドインジェクション、パストラバーサル、プロトタイプ汚染、コード実行などがあります。例として、SNYK-JS-BLAMER-559541、SNYK-JS-BODYMEN-548897、SNYK-JS-PULVERIZR-560122があります。
JHU Security Labsのチームとは、新たな発見や未公開の脆弱性について、引き続き緊密に連携しています。
利用を始めるには
まずは脆弱性開示ポリシーをお読みください。
その後、報告を提出する際は、専用の開示フォームをご利用ください。
できるだけ詳しい情報を記載してください。具体的には、次の内容です。
問題の説明
再現手順(または概念実証)
連絡先情報 — 功績を明記し、追加情報が必要な場合に連絡するために使用します。
または、report@snyk.ioまでメールでご連絡ください。その際も、できるだけ詳しい情報をお知らせください。


