提供:Japanese Scratch-Wiki

このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
SandCastleIcon.png このページまたは節には、ScratchのWebサイト、Wikipedia、またはScratch Wiki以外へのリンクがあります。

リンク先のページが安全であると保障できないため、アクセスする場合は十分に注意してください。

加工されたproject.jsonファイル。開くと、https://example.com/test.jsが読み込まれた。

CVE-2020-14000は、Scratch 3.0に使われているライブラリー、scratch-vmの脆弱性である。拡張機能の読み込み動作を悪用して、任意のJavaScriptファイルを読み込み、Web Worker内で実行することができるものである。

この脆弱性は2020年6月9日にapple502jによって発見され[1]、翌日にCVE IDが割り当てられ[2]、日本時間の7月15日に修正された[3]

仕組み

Scratch 3.0は、読み込む拡張機能を、project.jsonファイルのブロックのオペコードを用いて判断している。これはgetExtensionIdForOpcodeという関数にて行われている。この関数では以下のことを行っていた。

  • オペコードをアンダーバー(_)で区切って、最初の部分を拡張機能IDとする。
  • 拡張機能IDが実際は拡張機能ではない種類であった場合は、空白を返す。
  • その場合は、拡張機能IDを返す。

例えば、答えブロックのオペコードはsensing_answerで、拡張機能IDはsensingであるが、sensingはブロックの種類の中の調べるブロックにあたるため、空白が返る。全部消すブロックpen_clearのため、拡張機能IDpenが返る。

存在しないオペコードhttps://example.com/test.js_fooがこの関数に渡されたとしても、返り値は上のルールに従ってhttps://example.com/test.jsとなる。

返された拡張機能IDは、拡張機能をIDまたはURLから読み込む関数、loadExtensionURLに渡される。もし拡張機能IDが存在する拡張機能を意味している場合は、その拡張機能が読み込まれるが、それ以外の場合は拡張機能は渡された拡張機能IDをURLとして解釈して読み込まれる。

ただし、URLから読み込まれた拡張機能はWeb Workerで実行される。このため、実際に悪用されたとしても、重大な被害は及ばない。

出典

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。