We report on our experience designing a new technique and tool for fuzzing implementations of WebGPU, a W3C standard JavaScript API for in-browser GPU computing. We also report on our experience using our WebGlitch tool to test industrial-strength implementations of WebGPU, leading to the discovery of numerous bugs. WebGPU enables programmatic access to a device’s graphics processing unit (GPU) for in-browser GPU computing, and is being implemented by Google, Mozilla and Apple for inclusion in all of the major web browsers. Guaranteeing the security and reliability of WebGPU is crucial to avoid wide-reaching browser security vulnerabilities and to facilitate portability by ensuring uniform behaviour across different platforms. To that end—inspired by randomized compiler testing techniques—our approach to fuzzing creates random, valid-by-construction programs by continuously selecting a WebGPU API call, then recursively generating all requirements necessary for that API call to be valid based on careful modelling of the API specification. This is implemented as a new open source tool, WebGlitch, which we designed in consultation with engineers at Google who work on the Chrome WebGPU implementation. WebGlitch identifies bugs through sanitiser- boosted crash oracles, differential testing, and by identifying cases where valid-by-construction API calls lead to runtime errors. We present an evaluation showing that WebGlitch can find bugs missed by an existing WebGPU fuzzer, wg-fuzz, and across the broader WebGPU ecosystem: to date, WebGlitch has found 23 previously-unknown bugs, of which 16 affect WebGPU implementations from Google, Mozilla, and the Deno project. WebGlitch found an additional 4 in the shader compilers used by the graphics APIs that WebGPU interfaces with. The remaining 3 bugs affect the widely-used JavaScript runtimes Node.js and Deno. On top of the 23 new bugs found by WebGlitch, it identified 5 bugs that had been previously reported. Fuzzing with WebGlitch also led us to identify an ambiguity in the specification of the WebGPU shading language, for which we proposed an amendment that was accepted by W3C and which has been adopted in the latest version of the specification. Analysing the line coverage of a WebGPU implementation by WebGlitch-generated programs revealed that WebGlitch covers code missed by wg-fuzz and the official conformance test suite. Our hope is that this report on the design of WebGlitch and its deployment in practice will be useful for practitioners and researchers interested in using API fuzzing to improve the reliability of industrial codebases.
Wed 2 JulDisplayed time zone: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna change
14:00 - 15:45 | |||
14:00 21mTalk | Event Race Detection for Node.js Using Delay Injections Technical Papers Pre-print | ||
14:21 21mTalk | FuzzFlesh: Randomised Testing of Decompilers Via Control Flow Graph-based Program GenerationRemote Technical Papers | ||
14:42 21mTalk | PoTo: A Hybrid Andersen's Points-to Analysis for Python Technical Papers Ingkarat Rak-amnouykit Rensselaer Polytechnic Institute, Ana Milanova Rensselaer Polytechnic Institute, Guillaume Baudart Inria, Martin Hirzel IBM Research, Julian Dolby IBM Research | ||
15:03 21mTalk | Wastrumentation: Portable WebAssembly Dynamic Analysis with Support for Intercession Technical Papers Aäron Munsters Vrije Universiteit Brussel, Angel Luis Scull Pupo Sofware Languages Lab, Vrije Universiteit Brussel, Elisa Gonzalez Boix Vrije Universiteit Brussel | ||
15:24 21mTalk | WebGlitch: A Randomised Testing Tool for the WebGPU API Technical Papers |