Grifo fired home a stunning free-kick, curling the ball in off a post from 30 yards out to hand his side the lead inside six minutes.
Dortmund had dictated possession for the opening minutes and that theme continued, despite it going behind.
Jude Bellingham and Erling Haaland forced saves from Mark Flekken before the 18-year-old Englishman came closest to scoring for Dortmund, hitting the post with a header from Gio Reyna's corner.
Wooyeong Jeong should have put the home side two goals in front moments later, but miscued his effort from right in front of goal.
Nico Schulz came off injured before the break with Raphael Guerreiro on for his first appearance of the campaign, with that rare chance for Freiburg the last of a half which Dortmund dominated in terms of possession.
Freiburg came out in the second half with renewed confidence and deservedly doubled its lead just eight minutes after the restart.
A swift counter-attack sent Jeong down the left, and his cross found Lucas Höler in the middle who headed down for Sallai to thump home through a host of defenders.
Six minutes later and the game was back on as Yannik Keitel diverted the ball into his own net from Felix Passlack's cross.
Dortmund continued to pile on the pressure, but Freiburg's defence performed well to keep Haaland and his prolific team-mates.
Julian Brandt, Emre Can and Mats Hummels all came on for their first outings of the season, but Dortmund struggled to break through a stubborn Freiburg defence, suffering a first Bundesliga defeat of the Rose era.