💻 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=ASIAZI2LB4662KJDLPND%2F20261110%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261110T180038Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJGMEQCIEk9pio%2BvSuglnujigLWkEL%2B7%2B4o0Yn7MJ4rPp%2F%2Ba4MWAiAw6u1nEUjT2IUD3aug83A0HisjbYRQEMnyvzmzrds%2BGCr%2FAwhDEAAaDDYzNzQyMzE4MzgwNSIMT4fxmCHMyWxH4KFuKtwD%2F%2Fdhi0qoXBCQqvkKF2cicI3o5ANTQboBMR7RbEMR9qEpfLHuGzMO8uFynOHJDTnjaHJ7G2COgGnHhtruuSdD3sIJ0Z6VjjydGfkAdFjrepV4Xu4rbKNwIM2nAJ%2F2wCW5%2BY2gAMfO86r4crJfhoA27m2TubKgDLJRgER9ZwrBTkXviL00BT1tCizwhamxf1wv1%2FcFrsXMcqhmIXCxa714pPLZ4SEHbRpS%2FM5%2FcZeMh7ROAppHKln4Ac0muCME6HTOQSgNruLNhTjkSOXTlcqOZxJmRuexlW9B%2BxTRCmtAa28HwUvJ7lIDSaDJKkT2ad0a%2FSiUZnPR11naiBTVoXIt38%2F%2BlQRz0%2BdtHZIDaWrGU0iP%2BZfoAjEdR5LfQaY2H3q8NjXR7cpHEj%2Bet2YHqrTn4KSPi7sw09UNawg3bFk9aOe3tWXB%2BZvZQMuTwyJPFoALmPo38PbuxIugNdTgjMT0GYTl1jkbnwe%2FlD4uzSM7WGmzq3uOO9Cq3S%2FCXc%2Fo3V8AYMR2u%2FnNCDEj%2FVv7Z1VTtp9Kon5xz%2FDULw1Eaekc7T8rxA173LT1ovimwaqcabn%2BackCPTQOu%2FSCd6Q15RwPhlwGY25AegpRRbWk608AUNvqVOuWwkYwOhqi05UwmrTN1wY6pgFWP4aaY5Ud8DWoa%2Fv2rKjTLPuWg8A2JPOj65HY1Ycra1MfbyOl4Xl0impQFYzrlxBhkYHJkgre%2BOIi%2BKcV1PZnWsz2HPoK%2FCCQjg87olGwQic5h3LYkqvhyqfP2PQw0umh0lRcq%2FNlO9LA6Qxwp3YtHrQNQb%2BprJTq21HwBI0A66I39SEbY812WoLZ04GtWEE0dfw2YUHqRwrHsDHDvp3VWlwn%2BCws&X-Amz-Signature=2166c71b631dc88441213002245e39bb21efdc748dedbd703568a113997f89c1&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=ASIAZI2LB4662KJDLPND%2F20261110%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261110T180038Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJGMEQCIEk9pio%2BvSuglnujigLWkEL%2B7%2B4o0Yn7MJ4rPp%2F%2Ba4MWAiAw6u1nEUjT2IUD3aug83A0HisjbYRQEMnyvzmzrds%2BGCr%2FAwhDEAAaDDYzNzQyMzE4MzgwNSIMT4fxmCHMyWxH4KFuKtwD%2F%2Fdhi0qoXBCQqvkKF2cicI3o5ANTQboBMR7RbEMR9qEpfLHuGzMO8uFynOHJDTnjaHJ7G2COgGnHhtruuSdD3sIJ0Z6VjjydGfkAdFjrepV4Xu4rbKNwIM2nAJ%2F2wCW5%2BY2gAMfO86r4crJfhoA27m2TubKgDLJRgER9ZwrBTkXviL00BT1tCizwhamxf1wv1%2FcFrsXMcqhmIXCxa714pPLZ4SEHbRpS%2FM5%2FcZeMh7ROAppHKln4Ac0muCME6HTOQSgNruLNhTjkSOXTlcqOZxJmRuexlW9B%2BxTRCmtAa28HwUvJ7lIDSaDJKkT2ad0a%2FSiUZnPR11naiBTVoXIt38%2F%2BlQRz0%2BdtHZIDaWrGU0iP%2BZfoAjEdR5LfQaY2H3q8NjXR7cpHEj%2Bet2YHqrTn4KSPi7sw09UNawg3bFk9aOe3tWXB%2BZvZQMuTwyJPFoALmPo38PbuxIugNdTgjMT0GYTl1jkbnwe%2FlD4uzSM7WGmzq3uOO9Cq3S%2FCXc%2Fo3V8AYMR2u%2FnNCDEj%2FVv7Z1VTtp9Kon5xz%2FDULw1Eaekc7T8rxA173LT1ovimwaqcabn%2BackCPTQOu%2FSCd6Q15RwPhlwGY25AegpRRbWk608AUNvqVOuWwkYwOhqi05UwmrTN1wY6pgFWP4aaY5Ud8DWoa%2Fv2rKjTLPuWg8A2JPOj65HY1Ycra1MfbyOl4Xl0impQFYzrlxBhkYHJkgre%2BOIi%2BKcV1PZnWsz2HPoK%2FCCQjg87olGwQic5h3LYkqvhyqfP2PQw0umh0lRcq%2FNlO9LA6Qxwp3YtHrQNQb%2BprJTq21HwBI0A66I39SEbY812WoLZ04GtWEE0dfw2YUHqRwrHsDHDvp3VWlwn%2BCws&X-Amz-Signature=6a9eaad228c9fc3afef49be2304a3fb7c773dbfa840993691b68597fc578a2e1&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=ASIAZI2LB4662KJDLPND%2F20261110%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261110T180038Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJGMEQCIEk9pio%2BvSuglnujigLWkEL%2B7%2B4o0Yn7MJ4rPp%2F%2Ba4MWAiAw6u1nEUjT2IUD3aug83A0HisjbYRQEMnyvzmzrds%2BGCr%2FAwhDEAAaDDYzNzQyMzE4MzgwNSIMT4fxmCHMyWxH4KFuKtwD%2F%2Fdhi0qoXBCQqvkKF2cicI3o5ANTQboBMR7RbEMR9qEpfLHuGzMO8uFynOHJDTnjaHJ7G2COgGnHhtruuSdD3sIJ0Z6VjjydGfkAdFjrepV4Xu4rbKNwIM2nAJ%2F2wCW5%2BY2gAMfO86r4crJfhoA27m2TubKgDLJRgER9ZwrBTkXviL00BT1tCizwhamxf1wv1%2FcFrsXMcqhmIXCxa714pPLZ4SEHbRpS%2FM5%2FcZeMh7ROAppHKln4Ac0muCME6HTOQSgNruLNhTjkSOXTlcqOZxJmRuexlW9B%2BxTRCmtAa28HwUvJ7lIDSaDJKkT2ad0a%2FSiUZnPR11naiBTVoXIt38%2F%2BlQRz0%2BdtHZIDaWrGU0iP%2BZfoAjEdR5LfQaY2H3q8NjXR7cpHEj%2Bet2YHqrTn4KSPi7sw09UNawg3bFk9aOe3tWXB%2BZvZQMuTwyJPFoALmPo38PbuxIugNdTgjMT0GYTl1jkbnwe%2FlD4uzSM7WGmzq3uOO9Cq3S%2FCXc%2Fo3V8AYMR2u%2FnNCDEj%2FVv7Z1VTtp9Kon5xz%2FDULw1Eaekc7T8rxA173LT1ovimwaqcabn%2BackCPTQOu%2FSCd6Q15RwPhlwGY25AegpRRbWk608AUNvqVOuWwkYwOhqi05UwmrTN1wY6pgFWP4aaY5Ud8DWoa%2Fv2rKjTLPuWg8A2JPOj65HY1Ycra1MfbyOl4Xl0impQFYzrlxBhkYHJkgre%2BOIi%2BKcV1PZnWsz2HPoK%2FCCQjg87olGwQic5h3LYkqvhyqfP2PQw0umh0lRcq%2FNlO9LA6Qxwp3YtHrQNQb%2BprJTq21HwBI0A66I39SEbY812WoLZ04GtWEE0dfw2YUHqRwrHsDHDvp3VWlwn%2BCws&X-Amz-Signature=949d731b570300f942a68b7b63fb9695ef77a3bbc3ff188d56f6e311983d0615&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
Affected Vehicle
- 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)