Kilmarnock manager Kenny Shiels was left raging by the award of a penalty as Paul McGowan's double helped ensure a victory for St Mirren.
McGowan, recalled to the starting line-up after being left out in midweek, headed in Jereon Tesselaar's excellent cross from the left on the half-hour.
The Buddies won a penalty just before the break after it was ruled that Zdenek Kroca used an arm.
McGowan fired in the spot kick and Nigel Hasselbaink headed in late on.
But the talking point will be that penalty, which so enraged Shiels that he had to be pulled away from the officials at half-time by his own players as he continued to complain about the decision.
Both sides went into the game off victories that took them into the quarter-finals of the Scottish Communities League Cup.
McGowan replaced Nigel Hasselbaink up front for a Saints side looking to end a goal drought in their last three Scottish Premier League matches at home.
Kilmarnock were first to threaten after a fine passing move as Garry Hay, who started in place of Gary Fisher, slipped the ball through for Paul Heffernan, but the in-form striker's shot on the turn was well parried by goalkeeper Craig Samson.
Heffernan's strength was causing the home defence problems and a fantastic run from the Irishman past four St Mirren defenders ended with his shot being deflected into the arms of Samson.
Cammy Bell was called into action for the first time after 15 minutes, when Steven Thompson's downward header was tipped round the post by the Kilmarnock keeper.
Heffernan had the ball in the net when he again got in behind the St Mirren defence to round Samson and tap into the net, but the striker was flagged offside.
The hosts went ahead against the run of play when Tesselaar's excellent cross from the left was headed across Bell and into the far corner by McGowan.
Having got the goal, St Mirren grew in confidence and Thompson just failed to get on the end of another fine cross by Tesselaar before Gary Teale had claims for a penalty waved away.
The home side were awarded a spot-kick just on half-time after referee Stephen Finnie consulted his assistant.
It was decided that Steven Thomson's cross struck Kroca's arm inside the box and McGowan stepped up to slot home.
Bell made a great save after the break to tip Steven Thompson's glancing header to safety.
Kilmarnock started to dominate and captain Manuel Pascali's powerful effort was tipped over by Samson.
However, Kenny McLean's replacement Hasselbaink settled the game with five minutes remaining when he outmuscled his marker to head home from a David Van Zanten cross.