Also, I would bet that freshly written C code has about 1 RCE bug every 100 LoC. This patch has 236 LoCs so probably about 2.36 RCE's.
Also, I would bet that freshly written C code has about 1 RCE bug every 100 LoC. This patch has 236 LoCs so probably about 2.36 RCE's.
Even if you leave a codebase alone in the sense that you only fix security bugs, you’ll end up with a slow trickle that never quite ends. There are the RCEs that get reported plus a bunch that don’t. So, if you:
- project into the future, assuming that if there still has been a trickle of bugs being found then more bugs will also still be found in the future.
- take into account that there are some number of unreported bugs. Maybe for every reported one there is one that isn’t. Dunno the ratio there.
Put all that together and it’s not hard to imagine a 1RCE/100LoC rate.
But still I’m kinda joking. But only slightly. Maybe if I had a way to bet money on this and it was a testable bet (it’s not because of the unreported RCEs) then I’d throw some cash down.
My first attempts at this patch used Go code but it wasn't possible to protect against all cases. Doing it in C was the only way to do it.
[1]: https://github.com/opencontainers/runc/commit/0a8e4117e7f715...
Source, Google talk at Linux Kernel Summit 2018.
(Fish in a Barrel, LLC is a nonexistent security research "company" consisting of people setting up fuzzers on the weekend and then proceeding to shoot fish in a barrel.)
I'll take your memory safe languages and up the ante with microkernels, which actually help immensely in all those cases. But Linux isn't going to go that route, either.
Google has been pushing for the Kernel Self Preservation project for quite a while now, which Android and ChromeOS make best use of, also a reason why the NDK is so constrained on Android.
Security in the kernel also had quite a few talks at Linux Conf 2019, just recently in New Zealand.
But taking the joke further, are you counting each release’s lines of code towards the RCEs or only new/modified code?
If you’re counting all vise then you’re double counting RCEs. I wouldn’t double count.
https://events.linuxfoundation.org/wp-content/uploads/2017/1...
Edit: I missed the “RCE” context. Most of these are just privescs or memory disclosures.
It’s interesting that Linux kernel bug stats contradict my bold bet. But I’m imagining rando C code here, not necessarily open source, not necessarily in the kernel, not necessarily tested and reviewed the same way. This code is at least open source but I dunno to what extent this newly added code path in runc gets the kind of shaking out that makes kernel code solid.
Runc aside, I expect most C code to have a higher rate of every kind of bug than the kernel.
Any C code which is not available on the network (e.g. C code running on your refrigerator) by definition cannot have a remote code execution vulnerability.
Lots of software, such as the 'top' utility, makes no networking related calls in the codebase, so any instances of bugs would be buffer overflows or crashes, but not remotely exploitable by the usual meaning.
I think that you vastly under-estimate how difficult it is to accidentally write a remotely exploitable bug.
Sure, buffer overflows and undefined behavior happen all the time in C code. Those bugs might be 1 per 100 lines even in the average C code.
of those, hardly any will be network exploitable. Relatively little code will be handling data sourced from the network.
For example, I bet that some dude writing an image decoder in the 90's was thinking "it's cool, I don't have to worry about security" because he just knew that his code wasn't going to be remotely exploitable.
Anyway, my original comment was supposed to be as funny as your handle. I guess the humor ended up being just in how seriously folks took it.
The part I'm not joking about is that folks always underestimate the amount of security bugs that will be found in a piece of code in the future, either because the code ends up used in a way that wasn't predicted, or because some really great bug was just waiting for the right kind of genius to uncover it.