提供:Japanese Scratch-Wiki
![]() |
このページまたは節には、ScratchのWebサイト、Wikipedia、またはScratch Wiki以外へのリンクがあります。
リンク先のページが安全であると保障できないため、アクセスする場合は十分に注意してください。 |
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で実行される。このため、実際に悪用されたとしても、重大な被害は及ばない。