you don't modify another person's code if you see something wrong with it but don't have authority to do so (regardless of how bad the flaw is)
That really depends on code ownership policy you agreed about. At my team we all are the owners of code no matter who initially wrote it. That gives every team member right to fix/modify/improve it. Of course if he doesn't feel he has authority to do so he can always discuss it with the original author.
As you wrote it's not always good to directly jump into a problem you found. However, it should at least go to your ticket tracking tool. Bad code has to be fixed. It'll come back to you some day.
I think most important thing in a dev team is to communicate often. Talk about design and ideas. Always improve.
Also, communicate well in your code. As the code is more often read than written it's really important to write clean code. Short, well named methods which are self-explanatory (no comments needed). You can read more about it in "Clean Code" by Robert C. Martin (http://www.goodreads.com/book/show/3735293-clean-code).