Veteran striker Jon Macken, back in the Saddlers' attack after injury, burst onto a long through ball from Aaron Lescott in the 69th minute to chip Saints' keeper Kelvin Davis for his fifth goal of the season.
Southampton had dominated the first half with their quick passing and slick movement but could not beat Walsall's long-serving keeper James Walker, who pulled off a string of fine saves.
As early as the second minute Walker denied Morgan Schneiderlin who looked certain to score and was injured in the process, having to be replaced by Dany N'Guessan in the seventh minute.
Walker then saved from Lee Barnard twice and in the 23rd minute he saved again from Adam Lallana.
Walsall were restricted to quick breaks and after Julian Gray had a shot inches wide in the 57th minute, Macken grabbed what proved to be the winner on 69 minutes.
Southampton threw everything at the home defence in an effort to save a point but Walsall skipper Andy Butler cleared off the line from Barnard with 10 minutes left, and the Saddlers hung on for a precious win.