Re: Gadgetfs - adding support for delegation of setup requests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/18/2016 01:25 PM, Felipe Balbi wrote:
> Hi,
>
> Binyamin Sharet <bsharet@xxxxxxxxx> writes:
>>>>>>>> I get your point, what I propose is not to change the default behavior
>>>>>>>> of gadgetfs,
>>>>>>>> but allow it to enter to a special mode by the user. I am aware of the
>>>>>>>> issues that it
>>>>>>>> might raise, and understand your concerns. However, I am asking about
>>>>>>>> modifications in a specific, contained context. I would prefer to have it in the
>>>>>>>> mainline kernel, but if you don't think it fits - I will keep those
>>>>>>>> changes as an
>>>>>>>> out-of-tree module.
>>>>>>> you're gonna have a really hard time getting anything in mainline
>>>>>>> without explaining your goal. All you said is: "I wanna do fuzzying",
>>>>>>> but fuzzying of what exactly? Why do you need to fuzz during
>>>>>>> enumeration? This makes no sense. Gadgets are _not_ allowed to change
>>>>>>> their descriptors and kernel doesn't allow userspace to do that. If you
>>>>>>> wanna change your descriptor, then you _must_ disconnect from the host
>>>>>>> and write brand new descriptors during gadgetfs initialization.
>>>>>>>
>>>>>> Sorry if I wasn't clear enough. We maintain a tool called Umap2, its goal is
>>>>>> to perform security assessment of USB hosts. It does so in multiple ways,
>>>>>> and one of them is fuzzing the USB host by sending invalid/unexpected
>>>>>> packets over USB, including packets in the enumeration phase. There could
>>>>>> be multiple issues with USB host stack during enumeration, and the fuzzing
>>>>>> umap2 performs target those issues.
>>>>> have you found any bugs yet?
>>>>>
>>>>>> However, this kind of operation requires a very low level control over the
>>>>>> traffic, and until now it was done using Facedancer, which is a designated
>>>>>> HW. gadgetfs looked to me like the USB equivalent for "raw socket" as a
>>>>>> USB device, so I thought we could use it to enable umap2 on beaglebone
>>>>>> black and similar boards that run Linux instead of Facedancer.
>>>>>>
>>>>>> I hope this is clearer. If you think that there is some other kernel module
>>>>>> that is better suited to this task, I would be happy to hear about it.
>>>>> The kernel is not exactly meant for pentesting USB host stacks :-)
>>>>>
>>>>> Here's what we can do, for now keep an out-of-tree patch. If/when you
>>>>> find actual bugs, then we can reconsider adding this support if, and
>>>>> only if, it's really difficult to enable (for example, it should depend
>>>>> on EXPERT or something along those lines). We don't want this to ever
>>>>> leak to production systems, so we need to make it really annoying to get
>>>>> enabled.
>>>>>
>>>>> Anyway, first things first, let us know if/when you trigger any bugs
>>>>> with this.
>>>>>
>>>>> --
>>>>> balbi
>>>> Many USB host implementations, including at least older versions of Linux,
>>>> have bugs in the enumeration phase. While I cannot pinpoint a ToC/ToU
>>>> vulnerability in the configuration descriptor at the moment, I found more than
>>>> a couple of issues with configuration descriptor parsing. I will post them here
>>>> soon, hopefully today.
>>>>
>>>> However, just over the last year multiple USB related CVEs in the Linux kernel
>>>> were published (not by me).
>>>>
>>>> Also, while there might not be a specific ToC/ToU bug in configuration
>>>> descriptor
>>>> parsing in Linux at the moment, there might still be in the future, or
>>>> in a different
>>>> operating system, or in a user application that queries those descriptor.
>>>> My goal is to test all those cases, not just the current Linux kernel.
>>> Fair enough, let's just wrap this "forward everything to userspace" with
>>> a Kconfig choice depending on EXPERT so that it doesn't leak to
>>> production kernel builds.
>>>
>>> Thanks
>>>
>> I think this will cause existing implementation over gadgetfs to fail
>> with this
>> special kernel (as now it will delegate everything all of the time). How
>> about
>> using a ioctl to configure it, but wrapping this ioctl with Kconfig?
>> This way
>> gadgetfs will operate as always unless a user activates "delegate all"
>> in runtime.
>>
>> Sounds reasonable?
> You mean a ep0 ioctl? Makes sense to me. Then we can add more features
> later. Perhaps just add a "Get supported features" IOCTL which returns
> a struct with 256 bits (4x uint64_t). I doubt we will ever need that
> many bits, but better safe than sorry, I guess.
>
Don't we need some "set feature" IOCTL as well?

-- 
Binyamin Sharet,
Cisco, STARE-C


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux