Bafana started brightly and managed to carve out a chance after nine minutes but Tokelo Rantie fired wide of the upright with only Josimar Dias to beat.
The visitors, meanwhile, did not sit back as they went close with efforts from Mario Soares and Ryan Mendes after 15 minutes.
Stuart Baxter's charges enjoyed plenty of the possession in the opening half, but they were let down by their final ball around the 18-yard area.
Hlompho Kekana went close to handing the home side the lead after 37 minutes from a set-piece, but his curling effort sailed just over the crossbar.
There was some good combination play between the likes of Keagan Dolly and Themba Zwane in the opposition's half, although that did not lead to clear-cut openings as the score remained goalless at the halftime break.
The visitors got off to a good start in the second half and they broke the deadlock in the 52nd minute when Garry Rodrigues rifled home a superb free-kick from around 30 yards out.
Baxter responded by introducing Lebogang Manyama for Zwane three minutes later.
However, the crowd at Moses Mabhida were stunned once again in the 67th minute whenRodrigues cut inside and unleashed an unstoppable effort that sailed into the top corner.
With time running out, Baxter brought on Mamelodi Sundowns attacker Percy Tau for Kekana on 77 minutes.
Andile Jali managed to reduce the deficit in the 89th minute as he drilled home a low effort from 18 yards out.
Bafana threw everything forward at the death in search of an equaliser, but they were unable to carve out another chance as Cape Verde held on for the win.
Bafana: Sandilands (G), Gould, Hlatshwayo, Hlanti, Mphahlele, Furman, Kekana (Tau 78'), Zwane (Manyama 55'), Dolly, Grobler (Jali 65'), Rantie
Unused subs: Pieterse, Williams, Daniels, Langerman, Mobara, Claasen, Serero, Mokotjo, Zungu, Erasmus
Cape Verde: Dias, Almeida, Pereira, Rodrigues Dos Santos, Da Druz, Soares, Rocha, Rodrigues, Mendes, Tavares.