Worcester played the final 25 minutes without South African full-back Thinus Delport, who was sent off after being shown a second yellow card.
Irish took the lead through a Kieran Roche try but Worcester hit back when Delport claimed a converted score.
Shane Geraghty's try gave the Exiles a 12-7 interval lead and Shane Drahm's penalty was not enough for the hosts.
Referee Wayne Barnes ordered uncontested scrums with 30 minutes of the match remaining after Worcester props Tony Windo and Tevita Taumoepeau went off injured in quick succession.
Exiles boss Brian Smith:
"We made hard work of it. We created a lot of opportunities, but we struggled to finish them off and spurned situations like three-on-one overlaps. "We didn't play up to the level we wanted to, but the rugby gods smiled on us.
"Our defence was very good, but it is hard when the scrums go uncontested. It was bordering on rugby league in the final 10 or 15 minutes.
"The game has to look at it, and maybe consider going to eight players on the bench instead of seven, including three front-row forwards."
Worcester: Delport; Havili, Rasmussen, Lombard, Tucker; Drahm, Powell; Windo, van Niekerk, Tuamoepeau; Murphy, Gillies; Vaili, Sanderson, Horstmann.
Replacements: Gomarsall for Powell (72), Hickie for van Niekerk (32), McDonald for Tuamoepeau (32), Blaze for Vaili (72). Not Used: Harding, Whatling, Trueman.
Sin Bin: Delport (16).
Sent Off: Delport (55).
London Irish: Armitage; Ojo, Franze, Geraghty, Bishop; Flutey, Hodgson; Hatley, Russell, Skuse; Casey, Roche; Danaher, Magne, Murphy.
Replacements: Edwards for Hodgson (69), Dawson for Hatley (54), Paice for Russell (49), Rautembach for Skuse (41), Leguizamon for Murphy (41). Not Used: Penney.
Sin Bin: Flutey (55).
Att: 9,726
Ref: Wayne Barnes (England).