That Ruby bug is a bug in the C implementation of the language. Surely this bug
supports the point that modern languages don't have these problems, since you have to look at the bits written in C to find them.
As for "embarrassingly basic," it takes years or decades to find these bugs because we're using tools that hide them. Basic runtime bounds checking would have turned up this bug pretty much immediately. If you use a language where a buffer overflow often causes no runtime error, then of course it's going to be hard to notice when you've made one.