Carter Hutton allowed four goals on 22 shots through the second period before being pulled. Linus Ullmark made five saves on seven shots in relief.
Caggiula, acquired in a trade from the Edmonton Oilers on Dec. 30, scored his first goal for the Blackhawks when he spun a backhand shot past Hutton at 18:38 of the first period to make it 1-0. It was Caggiula's ninth game for Chicago.
"The first period, we had 15 shots, we should've had 25 shots," Buffalo coach Phil Housley said. "We passed up way too many opportunities, and when we did get shots nobody was in front of the net.
"We talk about that zone one, zone one. In this league, if you don't want to get there, you're not going to score. You look at the five goals out of the seven, the puck's on our stick."
Kane made it 2-0 50 seconds into the second on a breakaway for his 30th goal of the season and 900th career point.
"He's been doing this for so long, just being able to play alongside him, it allows me to kind of see it at first sight," Caggiula said. "It's a pretty special thing to watch him play."
Keith extended the lead to 3-0 when he scored off his own rebound off Hutton's pad at 5:06.