Bad Girls From Valley High

Danielle (Julie Benz), Tiffany (Nicole Bilderback) and Brooke (Monica Keena) are the three most popular and most nasty girls in their high school. While the leader Danielle is used to getting what she wants, she is unable to attract lonesome ex-jock Drew (Jonathan Brandis) due to his mourning over the death of his girlfriend Charity Chase. Although Charity was believed to have committed suicide, this wasn't the case as Danielle, Tiffany and Brooke lured Charity to a cliff, hoping to terrorize her into breaking up with Drew, but ended up killing her by accident.
A year to the day of Charity's death, Romanian foreign exchange student Katarina (Suzanna Urszuly) arrives during the class of clumsy Media Arts Professor Mr. Chauncey (Christopher Lloyd). Katarina and Drew immediately become friends. Jealous from this, Danielle tries to do everything in her power to stop this friendship developing into love. In an attempt to get close to Drew, Danielle works at the elderly home where Drew is also working. While there, she is assigned to look after an old lady (Janet Leigh) whom she believes is in a coma. Danielle, Tiffany and Brooke use this opportunity to raid the old lady's cupboard and eat her box of chocolates.
In the following two weeks, the three girls begin to notice that something strange is happening to them, they are receiving back pains and their hair is turning gray - to their horror they discover that they are aging at a rapid speed. They believe this has something to do with Katarina whom they now think is in fact Charity's ghost coming back to seek revenge. The three decide the only way to regain their youth is to kill Drew and let his spirit be with Charity. On the night of Danielle's 18th birthday party, the three lure Drew to the same gorge where Charity died and attempt to shoot him. Katarina shows up and says she is not Charity's ghost. Danielle briefly ponders this but decides to shoot them both anyway. However, Brooke (the kindest of all the three) says that they have gone too far and tries to prevent Danielle from pulling the trigger to which Drew disarms her (due to Danielle being distracted by a party guest dressed in a clown suit from her party who is secretly Mr. Chauncey and she shoots him), and both Tiffany and Danielle are overcome from exhaustion.
After they're carried to the old age home, Tiffany is hooked on a life support machine and Danielle is barely alive. At that moment, Mrs. Witt, the old woman who Danielle was meant to be caring for, shows up and reveals that she was Charity's grandmother. Also, while she had been briefly unable to speak due to a stroke, she had very good hearing and sight and overheard Danielle bragging about Charity's murder. The grandmother then reveals she poisoned the chocolate box (knowing that the girls would eat it) with an aging chemical (thanks to her late friend's husband that works with biological warfare technology). While Danielle and Tiffany had eaten most of the poisoned chocolate, Brooke wasn't near death as she didn't eat as many and demonstrated self-control. In response to this revelation, Danielle flips the bird at Mrs. Witt, and then dies, with Tiffany presumably following shortly afterwards.
At Danielle and Tiffany's funeral, everyone is in attendance, including Drew and Katarina (now an official couple) attends. Brooke is also in attendance after a plastic surgeon's operation give her a 50-year-old's appearance. Chauncey forgives her as he knew she wasn't as cruel as Danielle and Tiffany, and she regrets what she has done.
Danielle and Tiffany are then revealed to be in a luxurious room with their youth restored and are convinced that they are in heaven. But it is revealed that they are actually in hell as they are forced to forever endure the company of their school's most annoying dork, Jonathan Wharton (Aaron Paul), who is completely devoted to Danielle's every move. As such, he reveals that he committed suicide just to be with her forever and briefly morphs into the devil, to her and Tiffany's horror.

Question: Who was the ghost?
Answer: Charity