Ricardo Goulart scored the only goal nine minutes into the second half to keep Cruzeiro clear of Botafogo, who moved back into second place thanks to a late victory at Criciuma.
The hosts took a fourth-minute lead through Lins but Octavio levelled after 53 minutes before Elias snatched it for Botafogo at the death.
Atletico Paranaense missed the chance to join Botafogo on 36 points after a goalless draw at Vasco da Gama while Corinthians also played out a disappointing 0-0 stalemate at home to rock-bottom Nautico Recife.
Sao Paulo's struggles show no sign of abating after they were beaten 2-0 at Coritiba, for whom Alex scored twice in the first half.
The visitors also finished with 10 men after Osvaldo was dismissed 14 minutes from time.