A lot of these issues would be highlighted by "legacy" (pre-AI) analysis tools. The issue is that they weren't being run.
Isn't the simpler explanation that they weren't just a tool run?
Software engineering is still kind of new overall.
https://www.blackduck.com/fuzz-testing.html
OpenText products
https://www.opentext.com/products/dynamic-application-securi...
I won’t say how much they are here but they are very expensive.
I’m not claiming Defensics or OpenText DAST tools are magical “find all kernel vulns” buttons
My point is more that mature fuzzing ecosystems already existed before the recent AI-driven approaches. Protocol fuzzers, syscall fuzzers, coverage-guided fuzzers, sanitizers, dynamic analysis, etc. have all historically found serious kernel bugs
Why didn't "mature fuzzing ecosystems" find the vulnerabilities AI is now finding? It's a pretty big gap in the "fuzzing tools already do this" logic!
Because they simply aren’t ran. That’s my entire argument
It seems borderline impossible that there's a tool that they feel would be beneficial but that they're classed out of using by license costs or by staff proficiency.
Though this was ~3 years ago now, and a lot of things have changed, but these tools were very much available and well known then - they aren't new. Though perhaps as they "knew" the project was coming to a close it wasn't a priority either?
It also might have fallen through the gaps due to the Apple internal/team culture - I worked for an external vendor, and we had to work against binary built framework dumps that didn't even allow us to enable things like address sanitizer completely either, and fuzzing difficult as you'd need to trace things through their opaque binary layers before it even reached our code.
Apple did have all our code though, it was very much an asymmetrical relationship, but if they were running such things as a matter of course in CI or similar you'd see that pattern in when they reported issues it caught, and the timings from time-of-bug-caused to time-of-report. It instead suggested any such runs were piecemeal and sporadic at best.
Though, it wouldn't really surprise me if they were being run and finding issues all the time, but they never actually got back to us. This certainly wouldn't be the first time we ran into "difficulties" due to the nature of the relationship and culture.
- looking at components in isolation, not realizing that a component could receive untrusted input
- looking at the entire system, but not in a configuration that made the CVE possible
- having to be extremely lucky to find the issue through fuzzing, and Apple not hitting that jackpot
- having found the issue in testing, but incompletely/incorrectly fixing it
- mostly focusing testing on other components because this one’s code didn’t change and hadn’t seen issues in years
I don’t think we have enough info to know which (or something entirely different) it is.