Devin Neal rushed for two touchdowns and a fluke occurrence on a punt led to the go-ahead score as Kansas notched a 17-13 upset of No. 6 BYU in Big 12 play on a chilly Saturday night in Provo, Utah.