Starting ahead of Andre Silva with Nikola Kalinic sidelined, Cutrone volleyed home from close range to give the Rossoneri a second-minute lead in a Serie A clash between teams in contrasting form.
Milan survived the odd scare in the remainder of the first half but were comfortably the better side after the break, the young striker rewarding their dominance by poaching his second of the game just after the hour mark.
Lucas Biglia produced a precise finish from outside the area to score his first Milan goal and the three points were wrapped up by substitute Fabio Borini in the last minute, with the victory extending the visitors' unbeaten league run to seven matches.
Gattuso will hope they can extend their impressive streak when they host Sampdoria next week, though they will be without Franck Kessie for that game after the midfielder's first-half booking on Saturday triggered a one-match ban.
SPAL, in contrast, remain stuck in the relegation places as their wait for a league win in 2018 goes on.
They suffered a disastrous start when falling behind inside two minutes, Cutrone reacting quickly to convert a rebound after goalkeeper Alex Meret had kept out Alessio Romagnoli's header from Suso's right-wing cross.
Yet the hosts – who had dropped into the bottom three after a run of just one victory in 12 Serie A games – responded impressively to the early setback.
Mirco Antenucci narrowly failed to provide the finishing touch to Bartosz Salamon's flicked header, with Milan's defence just about coping under an aerial bombardment, both from open play and set-pieces.
They also needed help from the woodwork to retain their lead through to the interval, Federico Viviani's curling free-kick hitting the post and going wide with goalkeeper Gianluigi Donnarumma rooted to the spot.
The reprieve appeared to kick Milan into life for the second half; Gattuso's side showed greater composure in possession, drawing SPAL's sting before crucially grabbing the game's second goal.
Suso was once again the architect, this time cutting in from the right to get away a left-footed low shot Meret could only parry directly into Cutrone's path. The frontman stuck out a leg to divert the ball into the unguarded net, his scuffed finish putting clear daylight between the teams.
Biglia made far cleaner contact in scoring the visitors' third in the 73rd minute, the midfielder robbing an over-confident Viviani of possession before steering a low drive into the bottom right corner.
Borini then completed the scoring, the late replacement greeting Riccardo Montolivo's inviting pass through the left channel with a first-time finish that had too much power for the poor Meret to keep out.
Key Opta Stats:
- AC Milan are unbeaten in six Serie A matches for the first time since October 2016 (W4, D2).
- Milan have won four of their last five league games, as many as they had won in the previous 15.
- They won by at least four goals in Serie A for their first time since April 2017 (v Palermo).
- Patrick Cutrone scored his first double in Serie A.
- Cutrone's goal for AC Milan after 1 minute 41 seconds is their fastest Serie A goal since October 6, 2013 (Muntari v Juventus).
- Fabio Borini scored in a Serie A match for the first time since March 2012 in Palermo v Roma.
- Lucas Biglia's first goal for AC Milan came on appearance number 24 in all competitions.