Morocco controlled the early stages and moved the ball confidently in midfield, pinning Mali back for long spells. Brahim Diaz went close in the 16th minute after quick combination play, but Mali goalkeeper Djigui Diarra reacted well to keep out the Real Madrid midfielder.
Ayoub El Kaabi later found space in the box but failed to direct his header on target.
The deadlock was broken just before half-time following a VAR review. Nathan Gassama was penalised for a handball after the referee overturned his original decision. Diaz stepped up and calmly converted the penalty, sending Diarra the wrong way to give Morocco a deserved lead.
The second half started quietly, but the momentum shifted after another VAR intervention. Jawad El Yamiq was judged to have fouled Lassine Sinayoko inside the area. Sinayoko took responsibility from the spot and finished confidently to bring Mali level, scoring his ninth international goal.
Morocco pushed hard for a winner in the closing stages and looked the more dangerous side. Youssef En Nesyri had a clear chance after a defensive mistake, but Diarra produced another important save.
Mali survived a nervous ending, including a late defensive header that almost resulted in an own goal, to secure a valuable point.
After two matches in Group A, Morocco remain top of the standings with four points. Mali and Zambia are level in second place with two points each, having scored and conceded the same number of goals for a goal difference of zero. The Comoros sit bottom of the group with one point from their two matches.
Morocco stay on course to qualify as group winners, while Mali keep their qualification hopes alive ahead of a decisive final group match against Zambia.