The Rust reference is explicitly not a spec, but it describes most of the behavior of the compiler as it stands today, so it's the closest thing there is at the moment.
For the most part though, rustc itself is the spec.
so everything in Rust in undefined. then Rust has more undefined behavior than C.
That's not what 'undefined behavior' means - that term has a very specific meaning in the context of C and Rust!
Undefined behaviour is when the result of doing something is explicitly stated to be undefined by the compiler developers. This allows the compiler to then rely on the fact that it will never occur (e.g. in order to carry out optimizations).
For example, if you use unsafe and raw pointers to break the pointer aliasing rules, the compiler is free to completely miscompile your code if it feels like it, because you have done something which is stated to cause undefined behaviour.
A better way to put it would be to say that Rust's behaviour is unspecified - but given the existence of the reference, I'm not sure I'd agree with that. Just because there's not an official spec, doesn't mean that the behaviour of the compiler isn't predictable/consistent/well-documented.