š» Research
How to fuzzing USB stack in real cars
How to fuzzing USB stack in real cars
Overview
PoC for vulnerability in real cars vehicle infotainment system
The research was presented at the DEFCON31 Car Hacking Village
Description
This research could lead to a crash of the vehicle infotainment system via USB in produced vehicles.
It has been tested on some produced vehicles, but we believe it can be tested on any vehicle that supports USB input and could have an impact.
First, we used theĀ syzkallerĀ tool, a well-known fuzzing tool.
TheĀ syzkallerĀ fuzzing tool supports fuzzing tests against Linux subsystem. In addition to fuzzing the Linux subsystem, this fuzzing tool also provides the ability to fuzz the USB stack.
In the article below, we describe how to do USB-based fuzzing with syzkaller.
Next, we prepared the following steps to build a fuzzing environment with theĀ syzkallerĀ fuzzing tool
1. Choose hardware
1. Set up a fuzzing test environment
1. Run fuzzing test!
Choose hardware
Whilst the documentation above recommends well known hardware tools such asĀ Facedancer21Ā that can be programmed and emulated for USB devices, hardware is not readliy available, so we used theĀ Raspberry PI, a hardware that supports the āUSB OTGā feature through testing on other hardware devices.
![[Figure 1] Raspberry PI4](https://prod-files-secure.s3.us-west-2.amazonaws.com/ddfb90e3-766a-4fa2-b58c-bd09d4b4e865/162bc21b-5760-4905-a412-4cf044914999/raspberrypi.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4665OGATRTT%2F20260216%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260216T224553Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHYaCXVzLXdlc3QtMiJHMEUCIQCjS0tDCNx5%2BMEyf05hFuyXfiCInYoIj1vP0c4GwlvnCQIgGigvT02Vl8XT1N0fBaPOTboTHBSZw%2FdmHd5%2B6QO3KAYq%2FwMIPxAAGgw2Mzc0MjMxODM4MDUiDLegnHExgv3K%2FxO7jyrcA6hpUUTJaKV7cMxQ2qmt1MVGNk7RVOZZB0U2AaoUutABJPXojpRT42gzNf2sFTJxFUY6WLd0CWCHfFqyjrGo4QGdnskBGA%2BWKYviFdEtkwYuAMVGIzyztUU%2ByMHnagQJet5k%2B6v%2FfxUd0%2BLe%2FyxsGM2Ro4E0fzp7viaYDs7MX4VhzJjf4jP0i%2F76uJPjETQ3aKe5%2FJf1P8c5ryQ0KQFL28CYD7t4LG11Hkgm5iEZnB3dlrhWYyuHn5WbhgwhDAPb1Vf8GbFzUBPMT0A2YutADIuJwptvf4Toj3bBZctg9BFJQ0NR4Eq%2FZ3Di1Lc31v5SKfKVYQcwd3jPBSrfASSx6FjAFtyFZWwpOoWTF7Hcr8y7ky3Lf2Zk5mo6iknvarZJgeSmIiM2XeDPKDnsJcsThk9Gs%2Bg83n1ODo0r3kqUmZAUFuRI%2BiNaTZXM2qwSfXINOcQWOYPAJYTkJGveyJX636bF6TWA1fOtjzfq5waw373mciKZQ8gXTU2JEeBpqy45U%2B70v89pcLzyXFjnHbDZbKcVo28qWF42pvW6PBnWMHtmri%2BGI5NZUcQObbT%2FqZHWihKqxpPmvexZpcwbWpTFZHCxLz31xehWZ8TtE%2BUIXWE9kKi3OSMKtqnVS8f6MK6kzswGOqUBqkFi5kAj8cPSGVNoSemJs7HMCTD%2FnVSSSBMXylFFNfhDXTbLuY30Yajfl0vvvpZsD7t85cbyE%2FHfa3TC3RRWmKQQYUr%2FsC%2FL8G0NyBim4Zguu79zIfh9Ad6BG37M4s%2Fm8IRFOwZPl7FKmd9wjRdOQvQZyGiSDv%2Bcnh3oFzs%2FdrjwGM5Wc3v3rGce8ACLeFrKikHMNgWypLlUIL6sjuD%2BquUR%2FT9E&X-Amz-Signature=8638300fd336b5520b6e7b98b8f2fdfc3aca0780059b4dfae9714c74fa422b05&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
TheĀ Raspberry PIĀ hardware above includes USB OTG functionally on a port that supplies 5V power, so it can be connected using a USB-C cable
Set up a fuzzing test environment
To build the fuzzing environment, we used the official documentation of theĀ syzkallerĀ tool mentioned above. An additional tool calledĀ raw-gadgetĀ was used here.
raw-gadgetĀ is a module for implementing a low-level interface to the Linux USB gadget subsystem, which can be used to emulate physical or virtual USB devices.
Run fuzzing!
Hereās a general description of the fuzzing environment we've built. The diagram below illustrates how the syzkaller fuzzer operates on Raspberry Pi hardware. The inputs used by the fuzzer are based on syzkallerās reproduction values.
These input values are transmitted through a USB port connected by syzkaller.
![[Figure 2] Fuzzing Overview](https://prod-files-secure.s3.us-west-2.amazonaws.com/ddfb90e3-766a-4fa2-b58c-bd09d4b4e865/744dbcf1-3da8-4766-aecd-e69fd2d17b9b/fuzzer_overview.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4665OGATRTT%2F20260216%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260216T224553Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHYaCXVzLXdlc3QtMiJHMEUCIQCjS0tDCNx5%2BMEyf05hFuyXfiCInYoIj1vP0c4GwlvnCQIgGigvT02Vl8XT1N0fBaPOTboTHBSZw%2FdmHd5%2B6QO3KAYq%2FwMIPxAAGgw2Mzc0MjMxODM4MDUiDLegnHExgv3K%2FxO7jyrcA6hpUUTJaKV7cMxQ2qmt1MVGNk7RVOZZB0U2AaoUutABJPXojpRT42gzNf2sFTJxFUY6WLd0CWCHfFqyjrGo4QGdnskBGA%2BWKYviFdEtkwYuAMVGIzyztUU%2ByMHnagQJet5k%2B6v%2FfxUd0%2BLe%2FyxsGM2Ro4E0fzp7viaYDs7MX4VhzJjf4jP0i%2F76uJPjETQ3aKe5%2FJf1P8c5ryQ0KQFL28CYD7t4LG11Hkgm5iEZnB3dlrhWYyuHn5WbhgwhDAPb1Vf8GbFzUBPMT0A2YutADIuJwptvf4Toj3bBZctg9BFJQ0NR4Eq%2FZ3Di1Lc31v5SKfKVYQcwd3jPBSrfASSx6FjAFtyFZWwpOoWTF7Hcr8y7ky3Lf2Zk5mo6iknvarZJgeSmIiM2XeDPKDnsJcsThk9Gs%2Bg83n1ODo0r3kqUmZAUFuRI%2BiNaTZXM2qwSfXINOcQWOYPAJYTkJGveyJX636bF6TWA1fOtjzfq5waw373mciKZQ8gXTU2JEeBpqy45U%2B70v89pcLzyXFjnHbDZbKcVo28qWF42pvW6PBnWMHtmri%2BGI5NZUcQObbT%2FqZHWihKqxpPmvexZpcwbWpTFZHCxLz31xehWZ8TtE%2BUIXWE9kKi3OSMKtqnVS8f6MK6kzswGOqUBqkFi5kAj8cPSGVNoSemJs7HMCTD%2FnVSSSBMXylFFNfhDXTbLuY30Yajfl0vvvpZsD7t85cbyE%2FHfa3TC3RRWmKQQYUr%2FsC%2FL8G0NyBim4Zguu79zIfh9Ad6BG37M4s%2Fm8IRFOwZPl7FKmd9wjRdOQvQZyGiSDv%2Bcnh3oFzs%2FdrjwGM5Wc3v3rGce8ACLeFrKikHMNgWypLlUIL6sjuD%2BquUR%2FT9E&X-Amz-Signature=917a31ae251b01706486af119f4c4d77da029846af7efe79f5b82bf1cee6597f&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
The reproduction code collected various USB input data from over 300 known USB vulnerabilities identified by syzkaller.
![[Figure 3] Syzbot Reprodution](https://prod-files-secure.s3.us-west-2.amazonaws.com/ddfb90e3-766a-4fa2-b58c-bd09d4b4e865/34ff8ad3-e048-4676-b493-46823304935b/syzbot-reproduction.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4665OGATRTT%2F20260216%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260216T224553Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHYaCXVzLXdlc3QtMiJHMEUCIQCjS0tDCNx5%2BMEyf05hFuyXfiCInYoIj1vP0c4GwlvnCQIgGigvT02Vl8XT1N0fBaPOTboTHBSZw%2FdmHd5%2B6QO3KAYq%2FwMIPxAAGgw2Mzc0MjMxODM4MDUiDLegnHExgv3K%2FxO7jyrcA6hpUUTJaKV7cMxQ2qmt1MVGNk7RVOZZB0U2AaoUutABJPXojpRT42gzNf2sFTJxFUY6WLd0CWCHfFqyjrGo4QGdnskBGA%2BWKYviFdEtkwYuAMVGIzyztUU%2ByMHnagQJet5k%2B6v%2FfxUd0%2BLe%2FyxsGM2Ro4E0fzp7viaYDs7MX4VhzJjf4jP0i%2F76uJPjETQ3aKe5%2FJf1P8c5ryQ0KQFL28CYD7t4LG11Hkgm5iEZnB3dlrhWYyuHn5WbhgwhDAPb1Vf8GbFzUBPMT0A2YutADIuJwptvf4Toj3bBZctg9BFJQ0NR4Eq%2FZ3Di1Lc31v5SKfKVYQcwd3jPBSrfASSx6FjAFtyFZWwpOoWTF7Hcr8y7ky3Lf2Zk5mo6iknvarZJgeSmIiM2XeDPKDnsJcsThk9Gs%2Bg83n1ODo0r3kqUmZAUFuRI%2BiNaTZXM2qwSfXINOcQWOYPAJYTkJGveyJX636bF6TWA1fOtjzfq5waw373mciKZQ8gXTU2JEeBpqy45U%2B70v89pcLzyXFjnHbDZbKcVo28qWF42pvW6PBnWMHtmri%2BGI5NZUcQObbT%2FqZHWihKqxpPmvexZpcwbWpTFZHCxLz31xehWZ8TtE%2BUIXWE9kKi3OSMKtqnVS8f6MK6kzswGOqUBqkFi5kAj8cPSGVNoSemJs7HMCTD%2FnVSSSBMXylFFNfhDXTbLuY30Yajfl0vvvpZsD7t85cbyE%2FHfa3TC3RRWmKQQYUr%2FsC%2FL8G0NyBim4Zguu79zIfh9Ad6BG37M4s%2Fm8IRFOwZPl7FKmd9wjRdOQvQZyGiSDv%2Bcnh3oFzs%2FdrjwGM5Wc3v3rGce8ACLeFrKikHMNgWypLlUIL6sjuD%2BquUR%2FT9E&X-Amz-Signature=793b759fbeaf555f491e858cca2df47ff6365fadeecfef0b229389c6ff2cc805&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
Vehicle Affected
- GM Chevrolet Equinox 2021 (at version, 2021.03.26 build ver)
- Renault ZOE EV 2021 (at versions, 283C35202R ~ 283C35519R)
- Volkswagen Jetta 2021 (Hardware 724, Software 0876)
- ā¦
References
- https://github.com/google/syzkaller
- https://github.com/google/syzkaller/blob/master/docs/linux/external_fuzzing_usb.md
- https://github.com/xairy/raw-gadget
- https://syzkaller.appspot.com/upstream?manager=ci2-upstream-usb